Salesforceで承認プロセス完了時に承認内容を含んだレコードを作成する方法について紹介します。
発端は、承認完了時に申請者へ承認内容をSlack通知したいという要望が挙がったことでした。
というのも、今まで承認完了しても気づかずレコードを放置してしまい、対応が遅れてしまったり漏れたりすることが起きていました。
そこで実装開始したもののなかなか一筋縄ではいかず、、でした。
そのため、今回同じ悩みを持つ人の助けになればと思い、実装方法をまとめてみました。
前提
今回はカスタムオブジェクト「テスト」に承認プロセスを用意し、承認完了時に商談が自動作成される機能を作ってみます(さらに商談の「Next Step」項目に承認内容を記述してみます)
次の節で大まかな実装の流れを説明します。
実装手順
実装の流れは以下のとおりです。
①最終承認完了時に動く「項目自動更新」を用意
②レコード変更時に発火する「プロセスビルダー」を用意
③プロセスビルダーから呼び出される自動起動「フロー」を用意
この順番にした理由は以下の3つです。
・承認プロセスから直接プロセスビルダーやフローを呼び出せない
・項目自動更新の変更をトリガに直接フローを起動できない
・プロセスインスタンス(承認の内容などを保存してあるオブジェクト)がフローからしか取得できない
次の節で一つ一つの概要を説明します。
①最終承認完了時に動く「項目自動更新」を用意
承認プロセスの「最終承認時のアクション」に項目自動更新を新規追加します。
今回はステータス項目を「承認完了」に変更・承認日を今日に変更するようにします。
これらが②の発火条件となります
ここで一点大切なのは、それぞれの項目自動更新の「項目変更後にワークフロールールを再評価する」にチェックを入れておく必要があります。これによりプロセスビルダーが起動するようになります。
②レコード変更時に発火する「プロセスビルダー」を用意
プロセスビルダーの新規作成をします。
まずプロセスのタイミング設定をします。
テストオブジェクトのレコード作成・編集した時を選択します。
次に条件を設定します。
①の「最終承認時のアクション」で変更される項目の内容を条件にします。
「レコードに指定の変更が行われた場合にのみアクションを実行しますか?」にチェックを入れます。
そしてアクションの設定をします。
ここでフローの起動を選択し、フローに渡す変数「TargetObjectId」を定義します。
ここには起動した対象のオブジェクトIdを渡します。
③プロセスビルダーから呼び出される自動起動「フロー」を用意
自動起動フローを新規作成します。
レコード取得コンポーネントでプロセスインスタンスを取得します。
条件は以下です。
・「TargetObjectId」と入力時に使用できるテキスト変数が一致すること(②の変数がここに入ります)
・「Status」がApprovedであること
つまり承認プロセスが完了したレコードの承認情報を取得しています。
そして「CompletedDate」が最新のものを一つだけ取得するように設定します。
これは対象のオブジェクトに対して複数のステップがあった場合に、最新の承認情報を得るために行っています(並び替えがないと全く違う過去の承認情報をとってしまうことがあります)
次に商談を作成します。
「NextStep」には承認内容を含めた数式を渡すことにします。
結果
↓↓↓↓↓↓↓↓↓
最後に
もっといい方法があるかもしれないですが、この方法で今は無事に承認内容をSlack通知できました。
また却下時も同様の方法で実装できました。
どこかのSalesforce管理者のお役に立てれば幸いです。