取引先オブジェクトのApexTriggerサンプルコード
取引先(Account)のトリガクラス、ハンドラクラス、テストクラスの基本セット
取引先トリガ(AccountTrigger.cls)
Trigger AccountTrigger on Account (before insert, after insert, before update, after update,before delete, after delete, after undelete) {
//Handlerクラス
AccountTriggerHandler handler = new AccountTriggerHandler();
//レコードが新規登録された時
if (Trigger.isInsert) {
if (Trigger.isBefore) {
// before insertの処理
handler.onBeforeInsert(Trigger.New);
} else if (Trigger.isAfter) {
// after insertの処理
handler.onAfterInsert(Trigger.New);
}
//レコードが更新された時
} else if (Trigger.isUpdate) {
if (Trigger.isBefore) {
// before updateの処理
handler.onBeforeUpdate(Trigger.Old, Trigger.New);
} else if (Trigger.isAfter) {
// after updateの処理
handler.onAfterUpdate(Trigger.Old, Trigger.New);
}
//レコードが削除された時
} else if (Trigger.isDelete) {
if (Trigger.isBefore) {
// before deleteの処理
handler.onBeforeDelete(Trigger.OldMap, Trigger.NewMap);
} else if (Trigger.isAfter) {
// after deleteの処理
handler.onAfterDelete(Trigger.OldMap, Trigger.NewMap);
}
//レコードがごみ箱から復元された時
} else if (Trigger.isUndelete) {
if (Trigger.isAfter) {
// after undeleteの処理
handler.onAfterUnDelete(Trigger.New);
}
}
}
トリガハンドラ(AccountTriggerHandler.cls)
/**--------------------------------------------------------------------------
* プログラム名 :AccountTriggerHandler
* 概 要 :Accountトリガーのハンドラークラス
* 作成日 :yyyy.mm.dd
* 作成者 :cclt
*--------------------------------------------------------------------------**/
public without sharing class AccountTriggerHandler {
/** * before insert */
public void onBeforeInsert(List<Account> newAccList){
for( Account acc : newAccList) {
//処理
}
}
/** * after insert */
public void onAfterInsert(List<Account> newAccList){
for( Account acc : newAccList) {
//処理
}
}
/** * before update */
public void onBeforeUpdate(List<Account> oldAccList,List<Account> newAccList){
for( Account acc : newAccList) {
//処理
}
}
/** * after update */
public void onAfterUpdate(List<Account> oldAccList,List<Account> newAccList){
for( Account acc : newAccList) {
//処理
}
}
/** * before delete */
public void onBeforeDelete(Map<Id,Account> oldAccMap,Map<Id,Account> newAccMap){
for( Account acc : oldAccMap.values()) {
//処理
}
}
/** * after delete */
public void onAfterDelete(Map<Id,Account> oldAccMap,Map<Id,Account> newAccMap){
for( Account acc : oldAccMap.values()) {
//処理
}
}
/** * after undelete */
public void onAfterUnDelete(List<Account> newAccList){
for( Account acc : newAccList) {
//処理
}
}
}
取引先トリガテストクラス(TestAccountTrigger.cls)
/**--------------------------------------------------------------------------
* プログラム名 :TestAccountTrigger
* 概 要 :Accountトリガーのテストクラス
* 作成日 :yyyy.mm.dd
* 作成者 :cclt
*--------------------------------------------------------------------------**/
@isTest(SeeAllData=false)
private class TestAccountTrigger {
//テスト設定メソッド
@testSetup
static void initTest(){
// テストデータのセットアップ
// 取引先の作成後、取引先に紐づく、責任者と商談を作成
Account acc = new Account(Name='クリエイティブコンテンツラボトウキョウ');
insert acc;
// 取引先に紐づく取引先責任者を作成
contact con = new Contact(FirstName='デイビッド',LastName='cclt');
insert con;
// 取引先に紐づく商談を作成
List<Opportunity> oppList = new List<Opportunity>();
oppList.add(new Opportunity(Name=acc.Name + '様との新規商談について',
StageName='Prospecting',CloseDate=System.today().addMonths(1), AccountId=acc.Id));
oppList.add(new Opportunity(Name=acc.Name + '様との別商談について',
StageName='Prospecting',CloseDate=System.today().addMonths(3),AccountId=acc.Id));
insert oppList;
}
// テストケース:取引先名が更新されたときに商談の名前が更新されるか
@isTest static void testUpdateAccountName() {
// 取引先の名前を更新するため最新のレコードを取得
List<Account> updAccList = [select id, Name from Account];
updAccList[0].Name = 'CreativeContentLabTokyo';
// テスト実行
Test.startTest();
//トリガー起動のための処理を記述
Database.SaveResult result = Database.update(updAccList[0], false);
Test.stopTest();
// テスト結果の検証
System.assert(result.isSuccess());
System.assert(result.getErrors().size() == 0);
}
// テストケース:取引先を削除
@isTest static void testDeleteAccountRecord() {
// 取引先の名前を更新するため最新のレコードを取得
List<Account> delAccList = [select id, Name from Account];
// テスト実行
Test.startTest();
//トリガー起動のための処理を記述
delete delAccList[0];
Test.stopTest();
List<Account> resultAcc = [select id, Name from Account];
// テスト結果の検証
System.assert(resultAcc.isEmpty());
}
}
サンプルコード一覧へ戻る場合は、こちらへ
-
参考サンプルコード(テンプレート)Apex/Lwc/Visualforce/Flow
Salesforceの開発を行うときにベースとなるサンプルコードを探すことが多いので、カテゴリごとにサンプルをまとめてみました。 Apex Apex処理サンプル タイトル サンプルコード 説明 カスタ ...
続きを見る