Force.com Apex コード開発者ガイドより下記を抜粋しました。
【トリガと実行の順序】
レコードを insert、update、または upsert ステートメントを使用して保存すると、Salesforce は次のイベントを順番に実行します。
メモ: Salesforce がサーバでこれらのイベントを実行する前に、ブラウザは、レコードに連動選択リスト項目が含まれているかどうかを JavaScript で検証します。この検証では、各連動選択リスト項目を指定可能な値に制限します。クライアント側では他に検証は行われません。
サーバで、Salesforce により次の手順が実行されます。
- 元のレコードがデータベースから読み込まれるか、upsert ステートメント用にレコードが初期設定されます。
- 要求から新しいレコード項目の値が読み込まれ、古い値を上書きします。要求が標準 UI 編集ページから行われた場合、Salesforceはシステム検証を実行して、レコードについて次の点を確認します。
- レイアウト固有のルールへの準拠
- レイアウトレベルおよび項目定義レベルで必要な値
- 有効な項目形式
- 最大項目サイズ
Salesforceは、要求がApexアプリケーションやSOAP APIコールなどの他のソースから送信されている場合、このステップでシステム検証を実行しません。
- すべての before トリガが実行されます。
- すべての必須項目にnull以外の値が入力されていることの確認や、ユーザ定義の入力規則の実行など、システム検証のほとんどの手順がもう一度実行されます。Salesforceが標準 UI + 編集ページから要求が行われた場合に再度実行しない唯一のシステム検証は、レイアウト固有のルールの適用です。
- レコードはデータベースに保存されますが、まだ確定されません。
- すべての after トリガが実行されます。
- 割り当てルールが実行されます。
- 自動応答ルールが実行されます。
- ワークフロールールが実行されます。
- ワークフロー項目自動更新が存在する場合、レコードが再度更新されます。
- レコードがワークフロー項目自動更新により更新された場合、標準検証のほかに、beforeトリガおよびafterトリガがもう一度だけ実行されます。カスタム検証ルールは実行されません。
メモ: 更新の必要がある場合にのみ、before トリガおよび after トリガがもう一度実行されます。項目にすでに値が設定されている場合、トリガは再実行されません。
- エスカレーションルールが実行されます。
- レコードに積み上げ集計項目が含まれる場合、またはレコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親レコードの積み上げ集計項目が更新されます。親レコードに対して保存手順が実行されます。
- 親レコードが更新され、さらにその親レコードに積み上げ集計項目が含まれるか、その親レコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親レコードの積み上げ集計項目が更新されます。親レコードのさらに親レコードに対して保存手順が実行されます。
- 条件に基づく共有の評価が実行されます。
- すべての DML 操作がデータベースで確定されます。
- メール送信など、確定後のロジックが実行されます。
メモ: 再保存時に、手順 7 から手順 14 まではスキップされます。