Salesforce Connect 外部オブジェクトに関する Apex の考慮事項
Apex コードは、Salesforce Connect アダプタ経由で外部オブジェクトデータにアクセスできますが、いくつかの要件と制限が適用されます。
- 以下の機能は、外部オブジェクトでは使用できません。
- Apex による共有管理
- Apex のトリガ
- 開発者が Apex を使用して外部オブジェクトレコードを操作する場合、非同期のタイミングと有効なバックグラウンドキューにより、保存時の競合の可能性が最小限に抑えられます。一連の特殊な Apex メソッドとキーワードにより、書き込み実行で生じる可能性があるタイミングの問題が処理されます。Apex では、削除操作や更新/挿入操作の結果も取得できます。BackgroundOperation オブジェクトを使用して、API または SOQL を介して書き込み操作のジョブの進行状況を監視します。
- ポータルユーザがコミュニティメンバーの場合でも、Database.insertAsync() メソッドをポータルユーザのコンテキストで実行することはできません。Apex で外部オブジェクトレコードを追加するには、Database.insertImmediate() メソッドを使用します。
-
Database.QueryLocator で Apex 一括処理を使用して、Salesforce Connect の OData アダプタ経由で外部オブジェクトにアクセスする場合、次の点に注意してください。
- 外部データソースで [要求の行数] を有効にして、外部システムからの各応答に結果セットの合計行数を含める必要があります。
- 外部データソースで [サーバ駆動のページ設定] を有効にして、大きな結果セットのページサイズとバッチの区切りを外部システムで決定することをお勧めします。通常、サーバ駆動ページングはバッチの区切りを調節して、データセットの変更にクライアント駆動ページングよりも効率的に対応できます。
外部データソースで [サーバ駆動のページ設定] が無効になっている場合、OData アダプタでページングの動作を制御します (クライアント駆動)。ジョブの実行中に外部オブジェクトレコードが外部システムに追加されると、他のレコードが 2 回処理される可能性があります。ジョブの実行中に外部オブジェクトレコードが外部システムから削除されると、他のレコードがスキップされる可能性があります。
- 外部データソースで [サーバ駆動のページ設定] が有効になっている場合、実行時のバッチサイズは次のサイズよりも小さくなります。
- Database.executeBatch の scope パラメータで指定したバッチサイズ。デフォルトは 200 レコードです。
- 外部システムから返されるページサイズ。200 レコード以下のページサイズが返されるように外部システムを設定することをお勧めします。