サンプルの DataSource.Connection クラスの作成
sync
sync() メソッドは、システム管理者が外部データソースの詳細ページで [検証して同期] ボタンをクリックしたときに呼び出されます。このメソッドは、外部システムの構造的なメタデータを説明する情報を返します。
query
query メソッドは、外部オブジェクトで SOQL クエリが実行されたときに呼び出されます。SOQL クエリは、Salesforce でユーザが外部オブジェクトのリストビューまたは詳細ページを開いたときに自動的に生成され実行されます。DataSource.QueryContext は常に 1 つのテーブルのみを対象とします。
このサンプルのカスタムアダプタは、DataSource.QueryUtils クラスでヘルパーメソッドを使用して、SOQL クエリの WHERE および ORDER BY 句を基に結果の絞り込みや並び替えを行います。
DataSource.QueryUtils クラスとそのヘルパーメソッドは、Salesforce 組織内でローカルにクエリ結果を処理できます。このクラスは、初期テスト用の Salesforce Connect カスタムアダプタの開発を簡略化し、利便性を向上することを目的として提供されます。ただし、DataSource.QueryUtils クラスとそのメソッドは、コールアウトを使用して外部システムからデータを取得する本番環境での使用はサポートされていません。クエリ結果を Salesforce に送信する前に、外部システムで絞り込みと並び替えを完了してください。可能であれば、サーバ駆動ページングを使用するか、別の技法を使用してクエリの LIMIT および OFFSET 句に従って外部システムに適切なデータサブセットを判定させてください。
search
search メソッドは、外部オブジェクトの SOSL クエリによって呼び出されるか、外部オブジェクトも検索する Salesforce グローバル検索をユーザが実行したときに呼び出されます。DataSource.SearchContext は複数のオブジェクトに対する統合検索が可能なため、複数のテーブルを選択できます。ただし、次の例では、カスタムアダプタが 1 つのテーブルしか認識していません。
- makeGetCallout は、外部システムにコールアウトを実行します。
- foundRow は、コールアウトの結果の値に基づいて行に値を入力します。foundRow メソッドは、項目名や項目値の変更など、返された項目値に変更を行うために使用されます。
このスニペットに上記のメソッドは含まれませんが、「Connection クラス」に詳細な例が記載されています。通常、結果セットを縮小するために SearchContext または QueryContext の検索条件が使用されますが、この例では簡易化のため、コンテキストオブジェクトは使用していません。
upsertRows
upsertRows メソッドは、外部オブジェクトレコードが作成または更新されるときに呼び出されます。外部オブジェクトレコードは、Salesforce ユーザインターフェースまたは DML を使用して作成または更新できます。次の例は、upsertRows メソッドのサンプル実装を示しています。この例では、渡された UpsertContext を使用してどのテーブルが選択されたかを判断し、選択されたテーブルの名前が Sample の場合にのみ更新/挿入を実行します。更新/挿入操作は、新しいレコードの挿入と既存のレコードの更新のいずれかに分けられます。これらの操作は、コールアウトを使用して外部システムで実行されます。コールアウト応答から取得した結果を基に DataSource.UpsertResult の配列に値が入力されます。コールアウトは行ごとに実行されるため、次の例では Apex のコールアウト数の制限に達する可能性があります。
deleteRows
deleteRows メソッドは、外部オブジェクトレコードが削除されるときに呼び出されます。外部オブジェクトレコードは、Salesforce ユーザインターフェースまたは DML を使用して削除できます。次の例は、deleteRows メソッドのサンプル実装を示しています。この例では、渡された DeleteContext を使用してどのテーブルが選択されたかを判断し、選択されたテーブルの名前が Sample の場合にのみ削除を実行します。削除は、各外部 ID のコールアウトを使用して外部システムで実行されます。コールアウト応答から取得した結果を基に DataSource.DeleteResult の配列に値が入力されます。コールアウトは ID ごとに実行されるため、次の例では Apex のコールアウト数の制限に達する可能性があります。