6. Salesforce バッチ定義新規作成¶
6.1. チュートリアル¶
このチュートリアルが終了すると、次のような事ができます。
Salesforce に対して大量データの処理を行う
- Insert
- Update
- Delete
- HardDelete
- Upsert
大量データの処理を行うのに Salesforce Bulk API を利用します。
Salesforce Bulk API の詳細は次の URL を参照してください。
- Salesforce Bulk API 開発者ガイド (日本語)
- Bulk API Developer Guide (English)
6.1.1. ゴールの説明¶
このチュートリアルでは、Salesforceオブジェクトのレコード操作 で作成した経費管理オブジェクトの大量データUpsert(登録または更新)を行います。
- SOQLによるレコードの検索 までに作成したレコード「雑誌」に外部IDを指定します。
- Salesforceへ登録・更新するデータを、CSV ファイルとしてパブリックストレージに配置します。
- IM-LogicDesignerのフローでは、CSV ファイルを読み込み1行毎にバッチをジョブに登録します。
- バッチを登録し終わったらジョブを終了し、ジョブやバッチの情報を取得する、という処理を行います。
コラム
大量データと謳っていますが、このチュートリアルでは5件だけ処理を行います。これはリソースの浪費を押さえるためです。
コラム
Bulk API の制限 (日本語) Bulk API Limits (English)
6.1.2. 準備¶
チュートリアルの準備 に書かれている準備が行われていることを確認してください。
また、Salesforceオブジェクトのレコード操作 と SOQLによるレコードの検索 のチュートリアルが終了していることを確認してください。
特に カスタムオブジェクトの作成 で「MatterNumber」に「外部ID」が指定されていることを確認してください。指定されていない場合、レコードの更新ではなくレコードの追加が行われてしまいます。
6.1.3. レコード「雑誌」の編集¶
Upsert は指定した外部IDを持つレコードが存在しなければレコードの登録を、存在すればレコードの更新を行う、という処理です。
これまでのチュートリアルで作成したレコード「雑誌」に外部IDをセットし、更新対象とします。
Salesforceにログインし、「Expense」タブをクリックします。
「ビュー:すべて選択」の「Go!」ボタンをクリックします。
「雑誌」リンクをクリックします。
「編集」ボタンをクリックします。
「MatterNumber」に「00002」と入力し、「保存」ボタンをクリックします。
以上でレコード「雑誌」を更新対象にできました。
6.1.4. CSV ファイルの作成¶
Salesforceへ登録するデータファイルを作成します。
以下の内容の CSV ファイルを作成し、パブリックストレージのルートに sample.csv として配置してください。
"昼食", "500", "XXストア", "20160801T12:00:00.000+09:00", "00001" "はがき", "80", "YY商店", "20160801T18:00:00.000+09:00", "00002" "夕食", "1080", "ABC Co.", "20160801T19:00:00.000+09:00", "00003" "書籍", "1980", "XXブックス", "20160801T20:00:00.000+09:00", "00004" "タクシー", "2000", "ZZタクシー", "20160801T21:00:00.000+09:00", "00005"
ここでは以下のような設定で作成したこととします。
文字コード UTF-8 行の終端文字列 LF
レコード「雑誌」の編集 でレコード「雑誌」の MatterNumber を 00002 に修正しました。
従いまして、レコード「雑誌」は同じ MatterNumber を持つレコード「はがき」に更新されます。
6.1.5. CSV ファイルの読み込み¶
先ほど作成した CSV ファイルをフローの中で読み込むため、IM-LogicDesignerのユーザ定義タスクを作成します。作成するのはCSV Fetch定義です。
intra-mart Accel Platformにテナント管理者またはLogicDesigner管理者でログインします。
「サイトマップ」→「LogicDesigner」→「CSV Fetch定義新規作成」から、「CSV Fetch定義編集」を開きます。
「返却値」に次のような項目を追加してください。
その他の項目は以下のように入力してください。
ユーザ定義ID CSV_Fetch ユーザ定義名 CSV_Fetch ユーザカテゴリID SampleCategory 文字コード UTF-8 引用文字 “ 区切り文字 その他(,) 行の終端文字 LF ヘッダー行をスキップする 非選択 返却値と列数が一致しない場合エラーにする 非選択 文字コードや行の区切り文字は CSV ファイルを作成したときのものを指定してください。
「登録」ボタンをクリックします。
確認ダイアログで「OK」ボタンをクリックします。
ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。
これで CSV Fetch 定義の作成は終了です。
6.1.6. バッチでのレコード Upsert¶
IM-LogicDesignerのユーザ定義タスクを作成します。作成するのは Salesforceバッチ定義 です。
intra-mart Accel Platformにテナント管理者またはLogicDesigner管理者でログインします。
「サイトマップ」→「LogicDesigner」→「 Salesforceバッチ定義新規作成」から、「 Salesforceバッチ定義編集」を開きます。
Salesforceへ接続するクライアントIDを選択します。ここでは default を選択していますが、ご自分の環境にあったものを選択してください。
「オブジェクト検索」リンクをクリックし、「オブジェクト検索」ダイアログを表示します。
「絞り込み」に「exp」と入力し「検索」ボタンをクリックします。
一覧に表示された「Expense」の行のチェックボックスにチェックを入れ「決定」ボタンをクリックします。
その他の項目は以下のように入力してください。
ユーザ定義ID UpsertExpense ユーザ定義名 UpsertExpense ユーザカテゴリID SampleCategory 操作 Upsert 「登録」ボタンをクリックします。
確認ダイアログで「OK」ボタンをクリックします。
ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。
これで Salesforce バッチ定義の作成は終了です。
続いてフロー定義の作成を行います。
「サイトマップ」→「LogicDesigner」→「フロー定義一覧」を開きます。
「ロジックフロー新規作成」リンクをクリックし、「ロジックフロー定義編集」画面を表示します。
「定数設定」リンクをクリックし、次のような項目を追加し、「決定」ボタンをクリックします。
定数ID 定数値 備考 Filename sample.csv clientId default ここでは default を選択していますが、ご自分の環境にあったものを選択してください。 externalFieldName MatterNumber__c object Expense__c operation upsert userCd xxxxx salesforce-client-config.xml に指定したユーザを指定してください version 37.0 ロジックフロー定義編集画面のデザイナに、先ほど作成した「UpsertExpense」「CSV_Fetch」タスクと、「パブリックストレージ取得」「ジョブの作成」「ジョブの終了」「ジョブ情報の取得」「バッチ情報配列の取得」「バッチ情報の取得」「バッチ結果の取得」「繰り返し」を追加し、下の画像のように接続します。
「パブリックストレージ取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。
「定数」の Filename と、「im_publicStorage1」を紐づけ、「決定」ボタンをクリックします。
「ジョブの作成」タスクをクリックし、「マッピング設定」ボタンをクリックします。
「定数」の clientId から version と、「im_salesforce_create_job1」の同じキー名の項目を紐づけ、「決定」ボタンをクリックします。
「[開始]CSV_Fetch」タスクをクリックし、「マッピング設定」ボタンをクリックします。
「im_publicStorage1」を追加した上で「im_publicStorage1」と、「CSV_Fetch」の file を紐づけ、「決定」ボタンをクリックします。
「UpsertExpense」タスクをクリックし、「マッピング設定」ボタンをクリックします。
次の表のように各項目を紐付け、「決定」ボタンをクリックします。
im_salesforce_create_job1 id jobId UpsertExpense1 CSV_Fetch1 item Name Name body Amount Amount__c Client Client__c Date Date__c MatterNumber matterNumber__c 「ジョブの終了」タスクをクリックし、「マッピング設定」ボタンをクリックします。
「im_salesforce_create_job1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_close_job1」の同じキー名の項目を、また「im_salesforce_create_job1」の id と 「im_salesforce_close_job1」の jobId を紐づけ、「決定」ボタンをクリックします。
「ジョブ情報の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。
「im_salesforce_create_job1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_get_job_information1」の同じキー名の項目を、また「im_salesforce_create_job1」の id と 「im_salesforce_get_job_information1」の jobId を紐づけ、「決定」ボタンをクリックします。
「バッチ情報配列の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。
「im_salesforce_create_job1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_get_batch_information_list1」の同じキー名の項目を、また「im_salesforce_create_job1」の id と 「im_salesforce_get_batch_information_list1」の jobId を紐づけ、「決定」ボタンをクリックします。
「繰り返し開始」タスクをクリックし、繰り返し対象の「選択」リンクをクリックします。
「im_salesforce_get_batch_information_list1/batchInfo」をクリックし、「決定」ボタンをクリックします。
「バッチ情報の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。
「im_startLoop1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_get_batch_information_list1」の同じキー名の項目を、また「im_startLoop1」の id と 「im_salesforce_get_batch_information1」の batchId、「im_startLoop1」の jobId と 「im_salesforce_get_batch_information1」の jobId を紐づけ、「決定」ボタンをクリックします。
「バッチ結果の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。
「im_startLoop1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_get_batch_information_list1」の同じキー名の項目を、また「im_startLoop1」の id と 「im_salesforce_get_batch_information1」の batchId、「im_startLoop1」の jobId と 「im_salesforce_get_batch_information1」の jobId を紐づけ、「決定」ボタンをクリックします。
「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。
フロー定義ID UpsertExpense フロー定義名 標準 UpsertExpense フローカテゴリID SampleCategory
「確認」ダイアログで「決定」ボタンをクリックします。
「ロジックフロー定義一覧」画面に遷移します。作成した「UpsertExpense」フローが表示されていることを確認できます。
これでフロー定義の作成が終了です。
最後に動作確認を行います。 IM-LogicDesignerのデバッグ機能を使ってフローを実行し、 Salesforceにレコードが作成されたり更新されたりすることを確認します。
「UpsertExpense」フローを選択後に「編集」ボタンをクリックします。
「ロジックフロー定義編集」画面の「デバッグ」リンクをクリックします。
「ロジックフロー定義のデバッグ」画面の「実行」リンクをクリックします。
「確認」ダイアログで「決定」ボタンをクリックします。
「フローの実行が正常終了しました。」とメッセージが表示されます。
これで Salesforceにレコードが作成されたり更新されたりしました。
本当に作成されたかどうかを確認します。
Salesforceにログインし、「Expense」タブをクリックします。
「ビュー:すべて選択」の「Go!」ボタンをクリックします。
レコードが5件だけ存在し、「雑誌」がないことがわかります。
以上で Salesforceのレコードを作成したり更新したりできました。このチュートリアルではたった5件の操作でしたが、CSV ファイルにより多くのデータを保存しておくことで大量のデータを Salesforceに登録することがで来ます。
6.1.7. まとめ¶
以上で Salesforce バッチ定義新規作成 のチュートリアルは全て完了です。
これまでのチュートリアルを通して、以下のことを学びました。
- Salesforce に対して大量データの処理を行う