前回はSalesforce社のサクセスナビの「Salesforceにデータを取り込む」掲載の以下3つのデータ取り込み方法から「データインポートウィザード」を用いました。
- データインポートウィザード
- データローダ
- Salesforce API
今回は「Salesforce API」である「Bulk2.0 API」を用いた取引先データインポート例をご紹介いたします。「Bulk2.0 API」の解説は無償の教育コンテンツTrailheadのPostmanテンプレートで学習が可能です。このPostmanテンプレート設定を参考に、AutoMateのHTTPアクションへ置き換えてみました。
動画で概要解説
全体の流れを音声付き、2分30秒のビデオで解説しています。
詳細設定は下記ブログ記事をご覧ください
設定概要
主に設定している事項は以下4点です。
- アクセストークンの取得
- 一括ジョブの作成
- csvファイルをアップロード
- ジョブを終了
アクセストークンの取得
Bulk2.0 APIをコール可能とするため、Salesforceへの認証が必要です。認証されるとAPI コール実行に使用するアクセストークンが提供されます。今回認証には「ユーザ名パスワードフロー」を使用しました。「ユーザ名パスワードフロー」認証には以下情報が必要です。
- client_id: 「接続アプリケーション定義」を実施し 「コンシューマ鍵」を取得
- client_secret:上記実施時に同時に 「コンシューマの秘密」を取得
- username:Salesforceログインに使用しているユーザ名
- password: Salesforceログインに使用しているパスワード
- セキュリティトークン:「セキュリティトークンをリセットする」で取得
下図2「oauthのEndPointをコールしアクセストークンを要求」では「ユーザ名パスワードフロー」の解説に従ってHTTPアクションの設定を行っています。
- ①Postメソッドで②URL「https://あなたの組織名/services/oauth2/token」を指定
- ③「投稿タイプ」から「フィールド」を選択
- ④「フィールドの要求」に上記で取得したclient_id、client_secret、username、password、セキュリティトークンを指定。ただしpasswordの値にはpasswordにセキュリティトークンを続けて指定します。例えばpasswordがmyPasswordでセキュリティトークンが12345の場合password値としてmyPassword12345と指定します。詳細はコチラのメモをご覧ください
- ⑤「データセットを作成してデータを設定する」に「dsResults」と指定。このdsResults内にアクセストークンが格納されているので後処理で取り出します。
- ⑥「content-Type(オプション)」に「application/x-www-form-urlencoded」と指定
- ⑦リクエストヘッダーに名前「Accept」、値「application/json」と指定
下図3「アクセストークン切り出し易くするためjsonオブジェクト化」では⑤で取得したデータセットdsResultsからアクセストークンだけを切り出せるように、まずはアクセストークンを含んでいる部分⑧dsResults.Dataを⑨変数jsonObjと言う名前で設定(⑩デコード)しています。
下図4「上記からアクセストークンのみ切り出し」では、⑨で設定したjsonObjからアクセストークンだけを指定するため、ドット記法でjsonObj.access_tokenと指定し変数accessTokenに設定しています。
ここで何故⑧のようにdsResults.Dataや⑫のようにjsonObj.access_tokenと指定しているのかは過去ブログ「AutoMateをREST Clientとして使う」の「①アクセストークンの要求を実行し結果を確認」の参照をお願いいたします。
一括ジョブの作成
BulkAPI2.0で言うところの「Create job」を実行し、job IDを取得しています。下図5「一括ジョブの作成(取引先をupsertモード)」はBulk API 2.0 and Bulk API Developer GuideのWalkthrough for Bulk Upsertを参考にしています。
- ⑬PostメソッドでCreate job APIエンドポイントの⑭URL「https://あなたの組織名/services/data/v58.0/jobs/ingest」を指定
- ⑮「投稿タイプ」から「Text」を選択し「テキスト」として「{"object" : "Account","externalIdFieldName" : "id","contentType" : "CSV","operation" : "upsert","lineEnding" : "CRLF"}」を指定
- ⑯「データセットを作成してデータを設定する」に「dsResults」と指定。このdsResults内にjob IDが格納されているので後処理で取り出します。
- ⑰「content-Type(オプション)」に「application/json」と指定
- ⑱リクエストヘッダーに上記⑪で取得したアクセストークンを名前「Authorization」、値「Bearer %accessToken%」と指定(Bearerと%accessToken%の間には半角スペースが入っています)。
下図「一括ジョブの作成結果からジョブIDを取得する準備(jsonをオブジェクト化)」では上記⑯で取得したデータセットdsResultsからジョブIDだけを切り出せるように、まずはジョブIDを含んでいる部分⑲dsResults.Dataを⑳変数jsonObjと言う名前で設定(㉑デコード)しています。
下図「ジョブIDを取得」では、上記⑳で設定したjsonObjからジョブIDだけを指定するためドット記法で㉓jsonObj.idと指定し㉒変数jobIdに設定しています。
csvファイルをアップロード
BulkAPI2.0で言うところの「Upload job Data」を実行し、csvファイルをアップロードします。
- メソッドは㉔Putで㉕URLは㉒で取得したjobIdを含む「https://あなたの組織名/services/data/v58.0/jobs/ingest/%jobId%/batches」を指定
- ㉖タイプからファイルを選択しアップロードするcsvファイルパス付のファイル名を指定
- ㉗は開発中レスポンスコードを参照すためdsResultsと指定
- ㉘Content-Typeはtext/csvを指定
- ㉙リクエストヘッダーに上記⑪で取得したアクセストークンを名前「Authorization」、値「Bearer %accessToken%」と指定(Bearerと%accessToken%の間には半角スペースが入っています)。
ジョブを終了
csvファイルのアップロードが完了したため、BulkAPI2.0で言うところの「Close or Abort a Job」を実行し、㉒で取得したjobIdの終了処理を Salesforce にリクエストしています。
㉗のdsResults内のstatusコードを参照し「200 ok」の場合のみジョブを終了すべきですが今回は本筋ではないので簡略しています
- メソッドは㉚Patchで㉛URLは㉒で取得したjobIdを含む「https://あなたの組織名/services/data/v58.0/jobs/ingest/%jobId%」を指定
- ㉜タイプから「Text」を選択しアップロードが完了した状態である事を意味する「テキスト」である「{"state":"UploadComplete"}」を指定
- ㉝は開発中レスポンスコードを参照すためdsResultsと指定
- ㉞Content-Typeはapplication/jsonを指定
- ㉟リクエストヘッダーに⑪で取得したアクセストークンを名前「Authorization」、値「Bearer %accessToken%」と指定(Bearerと%accessToken%の間には半角スペースが入っています)。
関連リンク
お問合せ
https://alpcom.co.jp/contact/
アルファー・コミュニケーションズ公式YouTube
https://www.youtube.com/channel/UCTqwZsRRpAs9NPTUz2yH3ow/videos