S.B.S. Salesforce技術ブログ

教えて921さん!

トリガーの作成をしよう#2~トリガの実行タイミングについて~

こんにちは!mkです!
今回も引き続きトリガについて話していきます。
前回作成したトリガではレコードの作成時にしかトリガの実行がされませんでしたが、トリガは作成時以外にも実行するように設定が出来ます!

sbs-sfdc.hatenablog.com

そこで今回はトリガの実行タイミング
について話していきたいと思います。

いつトリガを実行できるのか


レコードに以下の操作を行う際にトリガを実行させることができます!
1.作成・挿入(insert)
2.更新(update)
3.削除(delete)
4.復元(undelete)
以上の4つの操作がトリガの実行タイミングとなります!

いろんなタイミングでトリガを実行してみよう


今回は簡単なサンプルを用意してみました!
前回の記事で「HelloWorld」のトリガを作ってみた方はそのまま上書きなりすれば大丈夫です!
作ってない方もオブジェクトのAPI名(test__c)だけ試したいオブジェクトのAPI名に変更すれば大丈夫ですよ!

trigger HelloWorld on test__c (before insert,before update,before delete) { //トリガの実行条件
    System.debug('HelloWorld!!');
    if (Trigger.isInsert) { //作成・挿入時に実行するブロック
        System.debug('Fin Insert');
    }
    else if (Trigger.isUpdate) { //更新時に実行するブロック
        System.debug('Fin Update');
    }
    else if (Trigger.isDelete) { //削除時に実行するブロック
        System.debug('Fin Delete');
    }
}

トリガが準備できたら実際にレコードを作ったりしてみましょう!
今回のトリガは作成・挿入、更新、削除時に動くはずです!
トリガ自体が動けばまず「HelloWorld!!」がログに出ます!
作成・挿入、更新、削除のいずれかを行えばそれに対応する文がログに出ますよ!

まとめ


今回はトリガの実行タイミングについて説明しました!
作成・挿入、更新、削除、復元の時にトリガを実行することが出来ることが分かったでしょうか?
かなり大まかなところを説明したため、説明しきれていない事がかなりあります。
例えば今回のサンプルプログラムの1行目にbefore undeleteと書いて復元を条件に加えるとどうなると思いますか?
before undeleteはサポートされてないっていうエラーが出てしまうんですね!
「それじゃ復元の時にはトリガの実行が出来ないじゃないか」って声も聞こえてきそうですがちゃんとできるんです!
今回も前回のプログラムにもしれっとbeforeと何度も出てきていますが実はafterもあって、これが復元の時のトリガ実行に関わってきます。
次回はその部分について説明していきたいと思います。