はじめに
今日はSalesforceのトリガーの実行順序について説明します。
トリガーの実行順序
Salesforceでは、トリガーが実行される順序が決まっています。この順序があることで、データが正しく処理されます。ここでは、トリガーの実行順序をステップごとに説明します。
1. レコードの初期設定:
最初に、元のレコードがデータベースから読み込まれるか、、upsert ステートメント用にレコードが初期設定されます。
"upsert"
挿入(insert)と更新(update)を組み合わせた操作です。もしレコードが存在しなければ新しく作成し、存在すれば更新します。この初期設定は、どのレコードが新規で、どのレコードが既存かを決めるための準備です。例えば、新しい顧客情報を追加する場合や、既存の顧客情報を更新する場合に、適切に対応できるように準備をします。
2. 値の上書き:
要求から新しいレコード項目の値が読み込まれ、古い値を上書きします。Salesforceは、要求の種類に応じてさまざまな検証チェックを実行します。
-
標準UI編集ページからの要求:
- レイアウト固有のルール
- レイアウトレベルおよび項目定義レベルで必要な値
- 有効な項目形式
- 最大項目サイズ
-
ユーザーオブジェクトからの要求:
- カスタム検証ルール
-
複数行品目の作成からの要求:
- カスタム検証ルール
-
ApexアプリケーションやSOAP APIコールからの要求:
- 外部キーと制限付き選択リストの検証
- カスタム外部キーがオブジェクト自体を参照しないことの確認
3. レコードトリガーフローの実行:
保存前に実行されるように設定されたレコードトリガーフローが実行されます。
4. beforeトリガーの実行:
すべてのbeforeトリガーが実行されます。
5. システム検証の再実行:
必須項目の確認やカスタムの入力規則の実行など、システム検証のほとんどの手順がもう一度実行されます。ただし、標準UI編集ページからの要求に対しては、レイアウト固有のルールの適用は再実行されません。
6. 重複ルールの実行:
重複するレコードを特定し、ブロックアクションを実行します。重複が検出された場合、レコードは保存されず、後続のステップも実行されません。
7. レコードの保存:
レコードはデータベースに保存されますが、まだ確定されません。
8. afterトリガーの実行:
すべてのafterトリガーが実行されます。
9. 割り当てルールの実行:
割り当てルールが実行されます。
10. 自動応答ルールの実行:
自動応答ルールが実行されます。
11. ワークフロールールの実行:
ワークフロールールが実行され、ワークフロー項目自動更新が存在する場合、次の手順が実行されます。
- レコードの再更新:
- レコードが再度更新されます。
-システム検証の再実行:
カスタム入力規則、フロー、重複ルール、プロセスおよびエスカレーションルールは再実行されません。
- レコードが再度更新されます。
- before updateトリガーとafter updateトリガーの再実行:
- レコードの操作(挿入または更新)に関わらず、もう一度実行されます。
12. エスカレーションルールの実行:
エスカレーションルールが実行されます。
13. Salesforceフロー自動化の実行:
次のSalesforceフロー自動化が実行されますが、順序は保証されません。
- プロセス
- プロセスによって起動されたフロー
- プロセスまたはフローでDML操作が実行されるとき、影響を受けるレコードに対して保存手順が実行されます。
14. レコードトリガーフローの実行:
保存後に実行されるように設定されたレコードトリガーフローが実行されます。
15. エンタイトルメントルールの実行:
エンタイトルメントルールが実行されます。
16. 積み上げ集計項目の計算:
レコードに積み上げ集計項目が含まれる場合、またはレコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親レコードの積み上げ集計項目が更新されます。親レコードに対して保存手順が実行されます。
17. 親レコードの更新:
親レコードが更新され、さらにその親レコードに積み上げ集計項目が含まれるか、その親レコードがクロスオブジェクトワークフローの一部である場合、計算が実行され、親の親レコードの積み上げ集計項目が更新されます。親の親レコードに対して保存手順が実行されます。
18. 条件に基づく共有の評価:
条件に基づく共有の評価が実行されます。
19. DML操作の確定:
すべてのDML操作がデータベースで確定されます。
"DML"
Data Manipulation Language(データ操作言語)の略です。DML操作は、データベース内のデータを操作するための命令のことです。
20. コミット後ロジックの実行:
変更がデータベースにコミットされた後、コミット後ロジックが実行されます。コミット後ロジックの例を次に示します。
- メールの送信
- キューに登録された非同期Apexジョブ(キュー可能ジョブやfutureメソッドを含む)
- レコードトリガーフローの非同期パス
まとめ
Salesforceのトリガーは、データが正しく処理されるために重要な役割を果たしています。これらのステップを順番に実行することで、Salesforceは効率的で信頼性の高いシステムとなっています。
資料
詳しい情報はSalesforceの公式ドキュメントを参照してください。トリガーの実行順序についての詳細な説明が記載されています。
この記事が、Salesforceのトリガーについての理解を深める手助けになれば嬉しいです!