beforeトリガとafterトリガの特徴をまとめてみました。
○beforeトリガ
レコードがDBに保存される前に起動されます。
レコードがDBに保存される前のため、Trigger.newを直接変更することができます
(before insert、before updateトリガ)。
○afterトリガ
レコードがDBに保存された後に起動されます。
但し、まだコミットはされていません(重要)。
DBに保存された後のため、
・Id
・自動採番
・作成者
・作成日時
・更新者
・更新日時
などのDBで設定された項目の値にアクセスできます。
DBに保存された後のため、Trigger.newを直接変更することはできませんが、
DML操作で元レコードの更新・削除を行うことができます
(after insert、after updateトリガ)。
○実行順序
beforeトリガ、afterトリガ、必須、入力規則のチェックは、
↓の順番で実行されます。
1. beforeトリガ
2. 必須、入力規則のチェック
3. afterトリガ
○使い分け
開発時には、
・入力規則のチェックより前に実施したい場合には、beforeトリガを使う
・DBで設定された値にアクセスしたい場合には、afterトリガを使う
など、両者の特徴を生かして、使い分けると良いと思います。
最後に、特徴をまとめた表を載せておきます。
beforeトリガ | afterトリガ | |
---|---|---|
起動タイミング | レコードがDBに保存される前 | レコードがDBに保存された後 |
DBで設定する項目へのアクセス | 不可 | 可 |
Trigger.newの項目の値の変更 | 可 ※1 | 不可 ※2 |
元レコードのDML操作(更新・削除) | 不可 ※1 | 可 ※2 |
実行順序 | 必須、入力規則のチェックの前 | 必須、入力規則のチェックの後 |
※1 before insert、before updateの場合
※2 after insert、after updateの場合