はじめに
Salesforceの自動処理を行う場合、Apexトリガーによる実装やプロセスビルダー/フロー等の設定含めて数多くの方法で実現する事が可能ですが、それぞれの違いや特徴、注意点について纏めました。
種類
Salesforceではプロセスの自動化として多種多様な設定で実現する事やカスタムで実装する事はご存じの通りかなと思いますが、簡単にその概要の説明を行います。
ワークフロー
- 簡単な手続きやプロセスを自動化する事が可能。ワークフロールールを作成する事でIf/Thenステートメント(与えられた条件式による処理の分岐)に従ったアクション(項目自動更新)実行する事で処理を自動化して時間節約する事が出来ます。
- 利用例:特定の対象項目が変更された場合に連動して値が変更される等の簡単な項目自動変更
プロセスビルダー
- ワークフローと比べてChatter投稿、メールアラート、Quip、アンケートの招待を送信するといった標準プロセスとの連携を柔軟に実行する事が出来ます。またプロセスビルダーからApexやフローといった別の自動処理をコールする事も可能です。
- 利用例:商談成立後のChatter投稿や契約(関連レコード)の自動作成
フロー
- 何かしらの操作から実行する事が出来る画面フロー、レコードを作成・更新・削除したときに起動される自動起動フロー、指定時間にバックグラウンドで実されるスケジュールトリガフローなど用途にしたがったテンプレートでSalesforce 組織データを取得して様々なアクションを実行する事が出来ます。Flow Builderというフロー作成ツールを用いてビジネスロジックをビジュアル的に作成する事が出来ます。
- 利用例:画面フロー(カスタム画面)からの入力による自動処理、日時/週次等の定時自動処理
トリガー
- Apexを用いたプログラム開発/実装することで処理の自動化が可能。多くの場合、Sandbox上で開発してテスト実行、リリースが必要になります。設定のみで完結するような標準の自動処理と比べてやることが多くメンテナンスが必要です。
ワークフロー | プロセスビルダー | フロー | トリガー | |
処理開始時期 |
|
|
|
|
レコードの作成 | 可能 | 可能 | 可能(ToDoのみ) | 可能 |
レコードの削除 |
不可 | 不可 | 可能 | 可能 |
レコードの更新 | 特定のレコードまたはその親 | 任意の関連レコード | 任意のレコード | 任意のレコード |
その他の機能 | メール送信(アラートのみ) | Apexコードのコール
Chatterへの投稿 メール送信 |
Apexコードのコール
Chatterへの投稿 メール送信 |
実装する事でその他機能との連携が可能 |
レコード保存時の実行順序
- 項目・レイアウト固有ルール設定(必須条件や型・長さ)
- ユーザ定義の入力規則
- レコードの保存前に実行されるように設定レコードトリガフロー
- すべてのbeforeトリガの実行
- 項目定義やユーザー入力規則の実行などの検証を再実施
- 重複ルールの実行
- レコード保存処理(未コミット)
- すべてのafterトリガの実行
- 割り当てルールの実行
- ワークフロールールの実行
- ワークフローの項目自動更新処理
- フロー自動化処理の実行(プロセス/プロセスによって起動されたフロー)
- エスカレーションルールが実行
- エンタイトルメントルールが実行
- レコードの保存後に実行されるように設定されたレコードトリガフローを実行
- 親レコードの更新(積み上げ集計項目/クロスオブジェクトの項目更新)
- 条件に基づく共有ルールの実行
- すべての DML 操作のデータベース確定(コミット)
- メール送信など、コミット後のロジックが実行
注意点、まとめ
- 同一イベント/オブジェクトに対しての複数トリガやレコードトリガーフローが存在する場合に、その実行順序は保障されません
- 自動処理内で実行されるトランザクションは1つとしてみなされるので、自動処理に要するリソースに対してガバナ制限等の注意が必要です(CPU実行時間/SOQLコール回数等)
フローやプロセスビルダー、ワークフロー等の自動処理はノンプログラミングで設定出来る容易で強力な機能として実用性が非常に高いですが、処理が膨大化したり複数の自動処理が絡まるとガバナ制限、処理実行時間が長くなる等の悪影響も及ぼす為、利用用途やケースに従ってApexトリガも含めた最適な自動化処理を選択する必要があるかなと思います。