誰でも使えるApexトリガーの使い方、基本設定
入力規則、ワークフロー、プロセスビルダーを駆使して作業の自動化を行ってきたけど、設定が複雑で限界をむかえてきた。。
そんな時に役立つのが「トリガー」。Apexコードを書くことになりますが、トリガーを使いこなすことで拡張性が格段に上がります。
トリガーの基礎知識についてや、初期設定方法、リリースまでを丁寧に説明します。
Apexトリガーとは
Apexトリガーとは、各オブジェクトの作成、更新、削除のタイミングを拾って処理を実行できる仕組みです。
ワークフロー、プロセスビルダーでは複雑になる設定も、トリガーを使えば簡単に実現することができます。
Apexトリガーの基本構成
Apexトリガーでは大きく3つの構成に分かれます。
1つ目が、Trigger。
・before insert
・after insert
・before update
・after update
・before delete
・after delete
レコードに対する6つのアクションを拾って処理を実行できます。
例えば、商談作成後に他の商談と同じ商品を作成したり、リード更新前に意図しない項目が入っていないかチェックを行う事ができます。
2つ目が、TriggerHandler クラス。
Triggerに直接処理を書くこともできますが、運用が煩雑になります。そこでTriggerで拾ったアクションをTriggerHandlerクラスでさばいてあげることで、役割を分断して構造がきれいになります。
3つ目が、Helperクラス。
TriggerHandlerからの呼び出しで共通化できる処理をまとめる役割になります。
一見大変そうですが、なれてしまえば簡単に使いこなすことができるのでチャレンジしてみましょう。
今回は、「商談作成時に商談名を自動変更する処理」をApexトリガーを用いて実現したいと思います。
1.Triggerの実装
まずは、Sandbox環境を開き、歯車マークから「開発コンソール」を開いてください。
次に、「File→New→Apex Trigger」を選択してください。
名前は「OppotunityTrigger」、sObjectは「Opportunity」を命名してください。
Triggerができたら以下ソースをそのままコピペしてください。今回は作成時のみ実行するので、その他のトリガーはコメントアウトしています。
trigger OpportunityTrigger on Opportunity ( before insert, after insert, before update, after update, before delete ) {
OpportunityTriggerHandler handler = new OpportunityTriggerHandler();
// before insert
if(Trigger.isInsert && Trigger.isBefore){
handler.OnBeforeInsert( Trigger.new );
}
/*
// after insert
if(Trigger.isInsert && Trigger.isAfter){
handler.OnAfterInsert( Trigger.newMap );
}
// before update
if(Trigger.isUpdate && Trigger.isBefore){
handler.OnBeforeUpdate( Trigger.new, Trigger.oldMap );
}
// after update
if(Trigger.isUpdate && Trigger.isAfter){
handler.OnAfterUpdate( Trigger.newMap, Trigger.oldMap );
}
// Before delete
else if(Trigger.isDelete && Trigger.isBefore){
handler.OnBeforeDelete(Trigger.old);
}
// After delete
else if(Trigger.isDelete && Trigger.isAfter){
handler.OnAfterDelete(Trigger.old);
}
*/
}
2.TriggerHandlerクラスの実装
「File→New→Apex Class」を選択してください。名前は「OpportunityTriggerHandler」と命名してください。
このクラスにOnBeforeInsertメソッドを実装します。これでTriggerで作成前の処理を拾うことができます。
public without sharing class OpportunityTriggerHandler {
/**
* before insert
*/
public void OnBeforeInsert( List<Opportunity> news ){
for( Opportunity o : news ) {
o.Name = OpportunityHelper.changeOppName(o);
}
}
}
1点注意してほしいのが、必ずリスト、またはオブジェクトで扱うこと。商談オブジェクトから新規作成するのであれば問題ないですが、データローダーからの一括作成の場合、まとめて1つのTriggerで処理されます。その場合にリストで扱わないとすべてのレコードに処理があたらなかったり、処理が重くなってしまいます。
3.Helperの実装
最後にOnBeforeInsertで呼び出した名前変更メソッド(changeOppName)を実装しましょう。
「File→New→Apex Class」を選択してください。名前は「OpportunityHandler」と命名してください。
changeOppNameメソッドでは、[完了予定日]_[種別]_[取引先ID]と命名されるように項目を組み合わせます。
public without sharing class OpportunityHelper {
/**
* 商談名変更
*/
public static String changeOppName(Opportunity o){
return o.CloseDate + '_' + o.Type + '_' + o.AccountId ;
}
}
これで商談部分のApexトリガーが完成です!あとは、テスト、リリースを行えば完了です。
Apexトリガーは拡張性が高く一度実装するととても便利な機能です。ぜひApexトリガーを使いこなして、業務の最適化を行いましょう。
この記事が気に入ったらサポートをしてみませんか?