書き込み可能な外部オブジェクト
デフォルトで外部オブジェクトは参照のみですが、書き込み可能にすることができます。書き込み可能になれば、Salesforce ユーザーおよび API が、組織内の外部オブジェクトとやりとりして、組織外に保存されているデータを作成、更新、および削除することができます。たとえば、ユーザーが、SAP システムに存在し、Salesforce の取引先に関連付けられているすべての注文を表示できます。そして、Salesforce ユーザーインターフェースを開いたまま、新しい注文を実行したり、既存の注文を転送したりすることができます。関連するデータが SAP システムで自動的に作成または更新されます。
外部データへのアクセスは、Salesforce とデータを保存する外部システム間の接続によって異なります。ネットワーク遅延や外部システムの可用性によっては、外部オブジェクトでの Apex の書き込みまたは削除操作でタイミングの問題が生じることがあります。
こうした接続の複雑性により、Apex は、外部オブジェクトで標準の insert()、update()、または create() 操作を実行することができません。代わりに、Apex では、書き込み実行で生じる可能性のある問題に対処するための一連の特殊なデータベースメソッドおよびキーワードを用意しています。外部オブジェクトでの DML 挿入、更新、作成、削除操作は、非同期か、あるいは特定の条件に一致したときに実行されます。
次の例では、Database.insertAsync() メソッドを使用して、新規注文をデータベーステーブルに非同期に挿入します。この操作により、挿入ジョブの一意の識別子を含む SaveResult オブジェクトが返されます。
1public void createOrder () {
2 SalesOrder__x order = new SalesOrder__x ();
3 Database.SaveResult sr = Database.insertAsync (order);
4 if (! sr.isSuccess ()) {
5 String locator = Database.getAsyncLocator ( sr );
6 completeOrderCreation(locator);
7 }
8}外部オブジェクトでは、レコードの挿入、レコードの更新、レコードの更新/挿入、レコードの削除の DML 操作を非同期または条件に基づいて実行できます。DataSource 名前空間でクラスを使用して、非同期ジョブの一意の識別子を取得するか、更新/挿入、削除、または保存操作の結果リストを取得します。
外部オブジェクトで Apex メソッドを開始すると、ジョブがスケジュールされ、バックグラウンドジョブキューに配置されます。BackgroundOperation オブジェクトを使用すれば、API または SOQL を使用して書き込み操作のジョブの状況を表示できます。組織のジョブの進行状況および関連エラーの監視、統計の抽出、一括処理ジョブの処理、指定した期間内に生じたエラー数の確認などを行います。
使用状況に関する情報と例については、「Database 名前空間」および「DataSource 名前空間」を参照してください。