結論:まずこれだけ覚える
レコードトリガーフローは、何が起きたときに、保存処理のどの時点で動かすかを[開始]要素で決めます。
- 保存前(高速項目更新):作成・更新されるトリガーレコード自身の項目値を、保存前に変更する
- 保存後(アクションと関連レコード):保存後に、関連レコードの作成・更新、アクション、通知、スケジュール済みパスなどを実行する
- 削除前/削除後:削除イベントでは、作成・更新の「高速項目更新」とは別の実行区分を使用する 保存前フローで使える要素については、Salesforceの現行公式ページ間に不整合があります。複数のページは4要素だけと説明する一方、別の現行ページは[カスタムエラー]も保存前フローで使用できると説明しています。
レコードトリガーフローとは
指定したオブジェクトのレコードが作成・更新・削除されたことをきっかけに、自動実行されるフローです。 [開始]要素では主に次を設定します。
- 対象オブジェクト
- 作成、更新、作成または更新、削除のどのイベントで実行するか
- エントリ条件
- 作成・更新の場合、保存前または保存後のどちらに最適化するか 削除イベントには、作成・更新の保存前フローとは別に、削除前と削除後のレコードトリガーフローがあります。
実行タイミングの比較
| 種類 | 主な用途 | トリガーレコード自身 | 関連レコード・アクション |
|---|---|---|---|
| 保存前:高速項目更新 | 保存前の値補正、計算、分類、入力エラー | $Record の値を直接変更する | 原則として行わない |
| 保存後:アクションと関連レコード | 関連レコードの作成・更新、メール、Apex、サブフロー、非同期処理 | 必要に応じて更新要素を使用する | 実行できる |
| 削除前 | 削除されるレコードを参照して、削除前に必要な処理を行う | 削除対象として参照する | フロー種別と要素の制約に従う |
| 削除後 | レコード削除後に関連処理を行う | すでに削除されたレコードの情報を参照する | 実行できる処理を設計する |
保存前フロー:高速項目更新
保存前フローは、作成または更新されるレコードがデータベースへ保存される前に実行されます。
トリガーレコード自身の項目を変更する場合は、[割り当て]要素で $Record の項目へ値を設定します。通常、同じレコードを[レコードを更新]要素で保存し直す必要はありません。
向いている例は次のとおりです。
- 郵便番号や電話番号の形式を補正する
- 入力値から区分項目を計算する
- 複数項目から初期値を設定する
- 条件に合わない入力を[カスタムエラー]で止める 関連レコードの作成、メール送信、外部アクションなどが必要なら、保存後フローを使用します。
保存後フロー:アクションと関連レコード
保存後フローは、トリガーレコードの保存後に実行されます。 向いている例は次のとおりです。
- 関連するToDoやカスタムオブジェクトレコードを作成する
- 親レコードや子レコードを更新する
- メールアラートや通知を送信する
- Apexアクションやサブフローを呼び出す
- 非同期パスやスケジュール済みパスを実行する スケジュール済みパスは、[アクションと関連レコード]に最適化したレコードトリガーフローで設定します。基準時刻から一定時間後、またはレコードの日付項目を基準に処理を予約できます。
削除イベントの扱い
「レコードが削除されたとき」を選ぶ場合、作成・更新用の[高速項目更新]と同じ考え方ではありません。 現行の公式[Flow Types]には、次の2種類が示されています。
- Record-Triggered Before Delete Flow:レコードが削除対象としてマークされた時点で実行
- Record-Triggered After Save Flow:レコード変更の保存後、またはレコード削除後に実行 削除前に削除対象の値を使って処理する、または削除後に関連データを更新するなど、目的に合わせてFlow Builderで利用可能な実行区分と要素を確認します。
保存前フローの利用可能要素に関する公式情報の不整合
Salesforce公式の[Before-Save Record-Triggered Flows]と[Flow Types]は、保存前フローで使用できる要素を次の4つと説明しています。
- 割り当て(Assignment)
- 決定(Decision)
- レコードを取得(Get Records)
- ループ(Loop) 一方、次の現行公式情報は保存前フローで[カスタムエラー]を使用できると説明しています。
- [Custom Error Element]:保存前または保存後のレコードトリガーフローで利用可能
- [Create a Before-Save Flow for Better Data Quality]:保存前フローへ[カスタムエラー]を追加する手順を掲載 したがって、「保存前フローでは現在も必ず4要素しか使えない」とは断定できません。設計時は現行のFlow Builderで利用可能な要素を確認し、試験問題では問題が前提とするリリース時点にも注意します。
保存前と保存後の選び方
| 要件 | 選ぶ実行タイミング |
|---|---|
| 保存するレコード自身の項目を計算・補正する | 保存前 |
| 入力エラーを表示して保存を止める | 保存前または保存後のカスタムエラー。単純な項目条件なら検証ルールも比較する |
| 関連レコードを作成・更新する | 保存後 |
| メールや通知を送る | 保存後 |
| 一定時間後に処理する | 保存後のスケジュール済みパス |
| 削除前または削除後に処理する | 削除イベント用の実行区分 |
よくある誤解
保存前フローでは[レコードを更新]が必要
トリガーレコード自身の値は、$Record へ割り当てれば保存処理に反映されます。同じレコードを更新要素で再更新する設計は不要です。
保存後フローなら制約なく何でもできる
保存前より利用できる要素は広いですが、トランザクション、ガバナ制限、実行コンテキスト、再帰、要素ごとの制約はあります。要件に必要な処理だけを設計します。
削除フローも[高速項目更新]を選ぶ
削除イベントには削除前・削除後の実行区分があり、作成・更新の[高速項目更新]とは別に考えます。
試験での判別ポイント
- 「保存するレコード自身の項目を高速に更新」→ 保存前の高速項目更新
- 「関連レコードを作成」「メール送信」「サブフロー」→ 保存後のアクションと関連レコード
- 「一定時間後に実行」→ 保存後のスケジュール済みパス
- 「削除前に処理」→ 削除前レコードトリガーフロー
- 「保存前で利用可能な要素は4つだけ」→ 現行公式情報に不整合があるため、出題時点の前提を確認
出典(Salesforce公式)
- Getting Started with Record-Triggered Flows — レコードトリガーフローの対象イベント、エントリ条件、保存前・保存後の基本構成を裏付けています。
- Before-Save Record-Triggered Flows — 保存前フローが作成・更新レコードの保存前に実行され、トリガーレコード自身を更新する用途であることと、4つの利用可能要素の説明を裏付けています。
- Flow Types — 保存前、保存後、削除前など、現行のフロー種別と実行タイミングを裏付けています。
- Custom Error Element — [カスタムエラー]が保存前または保存後のレコードトリガーフローで利用できるとする現行仕様を裏付けています。
- Create a Before-Save Flow for Better Data Quality — 保存前フローに[カスタムエラー]を追加してデータ品質を検証する現行の手順を裏付けています。
- Scheduled Paths — スケジュール済みパスが[アクションと関連レコード]に最適化したレコードトリガーフローで利用できることを裏付けています。