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

Salesforce-main

ボタンアクションの実行

前回は大容量のデータを一括登録する方法をご紹介しました。もし見逃したという方は「Bulkによる一括登録」も併せてご覧ください。

特別な割引を行う場合など承認申請ボタンで上長の判断を仰いだり、関連記録を一つ一つ更新せずに画面上のボタンで一括更新している・・

こういった、オペレーションが画面上のボタン中心で「オブジェクトと言われてもピンとこない」ということはないでしょうか。

ボタンには企業固有の様々な業務ルールが組み込まれており、仕様をひも解くのではなくそのまま使用することが得策なことも多いです。またカスタムボタンは、Lightningへの移行に際しJavascriptボタンの代替としてフローと組み合わせて利用されている場合もあるのではないでしょうか。

今回は承認申請やカスタムボタンの実行を中心に以下の内容でお届けします。

  • 承認申請の実行

  • フローを呼び出すカスタムボタンの実行

読み終えたあと本記事をみながらワークフローを作成すれば、ボタンの機能を組み込めると思います。

承認申請の実行

商談の「承認申請」を行うワークフローを作成します。承認申請のイメージとワークフローの全体像は次の通りです。

Salesforce-Integration_vol18_image1
Salesforce-Integration_vol18_image2

商談の登録や承認プロセスの設定は、予めSalesforceで完了している必要がありますので、済んでいない場合はWeb画面から準備してください。

Actvityの設定方法を中心にお届けしているため、Salesforceアプリケーションスコープの設定やエラー制御は含まれておりません。

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

①承認者のIDを特定します。
Salesforce-Integration_vol18_image3

①-1 SOQL詳細:

SELECT Id FROM User WHERE  IsActive = True AND Name = 'テスト 三郎' AND Department = 'サンプル部'

  • Idをユーザ(User)オブジェクトから取得するSOQLです

  • レコードの絞込条件として、

    • 有効なユーザであること(IsActive = True)

    • 指定した氏名であること

    • 指定した部署に所属していること

を指定しています。本例では「'テスト 三郎'」「'サンプル部'」を設定します。

①-2 Salesforceステータスは必要に応じて設定します。

※本例では設定していますが、後続では使用しません。

①-3 SOQLの結果を格納するため変数を設定します。

  • 変数の型はDataTableです。

  • DataTable内の列はSELECTの項目名になるため、Idの1列になります。

②申請者のIDを特定します。

実装方法は割愛します。①をご参考ください。

③承認申請のもととなる商談レコードのIDを特定します。
Salesforce-Integration_vol18_image4

③-1 SOQL詳細:

SELECT Id,Name FROM Opportunity WHERE Name = 'サンプル商談' AND Account.Name = 'サンプル株式会社'

  • Id,Name(商談名)を商談(Opportunity)オブジェクトから取得するSOQLです

  • レコードの絞込条件として、

    • 特定の商談名であること

    • 特定の取引先名であること

    を指定しています。本例では「'サンプル商談'」「'サンプル株式会社'」を設定します。

③-2 Salesforceステータスは必要に応じて設定します。

※本例では設定していますが、後続では使用しません。

③-3 SOQLの結果を格納するため変数を設定します。

  • 変数の型はDataTableです。

  • DataTable内の列はSELECTの項目名になるため、Id,Nameの2列になります。

④申請詳細を組み立てます。
Salesforce-Integration_vol18_image5

④-1 申請詳細の雛型を変数にセットします。

左辺:

requetBody

右辺:

JObject.Parse("{ inputs: [ { objectId: '', nextApproverIds: [ '' ], comment: '', submitterId: '' } ] }")

  • 左辺の変数名は任意のものでOKです

  • 右辺は申請内容によらず共通ですので、コピーしてご利用ください

  • 「Newtonsoft.Json.Linq」をインポートしてください ※インポートタブ内で設定

④-2 承認申請のもととなる商談レコードのIDを雛型に差し込みます。

左辺:

requestBody("inputs")(0)("objectId")

右辺:

sfdcOpportunityList(0)("Id").ToString()

  • ④-1雛型にある「objectId: '' 」の''内に、商談レコードのIDを差し込んでいます

  • 左辺の「("inputs")(0)("objectId")」は常に固定です

  • 右辺は③で特定した商談レコードのIDを指定しています

④-3 承認者のIDを雛型に差し込みます。

左辺:

requestBody("inputs")(0)("nextApproverIds")(0)

右辺:

sfdcApproverList(0)("Id").ToString()

  • ④-1雛型にある「nextApproverIds: [ '' ]」の''内に、承認者のIDを差し込んでいます

  • 左辺の「("inputs")(0)("nextApproverIds")(0)」は常に固定です

  • 右辺は①で特定した承認者のIDを指定しています

④-4 申請者のIDを雛型に差し込みます。

左辺:

requestBody("inputs")(0)("submitterId")

右辺:

sfdcApplicantList(0)("Id").ToString()

  • ④-1雛型にある「submitterId: '' 」の''内に、申請者のIDを差し込んでいます

  • 左辺の「("inputs")(0)("submitterId")」は常に固定です

  • 右辺は②で特定した申請者のIDを指定しています

④-5 依頼文を雛型に差し込みます。

左辺:

requestBody("inputs")(0)("comment")

右辺:

"確認のうえ承認の程、よろしくお願いいたします。"

  • ④-1雛型にある「comment: ''」の''内に、依頼文を差し込んでいます。

  • 左辺の「("inputs")(0)("comment")」は固定です

  • 右辺は承認者に宛てた任意のメッセージです。

⑤承認申請を実行します
Salesforce-Integration_vol18_image6

⑤-1 ④で編集した申請詳細を設定します。 requestBody.ToString()

  • 申請詳細を格納した変数名に「.ToString()」を付けます

⑤-2 定値「"application/json"」を設定します。

⑤-3 固定値「Post」を選択します。

⑤-4 固定値「"/services/data/v45.0/actions/standard/submit"」を設定します。

⑤-5 固定値「JSON」を選択します。

⑤-6 必要に応じて設定します。

※本例では設定していますが、後続では使用しません。

これで完成です。ワークフローを実行してみてください。商談の承認履歴に承認申請記録が登録されていれば成功です。

フローを呼び出すカスタムボタンの実行

「フローを呼び出すカスタムボタン」を実行するワークフローを作成します。

本例では商談画面内にある「更新商談作成」というボタンを実行します。実行するとフローにより現商談をもとに継続契約用の商談が作成されます。

ボタン押下前後の商談イメージと、ワークフロー全体像は次の通りです。

Salesforce-Integration_vol18_image7
Salesforce-Integration_vol18_image8
Salesforce-Integration_vol18_image9

ボタン押下時にフローには入力データが引き渡されるのが一般的です。本例ではボタン押下時の商談のIDが渡るものとします。よってこれを代行するワークフローにおいても、入力データをフローに渡す必要があります。入力データ名はフローによって異なりますので、貴社のSalesforce管理者に問い合わせて、事前に調べておいてください。

なお、本節は前節の続きとなっておりますので、以降で説明していない部分は前節をご参照ください。

①申請詳細を組み立てます。
Salesforce-Integration_vol18_image10

①-1 フローへの引継ぎ情報の雛型を変数にセットします。

左辺:

requetBody

右辺:

JObject.Parse("{ inputs: [ { OpportunityId: '' } ] }")

  • 左辺の変数名は任意のものでOKです

  • 右辺の「{ inputs: [ {} ] }」はフローによらず共通ですので、コピーしてご利用ください。「OpportunityId: '' 」部分はフローの入力データ名により異なりますので、調査結果を反映ください。入力データ名が複数ある場合は、カンマ(,)で区切って複数列記可能です。

例:{ OpportunityId: '', OwnerId: '', Name: '' }

①-2 フローへの引継ぎ情報として商談レコードのIDを雛型に差し込みます。

左辺:

requestBody("inputs")(0)("OpportunityId")

右辺:

sfdcOpportunityList(0)("Id").ToString()

①-1雛型にある「OpportunityId: '' 」の''内に、商談レコードのIDを差し込んでいます

②承認申請を実行します

Salesforce-Integration_vol18_image11

②-1 ①で編集したフローへの引継ぎ情報を設定します。 requestBody.ToString()

  • フローへの引継ぎ情報を格納した変数名に「.ToString()」を付けます

②-2 固定値「"application/json"」を設定します。

②-3 固定値「Post」を選択します。

②-4「"/services/data/v45.0/actions/custom/flow/Renew_Opportunity"」を設定します。

  • /services/data/v45.0/actions/custom/flow/は固定値です。

  • Renew_Opportunityはフロー名となり、フロー毎に異なりますので、調査結果を反映ください。

②-5 固定値「JSON」を選択します。

②-6 必要に応じて設定します。

※本例では設定していますが、後続では使用しません。

これで完成です。ワークフローを実行してみてください。フローの処理仕様に沿った結果がでていれば成功です。

まとめ

今回はボタンの機能を組み込むワークフローをお届しました。皆様のワークフロー開発の一助になれば幸いです。

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

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

次回はTaskCaptureを使った「ドキュメントの作成」をお届けします。お楽しみに。

※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