Salesforce トリガ実行の順序

Salesforce トリガ実行の順序 下記は「Force.com Apex コード開発者ガイド」からの内容です。

トリガ実行の順序

レコードをinsert、update、またはupsert ステートメントを使用して保存すると、Salesforce は次のイベントを順番に実行します。
※Salesforce がサーバでこれらのイベントを実行する前に、ブラウザは、レコードに連動選択リスト項目が含まれているかどうかを JavaScript で検証します。この検証では、各連動選択リスト項目を指定可能な値に制限します。クライアント側では他に検証は行われません。

サーバで、Salesforce により次の手順が実行されます。
1. 元のレコードがデータベースから読み込まれるか、upsert ステートメント用にレコードが初期設定されます。
2. 要求から新しいレコード項目の値が読み込まれ、古い値を上書きします。
要求が標準 UI 編集ページから行われた場合、Salesforce はシステム検証を実行して、レコードについて次の点を確認します。
 • レイアウト固有のルールへの準拠
 • レイアウトレベルおよび項目定義レベルで必要な値
 • 有効な項目形式
 • 最大項目サイズ
  Salesforce は、要求がApex アプリケーションやSOAP APIコールなどの他のソースから送信されている場合、このステップでシステム検証を実行しません。
3. すべてのbefore トリガが実行されます。
4. すべての必須項目にnull 以外の値が入力されていることの確認や、ユーザ定義の入力規則の実行など、システム検証のほとんどの手順がもう一度実行されます。Salesforce が標準 UI + 編集ページから要求が行われた場合に再度実行しない唯一のシステム検証は、レイアウト固有のルールの適用です。
5. レコードはデータベースに保存されますが、まだ確定されません。
6. すべてのafter トリガが実行されます。
7. 割り当てルールが実行されます。
8. 自動応答ルールが実行されます。
9. ワークフロールールが実行されます。
10. ワークフロー項目自動更新が存在する場合、レコードが再度更新されます。
11. ワークフロー項目自動更新でレコードが更新された場合、標準の入力規則に加えて、before update トリガおよびafter update トリガがもう一度 (さらに 1 回のみ) 実行されます。カスタム入力規則は再実行されません。
12. エスカレーションルールが実行されます。
13. レコードに積み上げ集計項目が含まれる場合、またはレコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親レコードの積み上げ集計項目が更新されます。親レコードに対して保存手順が実行されます。
14. 親レコードが更新され、さらにその親レコードに積み上げ集計項目が含まれるか、その親レコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親レコードの積み上げ集計項目が更新されます。親レコードのさらに親レコードに対して保存手順が実行されます。
15. 条件に基づく共有の評価が実行されます。
16. すべての DML 操作がデータベースで確定されます。
17. メール送信など、確定後のロジックが実行されます。
※再保存時に、手順 7 から手順14 まではスキップされます。