この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

リモートオブジェクト使用のベストプラクティス

Visualforce リモートオブジェクトは、Visualforce ページに単純なデータ操作をすばやく追加するための有効性の高いツールです。リモートオブジェクトは使いやすく軽量なコンポーネントであり、Apex コードで Salesforce サービスに対するデータの読み取りや書き込みを実装する必要がありません。ただし、リモートオブジェクトがツールとして適切でないジョブもあるため、リモートオブジェクトの仕組みや、JavaScript Remoting など別のツールを使用すべき場合を理解しておくことが重要です。

項目レベルセキュリティ

リモートオブジェクトには組織の項目レベルセキュリティ設定が反映されます。リモートオブジェクトを使用するページを作成する場合はこの点を考慮します。ページを表示しているユーザーにアクセス権限がない項目は空白で表示されます。項目データを変更するアクション (create()update()、および upsert()) は、アクセスできない項目が要求に含まれていればエラーで失敗します。

トランザクション境界

リモートオブジェクトでは、コードでトランザクション境界の制御が行われません。各リモートオブジェクト操作 (create()update() など) は、別個のトランザクションです。操作がそれぞれ成功したり失敗したりすると、ビジネスプロセスの一部として複数の関連するオブジェクトを作成または変更する必要がある場合に問題になる可能性があります。たとえば、請求書レコードと関連する品目レコードを作成した場合、各レコードは別個のトランザクションに保存されます。リモートオブジェクト操作の一部は失敗し、一部は成功すると、データが整合性のない状態のままになることがあります。この問題は、サービスの信頼性には関係しません。この例では、一部の品目が入力規則に適合せずに失敗すると、レコードは作成されず、請求書は不完全なままになります。コードでクリーンアップして再試行しなければなりません。

一方で、JavaScript Remoting のトランザクション境界は Apex @RemoteAction メソッドにあります。1 つのメソッド内で簡単に請求書レコードと関連する品目レコードを作成できます。自動的な Apex トランザクションにより、すべてのレコードはまとめて作成されるか、一切作成されません。

ビジネスロジックの適切な配置とテスト

アプリケーションのビジネスロジック (特に複雑なロジックの場合) を配置する場所は、十分に考慮する必要があります。個々のオブジェクトの作成、編集、削除ができる簡単なページを作成する場合、「リモートオブジェクトと jQuery Mobile の併用例」のように、ビジネスロジックは最小限ですみます。ビジネスロジックをリモートオブジェクトと JavaScript でクライアント側に配置するだけで十分な場合があります。ただし、ビジネスルールやビジネスプロセスがより複雑な場合、そのロジックをクライアントレイヤーから外してサーバー側に構築する方がより効果的になる可能性があります。

組織のビジネスロジックをどこに配置するか判断するときには、次の点を考慮してください。
  • セキュリティと一貫性: トランザクションの途中でユーザーのネットワーク接続が失われたり、ユーザーがページの JavaScript 実行方法を Firebug などのツールで変更したりすることがある点を念頭に置きます。リモートオブジェクトでは、入力規則、トリガー、共有ルール、項目レベルセキュリティ、およびその他のデータアクセス制限が適用されますが、ビジネスルールを Salesforce ではなく JavaScript 内に配置すると、それらが中断、変更、または迂回される可能性があります。
  • テスト容易性: サーバー側のビジネスロジックは、Salesforce でテスト用に用意されているさまざまなツールを使用できます。このため、複雑な動作は Apex に配置し、Apex テストフレームワークを使用してビジネスロジックが意図したとおりに機能するか検証することをお勧めします。
  • パフォーマンス: トランザクション処理の一部として多くのレコードを参照する必要があり、ブラウザーにはレコードを表示しない場合は、クライアントにそのデータを送信するのは避け、代わりにデータをサーバーで「ローカル」に処理することをお勧めします。ページが機能するためにどのデータが必要かを考え、ネットワークを介して不必要にデータをコピーしないようにします。

複雑さへの対応

アプリケーションでは、複雑さを注意深く管理する必要があります。単純な取引先責任者管理ページや店舗検索ページでは、複雑さの管理はそれほど必要ではありませんが、多くのビジネスプロセスでは必要です。リモートオブジェクトと良好に連携できる jQuery や AngularJS などの JavaScript フレームワークは、アプリケーションのユーザーインターフェースの複雑さに対応するのに役立ちます。アプリケーションの懸念事項を複数のレイヤーに分割し、できるだけ分離した状態を保つことを常に考慮します。これは「懸念事項の分離」と呼ばれ、従来からあるソフトウェアパターンであり、ベストプラクティスです。

データの整合性規則をトリガーと入力規則に組み込むことを検討します。また、ビジネスプロセスルールを Apex コードにカプセル化することを検討します。@RemoteAction メソッドからアクセスできるようにし、JavaScript Remoting や SOAP または REST サービスと併用して場所を問わずに使用できるようにします。

リモートオブジェクトの代替方法

リモートオブジェクトは、基本的なデータ操作を行うページをすばやく作成するための便利なツールです。ページで実行する必要があるジョブがそれよりも高度な場合、Salesforce では Lightning プラットフォーム開発者向けに多くの代替方法を用意しています。
  • 標準の Visualforce を使用すると、幅広いアプリケーション機能を実装できます。Visualforce では、標準のコントローラー使用時に多くの自動機能が用意されており、独自の Apex コードによる完全なカスタム機能もサポートしています。
  • JavaScript Remoting もサードパーティの JavaScript フレームワークと良好に連携できるため、Apex でカスタムビジネスロジックにアクセスできます。
  • Salesforce モバイルでは、モバイルアプリケーションをすばやく作成できます。コードではなく宣言型ツールを使用して作成できる場合もあります。

ページやアプリケーションで必要な操作を十分に考慮し、各ジョブに最適なツールを選択してください。最適なツールがリモートオブジェクトの場合も、他のツールである場合もあります。