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

外部 ID を使用してレコードを挿入/更新 (Upsert) する

指定された外部 ID 項目の値に基づいて、レコードを作成するか、既存のレコードを挿入/更新 (Upsert) するには、sObject Rows by External ID リソースを使用します。

可能な場合は、Equality の会社の値に一致するように、含めない用語を変更しました。顧客の実装に対する影響を回避するために、一部の用語は変更されていません。

重要

  • 外部 ID が一致しない場合は、リクエストボディに従って新規レコードが作成されます。
  • 外部 ID が一度だけ一致する場合は、リクエストボディに従ってレコードが更新されます。
  • 外部 ID が複数回一致する場合は、300 エラーが報告され、レコードは作成も更新もされません。

以降のセクションでは、外部 ID リソースを使用して外部 ID でレコードを取得する方法とレコードを Upsert する方法を説明します。

REST API では、upsert はレコード ID ではなく外部 ID を使用します。ただし、Apex では、upsert を外部 ID およびレコード ID と共に使用できます。REST API と Apex の両方を使用する場合は、この相違点に注意してください。

メモ

新規レコードの Upsert

この例では、PATCH メソッドを使用して新規レコードを挿入します。外部 ID 項目「customExtIdField__c」がすでに Account に追加されていると想定します。また、customExtIdField 値が 11999 の Account レコードがまだ存在していないと想定します。

まだ存在していないレコードを Upsert する例
JSON リクエストボディ newrecord.json ファイルの例
JSON 応答の例
成功を示す応答を次に示します。

HTTP 状況コードは 201 (Created) です。

created パラメータが応答に表示されるのは、API バージョン 46.0 以降です。それより前のバージョンでは表示されません。

メモ

エラー応答
外部 ID 項目が不正な場合は、次のような応答が返されます。
詳細は、「状況コードとエラー応答」を参照してください。

Id を外部 ID として使用した新規レコードの挿入

この例では、特殊なケースとして POST メソッドを使用し、Id 項目が外部 ID として処��されるレコードを挿入します。Id の値は null であるため、要求から除外されます。このパターンは、異なる外部 ID によって複数のレコードを Upsert するコードを記述していて、個別のリソースを要求したくない場合に役立ちます。Id を使用する POST は、API バージョン 37.0 以降で使用できます。

まだ存在していないレコードを挿入する例
JSON リクエストボディ newrecord.json ファイルの例
JSON 応答の例
成功を示す応答を次に示します。

HTTP 状況コードは 201 (Created) です。

created パラメータが応答に表示されるのは、API バージョン 46.0 以降です。それより前のバージョンでは表示されません。

メモ

既存のレコードの Upsert

この例では、PATCH メソッドを使用して既存のレコードを更新します。外部 ID 項目「customExtIdField__c」がすでに Account に追加されていて、customExtIdField 値が 11999 の Account レコードがすでに存在すると想定します。要求では updates.json を使用して更新する項目値を指定します。

既存のレコードを Upsert する例
JSON リクエストボディ updates.json ファイルの例
JSON 応答の例
API バージョン 46.0 以降では、HTTP 状況コードは 200 (OK) で、成功を示す応答は次のとおりです。

API バージョン 45.0 以前では、HTTP 状況コードは 204 (No Content) で、レスポンスボディはありません。

エラー応答
外部 ID 値が一意でない場合、HTTP 状況コード 300 が返され、さらにクエリに一致したレコードのリストが返されます。エラーについての詳細は、「状況コードとエラー応答」を参照してください。
外部 ID 項目が存在しない場合、エラーメッセージとコードが返されます。

レコードの Upsert と外部 ID との関連付け

オブジェクトでリレーションを使用して他のオブジェクトを参照する場合、REST API を使用し、レコードの挿入/更新の両方を行うことができ、さらに外部 ID を使用して別のオブジェクトの参照できます。

次の例では、レコードを作成し、外部 ID を介して親レコードに関連付けます。次の条件を想定します。
  • Merchandise__c カスタムオブジェクトには、外部 ID 項目 MerchandiseExtID__c がある。
  • Line_Item__c カスタムオブジェクトには、外部 ID 項目 LineItemExtID__c と、Merchandise__c へのリレーションがある。
  • MerchandiseExtID__c 値が 123 の Merchandise__c レコードが存在する。
  • LineItemExtID__c 値が 456 の Line_Item__c レコードは存在しない。これは作成され、Merchandise__c レコードに関連付けられるレコードです。
レコードを Upsert して関連オブジェクトを参照する例
JSON リクエストボディ new.json ファイルの例
関連する Merchandise__c レコードは、Merchandise__c の外部 ID 項目を使用して参照されます。
JSON 応答の例
成功を示す応答を次に示します。

HTTP 状況コードは 201 (Created) です。

created パラメータが応答に表示されるのは、API バージョン 46.0 以降です。それより前のバージョンでは表示されません。

メモ

エラー応答
外部 ID 値が一意でない場合、HTTP 状況コード 300 が返され、さらにクエリに一致したレコードのリストが返されます。エラーについての詳細は、「状況コードとエラー応答」を参照してください。
外部 ID 項目が存在しない場合、エラーメッセージとコードが返されます。
既存のレコードの更新には次の方法を使用することもできます。たとえば、上記の例の Line_Item__c を作成した場合、別の要求を使用して関連する Merchandise__c の更新を試みることができます。
レコードを更新する例
JSON リクエストボディ updates.json ファイルの例
ここでは、MerchandiseExtID__c 値が 333 の別の Merchandise__c レコードが存在すると想定します。
JSON 応答の例
API バージョン 46.0 以降では、HTTP 状況コードは 200 (OK) で、成功を示す応答は次のとおりです。

API バージョン 45.0 以前では、HTTP 状況コードは 204 (No Content) で、レスポンスボディはありません。

リレーション種別が主従関係で、リレーションが親の変更を許可しないように設定されている場合、親の外部 ID を更新しようとすると、HTTP 状況コード 400 エラーとエラーコード INVALID_FIELD_FOR_INSERT_UPDATE が返されます。