ステップ 5: 一括更新/挿入
-
オブジェクトが外部 ID 項目を使用していることを確認します。
レコードを更新/挿入するには、ジョブに含まれるオブジェクトに外部 ID 項目が必要です。Bulk API 2.0 は、レコードが既存レコードの更新とレコードの作成のどちらに使用されるかを外部 ID 項目を使用して判断します。
この例では、外部 ID 項目 customExtIdField__c が Account オブジェクトに追加されているものと想定します。オブジェクトマネージャーでこのカスタム項目を組織に追加するには、次のプロパティを使用します。詳細は、Salesforce ヘルプの「カスタム項目の作成」を参照してください。- データ型 — text
- 項目表示ラベル — customExtIdField
- [外部 ID] を選択します
-
更新/挿入するレコードを含む CSV ファイルを作成します。
CSV ファイルの最初の行には、処理するオブジェクトの項目名をリストします。それ以降の行は、挿入するレコードに対応します。
CSV ファイル内の 1 列は、外部 ID 項目 customExtIdField__c に対応している必要があります。
使用可能な区切り文字や有効な日時形式など、CSV ファイルの準備については、「Bulk API 2.0 取り込み」を参照してください。
この例では、次の情報を accountupsert.csv という名前のファイルにコピーします。
1customExtIdField__c,name,NumberOfEmployees 2123,GenePoint,800 3234,"United Oil & Gas, UK",1467 4345,"United Oil & Gas, Singapore",348 5456,Edge Communications,10045 6567,Burlington Textiles Corp of America,5876 7678,Dickenson plc,67 8789,Grand Hotels & Resorts Ltd,409 9890,Express Logistics and Transport,243 10901,University of Arizona,9506 111350,United Oil & Gas Corp.,5467 121579,sForce,40000 132690,University of The Terrific,1257 -
外部 ID 項目を含むジョブを作成します。
次の情報を newupsertjob.json という名前のファイルにコピーします。
1{ 2 "object" : "Account", 3 "externalIdFieldName" : "customExtIdField__c", 4 "contentType" : "CSV", 5 "operation" : "upsert", 6 "lineEnding" : "LF" 7}URI
1/services/data/v60.0/jobs/ingest/一括更新/挿入ジョブの作成例
1curl https://MyDomainName.my.salesforce.com/services/data/v60.0/jobs/ingest/ -H 'Authorization: Bearer 00DE0X0A0M0PeLE!AQcAQH0dMHEXAMPLEzmpkb58urFRkgeBGsxL_QJWwYMfAbUeeG7c1EXAMPLEDUkWe6H34r1AAwOR8B8fLEz6nEXAMPLE' -H "Content-Type: application/json" -H "X-PrettyPrint:1" -d @newupsertjob.json -X POSTレスポンスボディの例
応答にはジョブ ID が含まれており、ジョブの状態として Open が示されています。ジョブ ID と contentUrl 項目の URL は、次のステップでデータをアップロードするときに使用します。
1{ 2 "id" : "7476gEXAMPLE4X2ZWO", 3 "operation" : "upsert", 4 "object" : "Account", 5 "createdById" : "0055fEXAMPLEtG4AAM", 6 "createdDate" : "2022-01-02T21:57:03.000+0000", 7 "systemModstamp" : "2022-01-02T21:57:03.000+0000", 8 "state" : "Open", 9 "externalIdFieldName" : "customExtIdField__c", 10 "concurrencyMode" : "Parallel", 11 "contentType" : "CSV", 12 "apiVersion" : 60.0, 13 "contentUrl" : "services/data/60.0/jobs/ingest/7476gEXAMPLE4X2ZWO/batches", 14 "lineEnding" : "LF", 15 "columnDelimiter" : "COMMA" 16} -
作成した CSV データファイルをアップロードします。
URI
便宜上、ステップ 1 での応答の contentUrl 項目の URI を使用します。URI は次のようになります。
1/services/data/v60.0/jobs/ingest/jobId/batches/データのアップロード例
1curl https://MyDomainName.my.salesforce.com/services/data/v60.0/jobs/ingest/7476gEXAMPLE4X2ZWO/batches/ -H 'Authorization: Bearer 00DE0X0A0M0PeLE!AQcAQH0dMHEXAMPLEzmpkb58urFRkgeBGsxL_QJWwYMfAbUeeG7c1EXAMPLEDUkWe6H34r1AAwOR8B8fLEz6nEXAMPLE' -H "Content-Type: text/csv" --data-binary @accountupsert.csv -X PUTレスポンスボディの例
レスポンスボディは返されません。
-
state を UploadComplete に設定します。
データの送信が完了したら、ジョブデータのアップロードが完了し、処理できる状態になったことを Salesforce サーバーに通知します。
upload_complete.json という名前の JSON ファイルを作成し、次の内容を含めます。
1{"state":"UploadComplete"}URI
/services/data/v60.0/jobs/ingest/jobId/
state を UploadComplete に設定する例
1curl https://MyDomainName.my.salesforce.com/services/data/v60.0/jobs/ingest/7476gEXAMPLE4X2ZWO/ -H 'Authorization: Bearer 00DE0X0A0M0PeLE!AQcAQH0dMHEXAMPLEzmpkb58urFRkgeBGsxL_QJWwYMfAbUeeG7c1EXAMPLEDUkWe6H34r1AAwOR8B8fLEz6nEXAMPLE' -H "Content-Type: application/json" -H "X-PrettyPrint:1" -d @upload_complete.json -X PATCHレスポンスボディの例
1{ 2 "id" : "7476gEXAMPLE4X2ZWO", 3 "operation" : "upsert", 4 "object" : "Account", 5 "createdById" : "0055fEXAMPLEtG4AAM", 6 "createdDate" : "2022-01-02T21:28:22.000+0000", 7 "systemModstamp" : "2022-01-02T21:28:22.000+0000", 8 "state" : "UploadComplete", 9 "externalIdFieldName" : "customExtIdField__c", 10 "concurrencyMode" : "Parallel", 11 "contentType" : "CSV", 12 "apiVersion" : 60.0 13} -
成功の結果を取得します。
ジョブの状態が JobComplete または Failed になったら、どのジョブデータレコードが正常に処理されたかについての詳細を取得できます。
URI
1/services/data/v60.0/jobs/ingest/jobId/successfulResults/成功の結果の取得例
1curl https://MyDomainName.my.salesforce.com/services/data/v60.0/jobs/ingest/7476gEXAMPLE4X2ZWO/successfulResults/ -H 'Authorization: Bearer 00DE0X0A0M0PeLE!AQcAQH0dMHEXAMPLEzmpkb58urFRkgeBGsxL_QJWwYMfAbUeeG7c1EXAMPLEDUkWe6H34r1AAwOR8B8fLEz6nEXAMPLE' -H "Content-Type: application/json" -H "Accept: text/csv" -H "X-PrettyPrint:1" -X GET応答には CSV 形式のデータが含まれており、各行には正常に処理されたレコードのレコード ID が入っています。
レスポンスボディの例
1"sf__Id","sf__Created",customExtIdField__c,name,NumberOfEmployees 2"0018c00002DJIpJAAX","true","123","GenePoint","800" 3"0018c00002DJIpKAAX","true","234","United Oil & Gas, UK","1467" 4"0018c00002DJIpLAAX","true","345","United Oil & Gas, Singapore","348" 5"0018c00002DJIpMAAX","true","456","Edge Communications","10045" 6"0018c00002DJIpNAAX","true","567","Burlington Textiles Corp of America","5876" 7"0018c00002DJIpOAAX","true","678","Dickenson plc","67" 8"0018c00002DJIpPAAX","true","789","Grand Hotels & Resorts Ltd","409" 9"0018c00002DJIpQAAX","true","890","Express Logistics and Transport","243" 10"0018c00002DJIpRAAX","true","901","University of Arizona","9506" 11"0018c00002DJIpSAAX","true","1350","United Oil & Gas Corp.","5467" 12"0018c00002DJIpTAAX","true","1579","sForce","40000" 13"0018c00002DJIpUAAX","true","2690","University of The Terrific","1257"エラーが発生したレコードの詳細を取得するには、failedResults リソースを使用します。完全な結果セットを参照していることを確認するには、unprocessedRecords リソースを使用します。「ジョブ未処理レコードの結果の取得」を参照してください。