外部 ID を使用してレコードを挿入/更新 (Upsert) する
指定された外部 ID 項目の値に基づいて、新規レコードを作成するか、既存のレコードを挿入/更新 (Upsert) するには、sObject Rows by External ID を使用します。
- 指定された値が存在しない場合、新しいレコードが作成されます。
- 指定された値のレコードが存在する場合、リクエストボディに指定された項目値が更新されます。
- 値が一意でない場合、REST API によって、一致するレコードのリストと共に HTTP 状況コード 300 が返されます。
以降のセクションでは、外部 ID リソースを使用して外部 ID でレコードを取得する方法とレコードを Upsert する方法を説明します。
新規レコードの Upsert
この例では、PATCH メソッドを使用して新規レコードを挿入します。外部 ID 項目「customExtIdField__c」がすでに Account に追加されていると想定します。また、customExtIdField 値が 11999 の Account レコードがまだ存在していないと想定します。
- まだ存在していないレコードを Upsert する例
-
1curl https://na1.salesforce.com/services/data/v20.0/sobjects/Account/customExtIdField__c/11999 -H "Authorization: Bearer token" -H "Content-Type: application/json" -d @newrecord.json -X PATCH - JSON リクエストボディ newrecord.json ファイルの例
-
1{ 2 3 "Name" : "California Wheat Corporation", 4 "Type" : "New Customer" 5 6} - 応答
- 成功時の応答は次のとおりです。
1{ 2 "id" : "00190000001pPvHAAU", 3 "errors" : [ ], 4 "success" : true 5}レスポンスボディは空です。新しいレコードが作成されると、HTTP 状況コード 201 が返されます。
- エラー応答
- 外部 ID 項目が不正な場合は、次のような応答が返されます。
1{ 2 "message" : "The requested resource does not exist", 3 "errorCode" : "NOT_FOUND" 4} - 詳細は、「状況コードとエラー応答」を参照してください。
既存のレコードの Upsert
この例では、PATCH メソッドを使用して既存のレコードを更新します。外部 ID 項目「customExtIdField__c」がすでに Account に追加されていて、customExtIdField 値が 11999 の Account レコードがすでに存在すると想定します。要求では updates.json を使用して更新する項目値を指定します。
- 既存のレコードを Upsert する例
-
1curl https://na1.salesforce.com/services/data/v20.0/sobjects/Account/customExtIdField__c/11999 -H "Authorization: Bearer token" -H "Content-Type: application/json" -d @updates.json -X PATCH - JSON リクエストボディ updates.json ファイルの例
-
1{ 2 3 "BillingCity" : "San Francisco" 4 5} - 応答の例 (JSON)
- 既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。
- エラー応答
- 外部 ID 値が一意でない場合、HTTP 状況コード 300 が返され、さらにクエリに一致したレコードのリストが返されます。エラーについての詳細は、「状況コードとエラー応答」を参照してください。
- 外部 ID 項目が存在しない場合、エラーメッセージとコードが返されます。
1{ 2 "message" : "The requested resource does not exist", 3 "errorCode" : "NOT_FOUND" 4}
レコードの 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 して関連オブジェクトを参照する例
-
1curl https://na1.salesforce.com/services/data/v25.0/sobjects/Line_Item__c/LineItemExtID__c/456 -H "Authorization: Bearer token" -H "Content-Type: application/json" -d @new.json -X PATCH - JSON リクエストボディ new.json ファイルの例
- 関連する Merchandise__c レコードは、Merchandise__c の外部 ID 項目を使用して参照されます。
1{ 2 "Name" : "LineItemCreatedViaExtID", 3 "Merchandise__r" : 4 { 5 "MerchandiseExtID__c" : 123 6 } 7} - 応答の例 (JSON)
- 作成が成功すると、HTTP 状況コード 201 が返されます。
1{ 2 "id" : "a02D0000006YUHrIAO", 3 "errors" : [ ], 4 "success" : true 5} - エラー応答
- 外部 ID 値が一意でない場合、HTTP 状況コード 300 が返され、さらにクエリに一致したレコードのリストが返されます。エラーについての詳細は、「状況コードとエラー応答」を参照してください。
- 外部 ID 項目が存在しない場合、エラーメッセージとコードが返されます。
1{ 2 "message" : "The requested resource does not exist", 3 "errorCode" : "NOT_FOUND" 4}
既存のレコードの更新には次の方法を使用することもできます。たとえば、上記の例の Line_Item__c を作成した場合、別の要求を使用して関連する Merchandise__c の更新を試みることができます。
- レコードを更新する例
-
1curl https://na1.salesforce.com/services/data/v25.0/sobjects/Line_Item__c/LineItemExtID__c/456 -H "Authorization: Bearer token" -H "Content-Type: application/json" -d @updates.json -X PATCH - JSON リクエストボディ updates.json ファイルの例
- ここでは、MerchandiseExtID__c 値が 333 の別の Merchandise__c レコードが存在すると想定します。
1{ 2 "Merchandise__r" : 3 { 4 "MerchandiseExtID__c" : 333 5 } 6} - 応答の例 (JSON)
- 既存のレコードが更新される場合、HTTP 状況コード 204 が返されます。