function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Guru sfdcGuru sfdc 

HandelrTrigger help

Hi Team,
 
Can anyone please help me to from new trigger logic to existing trigger handler trigger.
We have created one trigger and one apex class related to Account. But the problem is we don't want to create every time new trigger. We have a trigger called "Account Trigger" contains below Logic:
 
Account Trigger which is having old one:
Trigger Account Trigger on Account (before insert, before update, before delete, after insert, after update, after delete, after undelete)
{
AccountTriggerHandler handler = new AccountTriggerHandler(Trigger.isExecuting, Trigger.size, Trigger.old, Trigger.new, Trigger.oldmap, Trigger.newmap);
    AccountTriggerHandlerAlwaysOn handlerAlwaysOn = new AccountTriggerHandlerAlwaysOn(Trigger.isExecuting, Trigger.size, Trigger.old, Trigger.new, Trigger.oldmap, Trigger.newmap); 
    if(Trigger.isDelete && Trigger.isAfter)
        handlerAlwaysOn.onAfterDelete();
    if(Trigger.isDelete && Trigger.isBefore)
        handlerAlwaysOn.onBeforeDelete();
    if(Trigger.isInsert && Trigger.isBefore)
        handlerAlwaysOn.onBeforeInsert();
    if(Trigger.isUpdate && Trigger.isBefore)
        handlerAlwaysOn.onBeforeUpdate();
    if(Trigger.isInsert && Trigger.isAfter)
        handlerAlwaysOn.onAfterInsert();
    if(Trigger.isUpdate && Trigger.isAfter)
        handlerAlwaysOn.onAfterUpdate();  
    if(Trigger.isInsert && Trigger.isBefore)
        handler.onBeforeInsert();       
    if(Trigger.isUPdate && Trigger.isBefore)
        handler.onBeforeUpdate(); 
    if(Trigger.isInsert && Trigger.isAfter)
        handler.OnAfterInsert();   
    if(Trigger.isUpdate && Trigger.isAfter)
        handler.OnAfterUpdate();       
    if(Trigger.isUndelete && Trigger.isAfter)
        handler.onAfterUndelete();          
}
 
Account Trigger which is created new One:
 
Trigger AccountType on Account (after update){
   {
AccountTypecls acpt = new AccountTypecls();
        if(AccountTypecls.Aptcalc)
        acpt.AccountTypecalc(Trigger.new,trigger.newmap,trigger.oldmap);      
     }
}
 
Hear i want to include my newly created trigger to old trigger handler. Please help us.
 
Thanks
 
 
Amit Singh 1Amit Singh 1
Ok Use below code for your old trigger.
Trigger Account Trigger on Account (before insert, before update, before delete, after insert, after update, after delete, after undelete)
{
AccountTriggerHandler handler = new AccountTriggerHandler(Trigger.isExecuting, Trigger.size, Trigger.old, Trigger.new, Trigger.oldmap, Trigger.newmap);
    AccountTriggerHandlerAlwaysOn handlerAlwaysOn = new AccountTriggerHandlerAlwaysOn(Trigger.isExecuting, Trigger.size, Trigger.old, Trigger.new, Trigger.oldmap, Trigger.newmap); 
    if(Trigger.isDelete && Trigger.isAfter)
        handlerAlwaysOn.onAfterDelete();
    if(Trigger.isDelete && Trigger.isBefore)
        handlerAlwaysOn.onBeforeDelete();
    if(Trigger.isInsert && Trigger.isBefore)
        handlerAlwaysOn.onBeforeInsert();
    if(Trigger.isUpdate && Trigger.isBefore)
        handlerAlwaysOn.onBeforeUpdate();
    if(Trigger.isInsert && Trigger.isAfter)
        handlerAlwaysOn.onAfterInsert();
    if(Trigger.isUpdate && Trigger.isAfter)
        handlerAlwaysOn.onAfterUpdate();  
    if(Trigger.isInsert && Trigger.isBefore)
        handler.onBeforeInsert();       
    if(Trigger.isUPdate && Trigger.isBefore)
        handler.onBeforeUpdate(); 
    if(Trigger.isInsert && Trigger.isAfter)
        handler.OnAfterInsert();   
    if(Trigger.isUpdate && Trigger.isAfter){
		handler.OnAfterUpdate(); 
		AccountTypecls acpt = new AccountTypecls();
        if(AccountTypecls.Aptcalc)
        acpt.AccountTypecalc(Trigger.new,trigger.newmap,trigger.oldmap);      
     }
    }
    if(Trigger.isUndelete && Trigger.isAfter)
        handler.onAfterUndelete(); 
    		
}

Let us know if this helps :)

Thanks,
Amit Singh
Guru sfdcGuru sfdc
Hi Amit,

Thank you for your help. When we are saving trigger getting  Error: Compile Error: Method does not exist or incorrect signature: [AccountTypecls].AccountTypecls(List<Account>, Map<Id,Account>, Map<Id,Account>) .Can you please help me for this

​Thanks
 
Amit Singh 1Amit Singh 1
Hello,

Have you created the method like below in "AccountTypecls" class?
AccountTypecls(List<Account>, Map<Id,Account>, Map<Id,Account>)
Error is due to that method signature "AccountTypecls(List<Account>, Map<Id,Account>, Map<Id,Account>)" is not defined into the class.

Thanks,
Amit
 
Guru sfdcGuru sfdc
Yes ,I have mentioend like below:
public void AccountTypecalc(List<Account> aclist,map<id,Account> newmap,map<id,Account> oldmap). is this correct ?

Thanks
Amit Singh 1Amit Singh 1
Yeah, you are right.

Thanks,
Amit Singh.
Guru sfdcGuru sfdc
But still getting same errors @Amit, Can you please check where i made the mistakes,

Thanks
Amit Singh 1Amit Singh 1
Can you share code of "AccountTypecalc" class so that we can help you.

Thanks
Guru sfdcGuru sfdc
Hi Amit,

Please check below class and help me.

public class Accounttypecls{
    public static Boolean Aptcalc = true; 
    public static Boolean Aptcalc1 = false;  
    public static Boolean Aptcalc2 = false;   
    public void AccountPartnerTypecalc(List<Account> aclist,map<id,Account> newmap,map<id,Account> oldmap)
    {
        set<id> accidset = new set<id>();  
        set<string> ulprntidset = new set<string>();    
        string dulprnt; 
        map<string,List<Account>>  accmap = new  map<string,List<Account>>();
        system.debug('*********'+aclist.size());            
        for(Account acc: aclist)
        {
            accidset.add(acc.id); 
            // if(acc.GE_Global_Ultimate_Reporting_Account__c!=Null)  //GE_Digital_Ultimate_Parent_ID__c 
            // Ultimate_Parent_ID__c
            ulprntidset.add(acc.GE_Digital_Ultimate_Parent_ID__c);
            dulprnt= acc.GE_Digital_Ultimate_Parent_ID__c;
            system.debug('*********'+dulprnt);
        }
        
        system.debug('*********'+dulprnt);  
        
        List<Account> hiracclist = new List<Account>();
        List<Account> aclist1 = [select id, name,Partner_Status__c,Is_Partner__c,Account_Type__c,Tier_2__c,Parentid,GE_Digital_Ultimate_Parent_ID__c from Account where  GE_Digital_Ultimate_Parent_ID__c  =:dulprnt  AND Parentid!=null AND id NOT IN:accidset ]; 
        
        system.debug('*********'+aclist1.size());  
        
        for(Account a : aclist1)
        { 
            if(accmap.containskey(a.GE_Digital_Ultimate_Parent_ID__c))
            accmap.get(a.GE_Digital_Ultimate_Parent_ID__c).add(a);
            else
            {
                List<Account> alist = new List<Account>();
                alist.add(a); 
                accmap.put(a.GE_Digital_Ultimate_Parent_ID__c,alist);
            }
        }
        for(Account acc: [select id, name,Partner_Status__c,Is_Partner__c,Account_Type__c,Parentid,Tier_2__c,GE_Digital_Ultimate_Parent_ID__c from Account where ID IN :accidset ])
        {
            string acctype='';
            if(accmap.get(acc.GE_Digital_Ultimate_Parent_ID__c)!=null)
            {
                /* if(accmap.get(acc.GE_Digital_Ultimate_Parent_ID__c).contains(acc)){
                accmap.get(acc.GE_Digital_Ultimate_Parent_ID__c).set(0, acc);
                accmap.get(acc.GE_Digital_Ultimate_Parent_ID__c).remove(0);
                }*/
                for(Account acchr : accmap.get(acc.GE_Digital_Ultimate_Parent_ID__c))
                {
                    //acchr.Is_Partner__c= acc.Is_Partner__c;
                    if(acc.Is_Partner__c)
                    acchr.Account_Type__c = 'Partner';
                    else
                    acchr.Account_Type__c= '';
                    hiracclist.add(acchr); 
                }
                if(acc.Is_Partner__c)
                {
                    if(acc.parentid!=null)
                    Aptcalc1 =true;
                    acc.Account_Type__c= 'Partner';
                    hiracclist.add(acc);
                }
                else{
                    if(acc.parentid!=null)
                    Aptcalc2 =true;
                    acc.Account_Type__c= '';
                    hiracclist.add(acc);
                }
            }
            else{
                if(acc.Is_Partner__c)
                {
                    acc.Account_Type__c= 'Partner'; 
                    hiracclist.add(acc);
                }
                else{
                    acc.Account_Type__c= ' ';
                    hiracclist.add(acc);
                }
            }
        }       
        Account a=  [select id, name,Partner_Status__c,Is_Partner__c,Account_Type__c,Parentid,Tier_2__c,GE_Digital_Ultimate_Parent_ID__c from Account where ID  =:dulprnt];
        if(Aptcalc1)
        {
            a.Account_Type__c= 'Partner';
            hiracclist.add(a);
        }
        else if(Aptcalc2)
        {
            a.Account_Type__c= '';
            hiracclist.add(a);
        }
        Aptcalc = false;          
        update  hiracclist;
    }
}

Thanks
Amit Singh 1Amit Singh 1
got it you are using wrong method name in your trigger. Use below.
 
replace this

acpt.AccountTypecalc(Trigger.new,trigger.newmap,trigger.oldmap); 

with 

acpt.AccountPartnerTypecalc(Trigger.new,trigger.newmap,trigger.oldmap);
 
Replace above code and cheers :)

Thanks,
Amit
 
Guru sfdcGuru sfdc
Hey Amit,
 
Thank you. It was my mistake. Now code was succefully saved. But result is not updating. Can you help me any mistakes i have made in above code.
 
Thanks