intra-mart Accel Platform Salesforce 連携チュートリアルガイド 第2版 2021-04-01

6. Salesforce バッチ定義新規作成

6.1. チュートリアル

このチュートリアルが終了すると、次のような事ができます。

  • Salesforce に対して大量データの処理を行う

    • Insert
    • Update
    • Delete
    • HardDelete
    • Upsert

大量データの処理を行うのに Salesforce Bulk API を利用します。

Salesforce Bulk API の詳細は次の URL を参照してください。

6.1.1. ゴールの説明

このチュートリアルでは、Salesforceオブジェクトのレコード操作 で作成した経費管理オブジェクトの大量データUpsert(登録または更新)を行います。

  1. SOQLによるレコードの検索 までに作成したレコード「雑誌」に外部IDを指定します。
  2. Salesforceへ登録・更新するデータを、CSV ファイルとしてパブリックストレージに配置します。
  3. IM-LogicDesignerのフローでは、CSV ファイルを読み込み1行毎にバッチをジョブに登録します。
  4. バッチを登録し終わったらジョブを終了し、ジョブやバッチの情報を取得する、という処理を行います。

コラム

大量データと謳っていますが、このチュートリアルでは5件だけ処理を行います。これはリソースの浪費を押さえるためです。

コラム

このチュートリアルでは、サンプルのため CSV ファイルを1行毎にバッチとしてジョブに登録していますが、
CSV ファイルの各行を追加したオブジェクト配列をバッチ定義にマッピングすれば1つのバッチで大量データを連携することができます。
また、Salesforce Bulk API では、1日に送信可能なバッチ数や1つのバッチで送信可能な件数などの制限があります。
Salesforce Bulk API の制限については次の URL を参照してください。

6.1.2. 準備

チュートリアルの準備 に書かれている準備が行われていることを確認してください。

また、Salesforceオブジェクトのレコード操作SOQLによるレコードの検索 のチュートリアルが終了していることを確認してください。

特に カスタムオブジェクトの作成 で「MatterNumber」に「外部ID」が指定されていることを確認してください。指定されていない場合、レコードの更新ではなくレコードの追加が行われてしまいます。

6.1.3. レコード「雑誌」の編集

Upsert は指定した外部IDを持つレコードが存在しなければレコードの登録を、存在すればレコードの更新を行う、という処理です。

これまでのチュートリアルで作成したレコード「雑誌」に外部IDをセットし、更新対象とします。

  1. Salesforceにログインし、「Expense」タブをクリックします。

    ../../_images/sfdc_click_expense_tab.png
  2. 「ビュー:すべて選択」の「Go!」ボタンをクリックします。

    ../../_images/sfdc_show_all_expense.png
  3. 「雑誌」リンクをクリックします。

    ../../_images/sfdc_click_magazine.png
  4. 「編集」ボタンをクリックします。

    ../../_images/sfdc_edit_magazine.png
  5. 「MatterNumber」に「00002」と入力し、「保存」ボタンをクリックします。

    ../../_images/sfdc_save_magazine.png

以上でレコード「雑誌」を更新対象にできました。

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定義です。

  1. intra-mart Accel Platformにテナント管理者またはLogicDesigner管理者でログインします。

  2. 「サイトマップ」→「LogicDesigner」→「CSV Fetch定義新規作成」から、「CSV Fetch定義編集」を開きます。

    ../../_images/csv_sitemap.png
  3. 「返却値」に次のような項目を追加してください。

    キー名
    Name string
    Amount double
    Client string
    Date date
    MatterNumber string
    ../../_images/csv_output.png
  4. その他の項目は以下のように入力してください。

    ユーザ定義ID CSV_Fetch
    ユーザ定義名 CSV_Fetch
    ユーザカテゴリID SampleCategory
    文字コード UTF-8
    引用文字
    区切り文字 その他(,)
    行の終端文字 LF
    ヘッダー行をスキップする 非選択
    返却値と列数が一致しない場合エラーにする 非選択

    文字コードや行の区切り文字は CSV ファイルを作成したときのものを指定してください。

  5. 「登録」ボタンをクリックします。

  6. 確認ダイアログで「OK」ボタンをクリックします。

  7. ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。

    ../../_images/csv_userdefinition_list.png

これで CSV Fetch 定義の作成は終了です。

6.1.6. バッチでのレコード Upsert

IM-LogicDesignerのユーザ定義タスクを作成します。作成するのは Salesforceバッチ定義 です。

  1. intra-mart Accel Platformにテナント管理者またはLogicDesigner管理者でログインします。

  2. 「サイトマップ」→「LogicDesigner」→「 Salesforceバッチ定義新規作成」から、「 Salesforceバッチ定義編集」を開きます。

    ../../_images/batch_sitemap.png
  3. Salesforceへ接続するクライアントIDを選択します。ここでは default を選択していますが、ご自分の環境にあったものを選択してください。

    ../../_images/batch_select_clientid.png
  4. 「オブジェクト検索」リンクをクリックし、「オブジェクト検索」ダイアログを表示します。

    ../../_images/sobject_click_search_object_link.png
  5. 「絞り込み」に「exp」と入力し「検索」ボタンをクリックします。

    ../../_images/search_object_dialog.png

    コラム

    絞り込み検索は大文字小文字の区別なく、部分一致検索を行います。

  6. 一覧に表示された「Expense」の行のチェックボックスにチェックを入れ「決定」ボタンをクリックします。

    ../../_images/search_object_dialog2.png
  7. その他の項目は以下のように入力してください。

    ユーザ定義ID UpsertExpense
    ユーザ定義名 UpsertExpense
    ユーザカテゴリID SampleCategory
    操作 Upsert
  8. 「登録」ボタンをクリックします。

  9. 確認ダイアログで「OK」ボタンをクリックします。

  10. ユーザ定義一覧が表示され、作成したユーザ定義が表示されます。

    ../../_images/batch_userdefinition_list.png

これで Salesforce バッチ定義の作成は終了です。

続いてフロー定義の作成を行います。

  1. 「サイトマップ」→「LogicDesigner」→「フロー定義一覧」を開きます。

    ../../_images/sitemap_flow.png
  2. 「ロジックフロー新規作成」リンクをクリックし、「ロジックフロー定義編集」画面を表示します。

    ../../_images/flow_list_new.png
  3. 「定数設定」リンクをクリックし、次のような項目を追加し、「決定」ボタンをクリックします。

    定数ID 定数値 備考
    Filename sample.csv  
    clientId default ここでは default を選択していますが、ご自分の環境にあったものを選択してください。
    externalFieldName MatterNumber__c  
    object Expense__c  
    operation upsert  
    userCd xxxxx salesforce-client-config.xml に指定したユーザを指定してください
    version 37.0  
    ../../_images/batch_constant.png
  4. ロジックフロー定義編集画面のデザイナに、先ほど作成した「UpsertExpense」「CSV_Fetch」タスクと、「パブリックストレージ取得」「ジョブの作成」「ジョブの終了」「ジョブ情報の取得」「バッチ情報配列の取得」「バッチ情報の取得」「バッチ結果の取得」「繰り返し」を追加し、下の画像のように接続します。

    ../../_images/batch_flow.png
  5. 「パブリックストレージ取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/batch_mapping_button1.png
  6. 「定数」の Filename と、「im_publicStorage1」を紐づけ、「決定」ボタンをクリックします。

    ../../_images/batch_mapping1.png
  7. 「ジョブの作成」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/batch_mapping_button2.png
  8. 「定数」の clientId から version と、「im_salesforce_create_job1」の同じキー名の項目を紐づけ、「決定」ボタンをクリックします。

    ../../_images/batch_mapping2.png
  9. 「[開始]CSV_Fetch」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/batch_mapping_button3.png
  10. 「im_publicStorage1」を追加した上で「im_publicStorage1」と、「CSV_Fetch」の file を紐づけ、「決定」ボタンをクリックします。

    ../../_images/batch_mapping3.png
  11. 「UpsertExpense」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/batch_mapping_button4.png
  12. 次の表のように各項目を紐付け、「決定」ボタンをクリックします。

    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  
    ../../_images/batch_mapping4.png
  13. 「ジョブの終了」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/batch_mapping_button5.png
  14. 「im_salesforce_create_job1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_close_job1」の同じキー名の項目を、また「im_salesforce_create_job1」の id と 「im_salesforce_close_job1」の jobId を紐づけ、「決定」ボタンをクリックします。

    ../../_images/batch_mapping5.png
  15. 「ジョブ情報の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/batch_mapping_button6.png
  16. 「im_salesforce_create_job1」を追加した上で、「定数」の clientId, userCd, version と「im_salesforce_get_job_information1」の同じキー名の項目を、また「im_salesforce_create_job1」の id と 「im_salesforce_get_job_information1」の jobId を紐づけ、「決定」ボタンをクリックします。

    ../../_images/batch_mapping6.png
  17. 「バッチ情報配列の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/batch_mapping_button7.png
  18. 「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 を紐づけ、「決定」ボタンをクリックします。

    ../../_images/batch_mapping7.png
  19. 「繰り返し開始」タスクをクリックし、繰り返し対象の「選択」リンクをクリックします。

    ../../_images/batch_mapping_button8.png
  20. 「im_salesforce_get_batch_information_list1/batchInfo」をクリックし、「決定」ボタンをクリックします。

    ../../_images/batch_mapping8.png
  21. 「バッチ情報の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/batch_mapping_button9.png
  22. 「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 を紐づけ、「決定」ボタンをクリックします。

    ../../_images/batch_mapping9.png
  23. 「バッチ結果の取得」タスクをクリックし、「マッピング設定」ボタンをクリックします。

    ../../_images/batch_mapping_button10.png
  24. 「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 を紐づけ、「決定」ボタンをクリックします。

    ../../_images/batch_mapping10.png
  25. 「新規保存」リンクをクリックし、新規保存ダイアログを表示します。ダイアログに次のような内容を入力し「決定」ボタンをクリックします。

    フロー定義ID UpsertExpense
    フロー定義名 標準 UpsertExpense
    フローカテゴリID SampleCategory
    ../../_images/batch_save_flow.png
  1. 「確認」ダイアログで「決定」ボタンをクリックします。

  2. 「ロジックフロー定義一覧」画面に遷移します。作成した「UpsertExpense」フローが表示されていることを確認できます。

    ../../_images/batch_flow_definition.png

これでフロー定義の作成が終了です。

最後に動作確認を行います。 IM-LogicDesignerのデバッグ機能を使ってフローを実行し、 Salesforceにレコードが作成されたり更新されたりすることを確認します。

  1. 「UpsertExpense」フローを選択後に「編集」ボタンをクリックします。

    ../../_images/batch_edit_flow.png
  2. 「ロジックフロー定義編集」画面の「デバッグ」リンクをクリックします。

    ../../_images/batch_open_debugger.png
  3. 「ロジックフロー定義のデバッグ」画面の「実行」リンクをクリックします。

    ../../_images/batch_start_debugger.png
  4. 「確認」ダイアログで「決定」ボタンをクリックします。

  5. 「フローの実行が正常終了しました。」とメッセージが表示されます。

    ../../_images/batch_debugger_success.png

これで Salesforceにレコードが作成されたり更新されたりしました。

本当に作成されたかどうかを確認します。

  1. Salesforceにログインし、「Expense」タブをクリックします。

    ../../_images/sfdc_click_expense_tab.png
  2. 「ビュー:すべて選択」の「Go!」ボタンをクリックします。

    ../../_images/sfdc_show_all_expense.png
  3. レコードが5件だけ存在し、「雑誌」がないことがわかります。

    ../../_images/sfdc_confirm_upsert.png

以上で Salesforceのレコードを作成したり更新したりできました。このチュートリアルではたった5件の操作でしたが、CSV ファイルにより多くのデータを保存しておくことで大量のデータを Salesforceに登録することがで来ます。

6.1.7. まとめ

以上で Salesforce バッチ定義新規作成 のチュートリアルは全て完了です。

これまでのチュートリアルを通して、以下のことを学びました。

  • Salesforce に対して大量データの処理を行う