Apexトリガーの記載方法

salesforce

Apexトリガーとは

  • Salesforceのレコード操作後にApexクラスでの割り込み処理を行う際に使用するプログラムのこと。
    • 割り込みが行われるタイミング(処理前、処理後)は2種類存在し、ユーザ操作が完了後Salesforceの内部で処理が行われる前か後かを指定することができる。
    • レコードに対してどのイベント(新規作成、編集、削除等)の時に起動するかを指定することができる。

Apexトリガーの作成方法

作成する前に!

  • 作りたい処理のタイミングを考えよう!!
    • その処理はレコード処理後に動いてほしいのか、トリガにしたレコードを更新したいのか関連したレコードを修正したいのかなどを考えよう。
  • どの処理の際に起動するべきかを考えよう!!
    • 行いたい処理はどのイベントで起動するべきか、他のイベントでは起動する必要はないのか。

作成方法

  1. Salesforce画面にて右上の歯車[設定]⇨[開発者コンソール]を押下
  2. 開発者コンソール画面の右上の[File]⇨[New]⇨[ApexTrigger]を選択し、画面の内容に従って入力

記載方法

  • Apexトリガーの記載方法はテンプレートを丸暗記して、使い方を覚えよう!
  • ロジックはApexクラス部分(ハンドラ)に任せるためApexトリガーには処理は書かず、条件とApexクラスの呼び出しのみを行うこと!
// Apexトリガー起動条件を記載
trigger HogehogeTrigger on sObject (before insert, before update) {
    // ここに細かい条件を記載する。
}
  • trigger・・・固定
  • HogehogeTrigger・・・トリガの名称。任意の値。オブジェクトのAPI参照名+Triggerがよくあるパターン。
    • 例)AccountTrigger // 取引先(Account)オブジェクトのトリガー
  • on sObject ・・・ どのオブジェクトのトリガーなのかを記載。トリガのAPI参照名を記載。
    • 例)on Account // 取引先(Account)オブジェクトのトリガー
  • (before insert)・・・引数。 どのタイミング、どのイベントで起動すべきかを記載。カンマ区切りで複数入力可能。
    • 例)(before insert, before update, after insert)// 新規作成前、更新処理前、新規処理後に起動
    • 起動タイミングおよびイベントについては以下の表の7種類が設定可能
種類イベントレコード操作使用例
before insert処理前作成トリガとなったレコードの操作
・入力規則
・項目の値の変更
・初期値設定
before update処理前編集トリガとなったレコードの操作
・入力規則
・項目の値の変更
・初期値設定
before delete処理前削除トリガとなったレコードの操作
・入力規則
after insert処理後作成トリガとなったレコード以外への操作
・トリガとなったレコードとの紐付け
・関連レコードの更新
after update処理後編集トリガとなったレコード以外への操作
・トリガとなったレコードとの紐付け
・関連レコードの更新
after delete処理後削除トリガとなったレコード以外への操作
・関連レコードの削除
after undelete処理後ゴミ箱から戻すトリガとなったレコード以外への操作
・トリガとなったレコードとの紐付け
  • 上記の例では新規作成処理前編集処理前の処理で起動されるが、新規作成時と編集時で処理は分けたい場合はTriggerのコンテキスト変数とif文を使用することで処理を分けることができる。
// Apexトリガー起動条件を記載
trigger HogehogeTrigger on sObject (before insert, before update) {
    if (Trigger.isBefore) {
        if (Trigger.isInsert) { 
            // 新規処理かつ処理前に起動した場合の処理を記載
        } else if (Trigger.isUpdate) { 
            // 編集処理かつ処理前に起動した場合の処理を記載
        }
    } else if (Trigger.isAfter) {
        if (Trigger.isInsert) { 
            // 新規処理かつ処理後に起動した場合の処理を記載
        } else if (Trigger.isUpdate) { 
            // 編集処理かつ処理後に起動した場合の処理を記載
        }
    }
}

その他にもTriggerのコンテキスト変数を使用することで様々な処理を記載することができる。

関連Trailhead: Apex トリガー入門

関連リファレンス: トリガーコンテキスト変数