当ブログではアフィリエイト広告を利用しています

サンプルコード

Apex Trigger サンプルコード

取引先オブジェクトの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処理サンプル タイトル サンプルコード 説明 カスタ ...

続きを見る

-サンプルコード
-, , , ,