Handlerクラスを使った実装
今回はタイトル通りTriggerを作ったのでシェアしたいと思います。
今回の要件としては以下の通りです。
①取引先責任者が作成されると、その取引先責任者を参照した商談が作られる。
②商談には連番の商談番号があり、Sから始まる10桁の数字で1番目の場合はS0000000001と左に0を詰めた形になる。
③商談の完了予定日は作成日の1ヶ月後となる。
この3つくらいですかね。
ではまずTriggerからです。
contactTrigger
trigger contactTrigger on Contact (after insert) {
//ハンドラクラスのインスタンス化
contactTriggerHandler handler = new contactTriggerHandler();
if ( Trigger.isAfter && Trigger.isInsert ){
handler.isAfterInsert(Trigger.new);
}
}
ここではハンドラクラスを発動条件の中で呼び出すだけの
単純な動作を書いています。
次にクラスです。
contactTriggerHandler
public class contactTriggerHandler {
public void isAfterInsert(List<Contact> newList){
List<Opportunity> opportunityList = new List<Opportunity>();
//その時点での最大値を取得
Opportunity maxRecord = [SELECT Name From Opportunity Order By Name DESC LIMIT 1];
//Sを外してinteger型に変換
Integer oppNumber = Integer.valueOf(maxRecord.Name.replace('S',''));
//商談の作成
for ( Contact c : newList ){
//最大商談名に1を追加
oppNumber += 1;
Opportunity newOpp = new Opportunity(
Name = 'S' + String.valueOf(oppNumber).LeftPad(10,'0'),
CloseDate = system.today().addMonths(1),
StageName = 'Prospecting',
Contact__c = c.Id);
opportunityList.add(newOpp);
}
insert opportunityList;
}
}
こんな感じですかね。
うまいコードじゃないかもですが割とスッキリはできたかなと思います。
ハンドラクラスはもっと汎用的にすれば強力なクラスになると思いますので、
今度は汎用的なクラスになるように考えてみようかとおもいます。
profile
生まれも育ちも大阪の浪速中の浪速っ子が30才未経験からITエンジニアとして生きるブログもやってます。
よかったらみてください