Salesforce フローについて
Salesforce フローとは、 Salesforce 上で独自にプロセス処理が可能なローコードツールです。レコードを保存した時・ボタンを押下した時など、アクションを受け取り開始する処理を記述することができます。他の自動化ツールであるワークフローやプロセスビルダーに比べて自由度が非常に高く、個別開発のような複雑な作り込みもコーディングなしで構築することができます。
ワークフロー、プロセスビルダーは Winter’ 23 より新規作成ができなくなるという正式な発表も出ており、Salesforce フローによるカスタマイズできるスキルはますます高まっているといえるでしょう。 Spring’ 22 にはワークフローからフローへの移行ツールがリリースされ、そろそろ移行にも目を向けて動き始める必要がありそうです。
Go with the Flow: What's Happening with Workflow Rules and Process Builder? - Salesforce Admins
Go with the Flow: What's Happening with Workflow Rules and Process Builder? - Salesforce Admins
Salesforce フローは Salesforce のアップデートを重ねるたびに便利な機能が追加されており、その追加のスピードには目を見張るものがあります。そのアップデートの中で、私が実案件で活用した機能、使ってみたい機能とその活用方法をご紹介いたします。
1. 活用した機能の紹介
1-1. フローの実行方法(画面フローのみ)
画面フローを実行する時に、フローの実行方法を設定できます。実行方法を「システムコンテキスト共有なし- すべてのデータにアクセス」として選択すると、権限を無視した実行が可能です。
活用例
フローで起動するカスタムメールを送信した時、その送信した履歴を残したいといった内容を実現する必要がありました。履歴のため、レコードの作成編集権限を不可とする制御が必要でした。この要件では、フローの実行方法を設定することで、個別開発をせずに履歴を作成させることができました。
1-2. フロートリガエクスプローラ(レコードトリガのみ)
フロートリガエクスプローラは、レコードトリガフローのトリガ状況を確認することできます。フロー定義が一覧表示された画面の右上にあるフロートリガエクスプローラから起動できます。組織内で使用されているレコードトリガフローは[オブジェクト]と[トリガ]を指定して絞り込み表示が可能です。
1-3. 実行順序
フローの実行順序を設定することができます。1 オブジェクトに複数のトリガが設定されている場合に力を発揮します。 実行順序はフローのバージョンプロパティにあるトリガ順序より設定ができます。 Summer’ 22 の Update で、フロートリガエクスプローラからドラッグアンドドロップにより実行順序指定できるようになり、手入力での指定は必要なくなりました。
活用例
個別開発 NG の案件を担当していた際、組織に数多くのフローを実装する必要がありました。フローの改修が必要な時、ほかのオブジェクトに影響を与えないかを確認する有効な手段として、トリガエクスプローラ・実行順序は非常に重宝しました。
2. 使ってみたい機能の紹介
2-1. スケジュール済みパスを設定(レコードトリガのみ)
Schedule 済みパスでは、フローをトリガしたオブジェクトの日付項目にもとづいて特定の種類のイベントをトリガすることができます。
ワークフロールールにあった[時間ベースのアクション]をフローにも適用しパワーアップしたものと考えてよいでしょう。
ワークフロールールにあった[時間ベースのアクション]をフローにも適用しパワーアップしたものと考えてよいでしょう。
活用例
商談がオープンした後に一定期間更新がない商談があった場合、フォローアップを行うためのメールを送信するといった、トリガしたタイミングから期間を持たせて処理実行が可能となります。
Salesforce の公式も、スケジュールトリガに関して活用例が紹介されています。是非チェックしてみてください。
Salesforceフローでのパスのスケジュール設定 | Developer Force Blog
Salesforceフローでのパスのスケジュール設定 | Developer Force Blog
2-2. コレクション検索条件
コレクション検索条件は、条件を満たすソース項目のみに絞り込んだ別のコレクションを作成します。作成したコレクションの条件を満たすもののみを絞り込む(フィルタする)ことができ、処理負荷の軽減を図ることができます。
活用例
親レコードからカスタムアクションを実行し、子レコードに登録されているユーザにメールを送信したい時、子レコードのユーザの件数は何件になるかわかりません。また、子レコードを取得する際にユーザ ID を取得することはできますが、ユーザのメールは取得できないため、 ユーザ ID を使用してユーザをクエリする必要が出てきます。ガバナ制限の制約上、ループの中でレコードを取得することは好まれないため、一括でレコードを取得する必要があります。
フローの性質上、ユーザ全レコードを取得し、ユーザ全レコードと子レコードのループをネストし、それぞれのユーザ ID が一致したレコードのメールアドレスを取得する処理になります。しかし、処理件数は ユーザ全レコードの件数 × 子レコードの件数の回数ループする必要があり、処理が大きくなってしまいます。
フローの性質上、ユーザ全レコードを取得し、ユーザ全レコードと子レコードのループをネストし、それぞれのユーザ ID が一致したレコードのメールアドレスを取得する処理になります。しかし、処理件数は ユーザ全レコードの件数 × 子レコードの件数の回数ループする必要があり、処理が大きくなってしまいます。
ループの処理による処理負荷軽減のためにフィルタは有効な手段です。フィルタを使用することでループの件数は 子レコードの件数 × 2回のループ で済みます。
フローでガバナ制限や処理速度を気にするほど大きな処理を実行させる機会は少ないかもしれませんが、ちょっとした工夫が負荷軽減につながるので是非覚えておきたいです。
最後に
冒頭に述べたとおり、Salesforce フローは非常に速いスピードで進化をしています。案件によっては、お客様都合により個別開発が出来ず標準開発の範囲で開発を進めなければならない場合もあります。少しでも要望に応えられるように Salesforce のアップデートには目を光らせておきたいところです。
今回の記事が、開発の幅を広げる手助けになれば幸いです。ありがとうございました。
今回の記事が、開発の幅を広げる手助けになれば幸いです。ありがとうございました。