LoginSignup
2
0

Bulk API 2.0 を使ってレコードを削除する【Postmanから使う】

Last updated at Posted at 2023-12-22

Postmanのまとめのまとめに戻る

少し前にモジュールの解説をしていますが、今回はレコードの削除に限定して具体的な操作を説明します。

Bulk API 2.0での操作手順について

私は少し勘違いをしていたのですが、Bulk API2.0を操作する手順は以下のステップを全て行うことで完了します。

  1. 一括ジョブの作成(オブジェクトを指定してどのような操作をするか指定します。insert,update,deleteなど)
  2. ジョブへのデータの追加(実際に使うcsv形式のデータをアップロードします)。この時にjob Idが必要になります。
  3. Salesforce サーバへのアップロード完了の通知。この時にもjob Idが必要になります。

job Idは一括ジョブの作成を行うとtest処理の中で変数に自動的にセットされます。

この1~3のステップで処理が開始されます。

その後はJobの監視をして、成功したか、エラーだったかを確かめます。

Postmanに接続します

今回もPostmanを使って確かめたいと思います。
PostmanからSalesforceにアクセスする方法は、以下を参考にして下さい。

言語設定が英語のままでこの資料を作ってしまったので、最後まで英語モードで作っていきます。ごめんなさい。

1. 一括ジョブの作成

  1. [Collections (コレクション)] で [Bulk v2] フォルダーを開きます。
  2. [POST Create job] をクリックします。

image.png

3. PostするまえにBodyを変更します

image.png

{
"operation" : "delete",
"object" : "Account",
"contentType" : "CSV",
"lineEnding" : "CRLF"
}

改行はどのOSでcsvファイルを作ったかに依存する。今回私はWindows 11を使っているのでCRLFを指定します。

  • UNIX/Linux/OS X では、LF (改行、「\n」、0x0A) が使用されます。
  • Windows/DOS では、CRLF (行頭復帰および改行、「\r\n」、0x0D0A) が使用されます。

4. Sendをクリックします。

無事にJobが作成されたようです。

{
    "id": "7505i00000P57P9AAJ",
    "operation": "delete",
    "object": "Account",
    "createdById": "0055i00000BXxguAAD",
    "createdDate": "2023-12-21T02:06:27.000+0000",
    "systemModstamp": "2023-12-21T02:06:27.000+0000",
    "state": "Open",
    "concurrencyMode": "Parallel",
    "contentType": "CSV",
    "apiVersion": 59.0,
    "contentUrl": "services/data/v59.0/jobs/ingest/7505i00000P57P9AAJ/batches",
    "lineEnding": "CRLF",
    "columnDelimiter": "COMMA"
}

このスクリプトはジョブ ID を __jobID 変数に自動的に追加します。これによって今後の要求に jobID が挿入されるため、コピーして貼り付ける必要がありません。

image.png

私の場合は環境を設定しているので、そちらに__jobID が追加されています。

image.png

データの一括読み込みジョブの管理の画面を確認するとJobがOpenのステータスで作成されていることが分かります。
(申し訳ないですが今回はプレイグランドを使って確かめているので画面が英語のままです。)

image.png

2. ジョブへのデータの追加

Salesforce API コレクションのフォークで、[Bulk v2] フォルダーの [PUT Upload Job Data] をクリックします。HTTP メソッドは PUT です。

5. [Body(ボディ)] タブをクリックし、ドロップダウンから [Raw (未加工)] を選択します。

image.png

6. 次のテキストをテキストエディターにコピーすることで余分な書式設定をクリアしてから、そのテキストをテキストファイルからリクエストボディ項目にコピーします。

image.png

7. [ヘッダー] をクリックします。[Content Type (コンテンツタイプ)] は [text/csv] になっているかを確認しておきます。

image.png

8. [Save (保存)] をクリックします。
9. [Send (送信)] をクリックします。

今回はリソースが作成されているので、リターンコードは201で正常終了です。

image.png

400エラー  

ジョブへのデータの追加を2回行うとエラーになりますね。BulkAPI 2.0はJobは1つだけかな?

Found multiple contents for job: <7505i00000P577B>, please 'Close' / 'Abort' / 'Delete' the current Job then create a new Job and make sure you only do 'PUT' once on a given Job."

Jobを削除した後にジョブへのデータの追加を行うと当然エラーですね。

Failed to create batch, since the Job is not Open. Current job state is 'Aborted'

3. Salesforce サーバへのアップロード完了の通知

これでデータの送信が完了したため、データを処理する必要があることを Salesforce に通知する必要があります。

  1. Salesforce API フォークで、[Bulk v2] の [Query] フォルダーの [PATCH Close or Abort a Job] をクリックします。

  2. [Body(ボディ)] タブをクリックします。"state" に「UploadComplete」がすでに入力されています。

  3. [Send (送信)] をクリックします。

image.png

結果はステータスコード200で正常終了です。

image.png

データの一括読み込みジョブの管理の画面を確認するとJobがJob Completeと完了されています。

image.png

Salesforceの画面で確かめると既に消されてアクセスできないのでエラーになります。
確かに削除できました。

image.png

ジョブの状況の確認

Postman で [Bulk v2] フォルダーからジョブの状況を確認する手順は次のとおりです。

  1. [GET Job Info] を選択します。この種類の要求に使用される HTTP メソッドは GET です。
  2. [Send (送信)] をクリックします。

image.png

ジョブ結果の取得

ジョブの状況が JobComplete (または Failed) になると、レコードが正常に処理されたか否かの形で、結果情報を取得できます。

[Bulk v2] フォルダーで正常に処理されたレコードを見てみましょう。

  1. [GET Get Job Successful Record Results] リソースをクリックします。HTTP メソッドは GET です。
  2. [Send (送信)] をクリックします。表示は次のようになります。

image.png

エラーが無いかも確認してみましょう。今回は無いハズです。

  1. [GET Get Job Failed Record Results] リソースをクリックします。HTTP メソッドは GET です。
  2. [Send (送信)] をクリックします。表示は次のようになります。

image.png

以上でレコードを削除できました。

追記:2. ジョブへのデータの追加でcsvファイルを使う手順

ここからは日本語表示の画面です...

ボディタブのところで、バイナリを選択するとファイルをアップロードできます。

image.png

ファイルを選択できたので、送信ボタンをクリックします。

image.png

CSVファイルをアップロードして処理することも可能です。素晴らしい。やはり慣れたら簡単かもしれません。

image.png

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0