Before TriggerとAfter Triggerの違い

By | September 15, 2022

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

参考:実行順序

  1. DMLイベントの発生
  2. beforeトリガの実行
  3. レコードのDBへの保存(※未確定)
  4. afterトリガの実行
  5. レコードのDBへのコミット

詳細:「Apex開発者ガイド – トリガと実行の順序」