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
Salesforce Admin 110Salesforce Admin 110 

stopping trigger helper class firing twice

i have a trigger and trigger helper class to create opportunity on contact after insert and afetr update. it works great but if i edit contact record it creates opportunity again

i have created recursive class below

how do i write into trigger helper class or trigger or both to run the recursive class? i'm trying to use  if(checkRecursive.runOnce()) but i dont know where to add it?
public Class checkRecursive{
    private static boolean run = true;
    public static boolean runOnce(){
    if(run){
     run=false;
     return true;
    }else{
        return run;
    }
    }
}


 
trigger easycontacttrigger on Contact (before insert, after insert, before update, after update, before delete, after delete, after undelete){
    
if(Trigger.isUpdate  && Trigger.isAfter){
    
    

easycontacttriggerhelper.sellercon(Trigger.new);
easycontacttriggerhelper.buyerconConveyancy(Trigger.new);
easycontacttriggerhelper.buyerconMortgage(Trigger.new);
easycontacttriggerhelper.buyerconhomebuyerreport(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchgas(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchwater(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchelec(Trigger.new);
easycontacttriggerhelper.buyerconremovals(Trigger.new);
easycontacttriggerhelper.buyercongassafetycheck(Trigger.new);
easycontacttriggerhelper.buyerconpattest(Trigger.new);
easycontacttriggerhelper.buyerconaffiliates(Trigger.new);



}
    

else if(Trigger.isinsert && Trigger.isafter){
easycontacttriggerhelper.sellercon(Trigger.new);
easycontacttriggerhelper.buyerconConveyancy(Trigger.new);
easycontacttriggerhelper.buyerconMortgage(Trigger.new);
easycontacttriggerhelper.buyerconhomebuyerreport(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchgas(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchwater(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchelec(Trigger.new);
easycontacttriggerhelper.buyerconremovals(Trigger.new);
easycontacttriggerhelper.buyercongassafetycheck(Trigger.new);
easycontacttriggerhelper.buyerconpattest(Trigger.new);
easycontacttriggerhelper.buyerconaffiliates(Trigger.new);








}

    if(Trigger.isinsert && Trigger.isbefore){
        
easycontacttriggerhelper.contactuserfields(Trigger.new);        
        
    }
if(Trigger.isupdate && Trigger.isbefore){
        
easycontacttriggerhelper.contactuserfields(Trigger.new);        
        
    }

    
}

part of thehelper class below:
public static void sellercon(list<Contact> cons) {
    
   
    
list<Easy_Opportunity__c> opplist = new list <Easy_Opportunity__c>();

recordtype[] tt = [Select  r.Id, r.SobjectType, r.Name From RecordType r where sobjecttype ='Easy_Opportunity__c' and Name = 'Residential Sales'];

for(Contact con : cons){



if(  con.Stage__c == 'Lead' && con.contacttype__c != null  && con.contacttype__C.contains('Seller' ) ){

Easy_Opportunity__c newopp = new Easy_Opportunity__c ();



            
            
            newopp.ownerid = con.allocated_user__c;
            newopp.name = 'Market Appraisal'; 
            newopp.account_name__c = con.accountid;
            newopp.CurrencyIsoCode = con.currencyisocode;
            newopp.stage__c = 'New';
            newopp.recordtypeid =  tt[0].Id;
            newopp.Contact_Name__c = con.id;
            newopp.Close_Date__c = Date.today().addDays(2);
            
            
            

            opplist.add(newopp);

   insert opplist; 

List<Product__c> Pd = (List<Product__c>) System.Json.deserialize('[{"attributes":{"type":"Product__c"},"Recordtype.name":"Residential Sales","Name":"Market Appraisal","Sale_Price__c":"111.00"}]', List<Product__c>.class);
    for (Product__c eachProd : Pd)
 eachProd.Easy_Opportunity__c = opplist[0].id;
    
insert Pd;
    
   
 }
 }

}

 
@Karanraj@Karanraj
You have to add in the trigger if condition
 
trigger easycontacttrigger on Contact (before insert, after insert, before update, after update, before delete, after delete, after undelete){
    
if(Trigger.isUpdate  && Trigger.isAfter && checkRecursive.runOnce()){
    
    

easycontacttriggerhelper.sellercon(Trigger.new);
easycontacttriggerhelper.buyerconConveyancy(Trigger.new);
easycontacttriggerhelper.buyerconMortgage(Trigger.new);
easycontacttriggerhelper.buyerconhomebuyerreport(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchgas(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchwater(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchelec(Trigger.new);
easycontacttriggerhelper.buyerconremovals(Trigger.new);
easycontacttriggerhelper.buyercongassafetycheck(Trigger.new);
easycontacttriggerhelper.buyerconpattest(Trigger.new);
easycontacttriggerhelper.buyerconaffiliates(Trigger.new);



}
    

else if(Trigger.isinsert && Trigger.isafter && checkRecursive.runOnce()){
easycontacttriggerhelper.sellercon(Trigger.new);
easycontacttriggerhelper.buyerconConveyancy(Trigger.new);
easycontacttriggerhelper.buyerconMortgage(Trigger.new);
easycontacttriggerhelper.buyerconhomebuyerreport(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchgas(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchwater(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchelec(Trigger.new);
easycontacttriggerhelper.buyerconremovals(Trigger.new);
easycontacttriggerhelper.buyercongassafetycheck(Trigger.new);
easycontacttriggerhelper.buyerconpattest(Trigger.new);
easycontacttriggerhelper.buyerconaffiliates(Trigger.new);








}

    if(Trigger.isinsert && Trigger.isbefore && checkRecursive.runOnce()){
        
easycontacttriggerhelper.contactuserfields(Trigger.new);        
        
    }
if(Trigger.isupdate && Trigger.isbefore&& checkRecursive.runOnce()){
        
easycontacttriggerhelper.contactuserfields(Trigger.new);        
        
    }

    
}

 
Salesforce Admin 110Salesforce Admin 110
thanks for your input but that didn't work, the opps get created a second time still after an edit/save to contact record
Salesforce Admin 110Salesforce Admin 110
i have written another class:
public class Constants {
public static final boolean disabletrigger = false;
}
and in trigger i have added
 
if(Trigger.isUpdate  && Trigger.isAfter && !Constants.disabletrigger)

now somehow i need to close off trigger by
 
Constants.disabletrigger= true;

but i dont know where to write this
 
@Karanraj@Karanraj
Can you add system.debug statement in your code to check how many times it get called 
System.debug('Static Variable' + checkRecursive.runOnce());
Amit Chaudhary 8Amit Chaudhary 8
Please check below post. How to resolve issue.
http://amitsalesforce.blogspot.in/2015/03/how-to-stop-recursive-trigger-in.html

Apex Class with Static Variable
public class ContactTriggerHandler
{
     public static Boolean isFirstTime = true;
}
Trigger Code
trigger easycontacttrigger on Contact (before insert, after insert, before update, after update, before delete, after delete, after undelete)
{
    
	if(Trigger.isAfter && ContactTriggerHandler.isFirstTime )
	{
		if( Trigger.isUpdate )
		{
			easycontacttriggerhelper.sellercon(Trigger.new);
			easycontacttriggerhelper.buyerconConveyancy(Trigger.new);
			easycontacttriggerhelper.buyerconMortgage(Trigger.new);
			easycontacttriggerhelper.buyerconhomebuyerreport(Trigger.new);
			easycontacttriggerhelper.buyerconutilityswitchgas(Trigger.new);
			easycontacttriggerhelper.buyerconutilityswitchwater(Trigger.new);
			easycontacttriggerhelper.buyerconutilityswitchelec(Trigger.new);
			easycontacttriggerhelper.buyerconremovals(Trigger.new);
			easycontacttriggerhelper.buyercongassafetycheck(Trigger.new);
			easycontacttriggerhelper.buyerconpattest(Trigger.new);
			easycontacttriggerhelper.buyerconaffiliates(Trigger.new);
		}
		else if(Trigger.isinsert)
		{
			easycontacttriggerhelper.sellercon(Trigger.new);
			easycontacttriggerhelper.buyerconConveyancy(Trigger.new);
			easycontacttriggerhelper.buyerconMortgage(Trigger.new);
			easycontacttriggerhelper.buyerconhomebuyerreport(Trigger.new);
			easycontacttriggerhelper.buyerconutilityswitchgas(Trigger.new);
			easycontacttriggerhelper.buyerconutilityswitchwater(Trigger.new);
			easycontacttriggerhelper.buyerconutilityswitchelec(Trigger.new);
			easycontacttriggerhelper.buyerconremovals(Trigger.new);
			easycontacttriggerhelper.buyercongassafetycheck(Trigger.new);
			easycontacttriggerhelper.buyerconpattest(Trigger.new);
			easycontacttriggerhelper.buyerconaffiliates(Trigger.new);
		}
		ContactTriggerHandler.isFirstTime = false;
	}
	else if(Trigger.isbefore )
	{
		// No need to add check on before 
		if(Trigger.isinsert )
		{
			easycontacttriggerhelper.contactuserfields(Trigger.new);        
		}
		if(Trigger.isupdate )
		{
			easycontacttriggerhelper.contactuserfields(Trigger.new);        
		}
	}	
}
Please let us know if this will help you