Salesforceの承認プロセスは標準で準備されているポピュラー機能です。ただしリリースされたのはかなり昔なのでカスタマイズ性に欠ける点があります。
今回はフローを使用してより柔軟な承認フロー作成を試してみます。
フローでメールを送信する方法は別記事で紹介しています。
方法①通常の承認プロセス起動
従来、承認プロセスを起動する方法はこれです。
承認プロセスを作成しておき、レコード詳細画面右上に表示される「承認申請」ボタンから手動起動します。承認プロセス作成はネットで検索すると山ほどヒットしますのでここでは省略しますが、公式ドキュメントはこちらにあります。
この方法では事前に指定した条件に合致しない状態のレコードでも「承認申請」ボタンが押せてしまいます。
条件に合致する承認プロセスが存在しない場合は申請時に「該当する承認プロセスは見つかりませんでした。」というエラーが表示されます。
1.なぜ承認プロセスが見つからないかが直感的に分かりづらいメッセージである
2.このエラーメッセージ文は変更できない
というデメリットがあるため、この承認フローは汎用性には欠けます。
方法➁であれば柔軟なカスタマイズが可能です。
方法②フローから承認プロセス起動とそのメリット
一方、方法②では方法①で使用した承認プロセスをフローで起動します。
承認プロセスを事前に作成しておくのは①②共通ですが、起動方法で下記違いがあります。
方法①はボタンを手動で押下し起動する
方法②でもボタン手動押下できるが、他にフローで自動起動したり画面フローから起動したりできる
フローから起動することで下記のメリットがあります。
・ボタン表示名の柔軟な設定
フローを使用しない場合は申請ボタンは「承認申請」という表示名から変更できませんが、フローでカスタムボタンを作成すると「商談承認ボタン」のように自由に表示名を決めることが出来ます。
・起動する承認プロセスの柔軟な指定(1オブジェクトに複数承認プロセスがある場合)
1商談に複数プロセスを作成している場合を例に考えると、通常の承認プロセスは下記のように順番で起動順を決めることは可能です。この例では各承認プロセスの開始条件を元に順番2のプロセスのみ起動するということも可能ですが、フローを使用することでより柔軟に起動するプロセスを指定することが出来ます。
・レコード保存や画面入力をトリガーとする起動
通常の承認プロセスでは「承認申請」ボタンを手動で押下することで申請開始となりますが、フローを使うことで画面フローの入力内容に沿って申請開始したりレコード保存時の状態によって自動申請開始なども可能です。
後者はプロセスビルダーでも可能ですが、プロセスビルダーは廃止予定のためフローを使用することが推奨されます。
方法②フローを作成してみる
ここからは実際にフローを作成してみます。承認プロセスは商談オブジェクト用に事前に作成している前提で進めます。
まずは「アクション」要素で承認カテゴリから「承認申請」アクションを選択します。
入力値として6つのパラメータを設定します。公式ドキュメントでもパラメータが説明されています。
今回はレコードのカスタムアクションから画面フローを起動する前提でパラメータを設定してみます。
・カスタムオブジェクトID
オブジェクトIDというか、起動元のSalesforceレコードIDを指定します。画面フローで取得するレコードIDは変数「recordId」で取得するというのはシステム的な決まりです。他にもフロー内で取得した特定のレコードIDを変数に格納してこの値にすることも出来そうです。
・開始条件をスキップ
「含める」にすると事前に作成した承認プロセスで指定した開始条件を無視します。
・次の承認者 ID
事前に作成した承認プロセスで承認者設定をしていない場合にはこのパラメータで設定したユーザに承認が回付されます。承認プロセスで承認者設定している場合はこのパラメータ指定は無視されるようです。
また、”1 つの項目のみを含むテキスト型のコレクション変数を使用”することがポイントのようで、テキスト変数は指定できないようです。つまりコレクション変数に1つの要素だけを含む形にし、その値はユーザIDにしておくというイメージです。
例えばテキストコレクション変数「{!groupMemberId}」を作成しておき、テキスト変数で用意した1名分のユーザID「{!userId}」を割り当てすることで実現できそうです。
1ユーザしか指定できないということは承認ユーザを複数人指定することも恐らく出来ないようなので、承認者パラメータはフローではなく承認プロセス側で設定する方が柔軟かもしれません。
・承認プロセス名またはID
事前に作成した承認プロセスを指定します。承認プロセスのAPI名かSalesforceIDが使用できます。
「カスタムオブジェクトID」パラメータで指定したオブジェクトと、ここで指定する承認プロセス設定したオブジェクトが一致しないとエラーになるようです。
・申請者 ID
どのユーザを申請者とするかです。通常は今ログインして操作しているユーザなので{!$User.Id}とすることが多そうです。
・登録コメント
フローを介さない通常の承認プロセスでも「承認申請」ボタンから起動するとコメント入力が出来ますが、
画面フローで入力させたテキストでこのコメントに代入することが可能です。
結果的に今回はこのような入力になりました。
「登録コメント」パラメータに指定している変数「comment_input」は下記のように画面フローで事前にユーザが入力する想定です。
フロー全体では3つの要素を並べる形になりました。
・割り当て:「次の承認者 ID」パラメータ用にテキストコレクション変数に1名のユーザSalesforceIDが含まれるようにする
・画面:「登録コメント」を申請ユーザが画面から入力できるように設定
・承認申請:各パラメータを埋めて、事前に作成した承認プロセスを起動するように設定
方法②カスタムボタンの作成
今回作成したフローは「承認申請フロー」という名前で保存しました。この承認フローをカスタムボタンで起動してみます。
・起動ボタンの作成
今回は商談の承認プロセスを起動するため、商談オブジェクトで新規カスタムアクションを作成します。下記のようにアクション種別はフロー、フローは作成した「承認申請フロー」を指定します。
・ページへ配置
あとは商談ページレイアウトの「Salesforce モバイルおよび Lightning Experience のアクション」に今作成したアクションを配置するだけです。
・挙動確認
商談詳細ページに配置したボタンをから承認フローを開始できます。
ボタンを押すと承認フローが起動して申請を開始することが出来ます。
・画面フローとしてコンポーネント配置も可能
また、フローなのでボタンからの起動だけではなくLightningページに直接配置したり柔軟な起動が可能です。
コメント