Before Trigger
■概要
DBへの保存前に動作する。
■pros
・起点となったレコードへの変更に関して、追加のDMLステートメントの発行が不要(※Trigger.newの上書きのみで可)
■cons
・IDや自動採番など、DBへの保存時に生成される値にアクセスできない(※Insert時)
・数式項目の値にアクセスできない
■利用シーン
・(入力規則では対応できない)複雑なValidation
・起点となったレコードのupdate
・Insert以外のDML操作を起点としたApex Triggerの記述
After Trigger
■概要
DBへの保存後に動作する。
■pros
・IDや自動採番など、DBへの保存時に生成される値にアクセスできる
■cons
・起点となったレコードへの変更に関して、追加のDMLステートメントを発行する必要がある
■利用シーン
・Insert操作を起点としたトリガである && 当該のトリガのID(など、DBへの保存時に生成される値)にアクセスする必要がある
結論
Insert以外は全てBefore Triggerを利用する。
Insertの場合、起点となったレコードのIDを扱う場合のみAfter Triggerを利用し、それ以外は全てBefore Triggerを利用する。
95% of triggers are before triggers
When to use “before” vs “after” triggers
参考:実行順序
- DMLイベントの発生
- beforeトリガの実行
- レコードのDBへの保存(※未確定)
- afterトリガの実行
- レコードのDBへのコミット