[Salesforce®初心者でもできる!UiPathによるオペレーションの自動化] Vol.17

Salesforce-main

Bulkによる一括登録

前回はAPI呼び出し回数を節約するワークフローについてご紹介しました。もし見逃したという方は「複合一括リクエスト」も併せてご覧ください。

今回はデータ移行やマスターデータの洗い替えといった、より大容量のデータを一括登録する方法をお届けします。

  • 複合一括とBulkの比較

  • Bulkを使用した価格表一括登録

読み終えた後、複合一括リクエストとの使い分けや、Bulkを使ったワークフローの作成ができるようになると思います。

複合一括とBulkの比較

Bulkは大容量データの一括処理を行うSalesforceの仕組みです。では、前回お届けした「複合一括リクエスト」との違いはなんでしょうか。各特徴について、以下に大まかな比較を示します。

Salesforce-Integration_vol17_image1

※Salesforceの更新制約(更新順序の制約,値の相関制約 など)に抵触した場合などが例として挙げられる。

Bulkを利用する場合、API使用回数を抑制し大容量データを扱える反面、エラーデータや入力データのフォーマットの考慮をしておく必要があることがわかります。これらの特徴を理解して使い分けてください。

Bulkを使用した価格情報一括登録

前回の「複合一括リクエスト」でご紹介した価格情報の一括登録を、Bulkを使って作成します。

1000件の価格元情報をSalesforceの価格表に登録するワークフローを作成します。

価格元情報と登録結果イメージ、並びにワークフローの全体像は次の通りです。

Salesforce-Integration_vol17_image2
Salesforce-Integration_vol17_image3
Salesforce-Integration_vol17_image4

なお、商品や標準価格表は予めSalesforceに登録されている必要がありますので、ない場合はWeb画面から準備してください。

Activityの設定方法を中心にお届けしているため、Salesforceアプリケーションスコープの設定やエラー制御は含まれておりません。また、Excelへの出力部分の実装は解説を割愛しておりますのでご了承ください。

個別にプロパティの設定内容を見てみます。

①価格元情報と列名変換表を読み込みます。 ※実装方法の詳細は「複合一括リクエスト」をご確認ください。
Salesforce-Integration_vol17_image5
Salesforce-Integration_vol17_image6
Salesforce-Integration_vol17_image7
②商品のID一覧を取得し価格元情報と結合して結合価格元情報を作成します。 ※実装方法の詳細は「複合一括リクエスト」をご確認ください。
Salesforce-Integration_vol17_image8
Salesforce-Integration_vol17_image9
③価格表を新規に登録します。
Salesforce-Integration_vol17_image10

③-1 登録対象オブジェクト「Pricebook2」を選択します。

③-2 登録対象の項目を選択する子ウインドウを開き、次の項目を選択します。

Name(価格表名),IsActivite(有効)

③-3 各項目に登録する値を設定します。

  • Idは新規登録されたレコードのIDを格納する変数を設定します。変数名は任意でOKです。

  • Name(価格表名)は価格表の名前を設定します。名称は任意でOKです。

  • IsActive(有効)は新規登録した価格表を有効とするか否かを設定します。本例では「true」(有効)を設定します。

④結合価格元情報の列構造をProductEntryに合わせて編集します。 ※実装詳細は割愛
Salesforce-Integration_vol17_image11
Salesforce-Integration_vol17_image12
⑤列名変換表を使って販売価格とIdの列名を変換します。
Salesforce-Integration_vol17_image13
Salesforce-Integration_vol17_image14

⑤-1 結合価格元情報の変数を設定します。

  • 本例では④で編集した「priceListWithId」を設定します。

⑤-2 列名変換表の変数を設定します。

  • 本例では①で読み込んだ「columnMppingTable」を設定します。

⑥ ③で登録した価格表レコードのIDと有効フラグを補完します。 ※実装詳細は割愛
Salesforce-Integration_vol17_image15
Salesforce-Integration_vol17_image16
⑦Bulk処理用CSVファイルにデータを保存します。
Salesforce-Integration_vol17_image17

⑦-1 文字コード「utf-8」を設定します。

  • Bulkで扱うCSVデータの文字コードは「utf-8」固定です。

⑦-2 ヘッダを出力するよう指定します。

  • Bulkで扱うCSVデータはヘッダ必須です。

⑦-3 保存パスを設定します。

  • パスは任意でOKです。

⑦-4 保存するデータの入ったデータテーブルを設定します。

  • 本例では⑥で編集した「priceListWithId」を設定します。

⑦-5 区切り文字を設定します。

  • Bulkで扱うCSVデータは「Comma」固定です。

ここまでがBulk処理用CSVファイルの編集工程でした。以降がBulkの処理です。

なお、CSVデータの編集の際は次のルールにも気を付ける必要があります。

  • 「"」「,」「改行」を項目値に含む場合、項目全体を"でくくる必要がある

  • 「"」は("そのものをデータとして扱う場合は) "を二つつなげてエスケープする必要がある

    例:xxx,"abc""ddd"",efd",yyyy

  • 列には対象オブジェクトの必須項目をもれなく含める必要がある

⑧Bulk処理用CSVファイルをアップロードしBulkジョブを作成します。
Salesforce-Integration_vol17_image18

⑧-1 更新対象オブジェクト名を設定します。

  • 本例では「PriceBookEntry」を設定します。

⑧-2 Bulk処理用CSVファイルのパスを設定します。

  • 本例では⑦で保存したファイルのパスを設定します。

⑧-3 Bulk処理用CSVファイルの区切り文字を設定します。

  • 「COMMA」固定です。

⑧-4 オブジェクトへの登録方法を設定します。

  • 本例では新規価格情報の登録のため「Insert」を設定します。

  • 他の選択肢は次の通りです。

「Update」「Upsert」「Delete」

⑧-5 Bulk処理用CSVファイルの改行コードを設定します。

  • 本例では⑦で作成した際の改行コードとなるため「CRLF」を設定します。

  • 他の選択肢は次の通りです。

「LF」

⑧-6 BulkジョブのIDを保存する変数を設定します。

  • Bulk処理は非同期で実施されるため、ジョブの状況を能動的にチェックして完了まで追跡する必要があります。このIDはこの追跡の際、対象のジョブを識別するために必要となるものです。

⑧-7 Salesforceステータスを設定します。

  • 必要に応じて設定します。本例では設定していますが、後続では使用しません。

⑨Bulkジョブを開始させます。
Salesforce-Integration_vol17_image19

⑨-1 BulkジョブのIDを設定します。

  • 本例では⑧で取得した「sfdcBulkJobId」を設定します。

⑨-2 ジョブの起動停止区分を設定します。

  • 本例ではジョブを起動させるため「Start」を設定します。

  • 他の選択肢は次の通りです。

「Abort」(中止)

⑨-3 Salesforceステータスを設定します。

  • 必要に応じて設定します。本例では設定していますが、後続では使用しません。

Bulkジョブの状況を取得します。
Salesforce-Integration_vol17_image20

⑩-1 BulkジョブのIDを設定します。

  • 本例では⑧で取得した「sfdcBulkJobId」を設定します。

⑩-2 Salesforceステータスを設定します。

  • 必要に応じて設定します。本例では設定していますが、後続では使用しません。

⑩-3 Bulkジョブの状況を保存する変数を設定します。

  • 取得する状況の種類は次の通りです。

InProgress(処理中),JobComplete(完了),Failed(失敗),Aborted(ジョブ作成者または管理者による強制キャンセル)

  • 本例では「sfdcBulkJobStatus」を設定します。

⑪Bulkジョブの状況を繰り返し確認しながら、Bulkジョブが終了するまで待ち合わせます。
Salesforce-Integration_vol17_image21

⑪-1 Bulkジョブの状況確認のインターバルを設定します。

  • 設定は任意です。本例では「10秒」を設定します。

⑪-2 Bulkジョブの状況確認を継続する条件を設定します。

  • 本例では処理中の間のため「sfdcBulkJobStatus = "InProgress"」を設定します。

⑫Bulk処理結果を取得します。

Salesforce-Integration_vol17_image22

⑫-1 BulkジョブのIDを設定します。

  • 本例では⑧で取得した「sfdcBulkJobId」を設定します。

⑫-2 取得する結果データの条件を設定します。

  • 本例では「Successful」(成功) を設定します。

  • 他の選択肢は次の通りです。

Failed(失敗), UnProcessed(中止)

⑫-3 Salesforceステータスを設定します。

  • 必要に応じて設定します。本例では設定していますが、後続では使用しません。

⑫-4 Bulk処理用CSVファイルの明細ごとの結果を保存する変数を設定します。

  • 変数名は任意でOKです。

  • 出力イメージは下図参照

    Salesforce-Integration_vol17_image23

    Bulk処理用CSVファイルに次の2列が追加されます。

「sfId」:登録したレコードのIDです。

「sfCreated」:該当レコード登録処理結果です。true(成功),false(エラー)です。

これで完成です。ワークフローを実行してみてください。価格表と価格明細が登録されていれば成功です。

まとめ

今回はBulkで一括登録するワークフローをお届しました。

皆様のワークフロー開発の一助になれば幸いです。

最後に今回の記事の中で取り上げた部品のリンク先などをお知らせします。

Activityの公開先 (UiPathマーケットプレイス):

https://marketplace.uipath.com/ja/listings/salesforce-activity-pack

Salesforce連携ソリューションご案内:

https://www.uipath.com/ja/solutions/technology/salesforce-automation

その他連携ソリューションご案内:

https://www.uipath.com/ja/solutions/application-cooperation-solutions

次回は「ボタンアクションの実行」をおこなうワークフローをお届けします。お楽しみに。

※SalesforceはSalesforce.com,Incの商標であり、許可のもとで使用しています。 

また、UiPathでは、本記事で解説した内容に加えて、CRM/SFAの定着化のためのRPA活用について、実際の事例や、UiPathの連携ソリューションについてご紹介するeBookを無料で公開しています。eBookは下記よりダウンロードください。

Salesforce-Integration_vol22_image32

詳しくはこちら

Topics:

Salesforce
Avatar Placeholder Big
Hidetaka Obata

Senior Sales Engineer, UiPath