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 

need to stop this code firing twice after update

i have tried a couple of things but no success........need to stop the duplicate opps after updates.....pulling my hair out

 
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);

    
    


       
}  

if(Trigger.isinsert && Trigger.isafter){
    
easycontacttriggerhelper.sellercon2 (Trigger.new);
easycontacttriggerhelper.buyerconConveyancy2(Trigger.new);
easycontacttriggerhelper.buyerconMortgage2(Trigger.new);
easycontacttriggerhelper.buyerconhomebuyerreport2(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchgas2(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchwater2(Trigger.new);
easycontacttriggerhelper.buyerconutilityswitchelec2(Trigger.new);
easycontacttriggerhelper.buyerconremovals2(Trigger.new);
easycontacttriggerhelper.buyercongassafetycheck2(Trigger.new);
easycontacttriggerhelper.buyerconpattest2(Trigger.new);
easycontacttriggerhelper.buyerconaffiliates2(Trigger.new);








}

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

    
}


 
public with sharing class easycontacttriggerhelper {

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.containsany('Seller Residential') ) {


        
        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);

 
    
   
 }
 }
 //outsideforloop  
  //
  if(oppList.size() > 0){
    insert opplist; 
  
list<Product__c> pdlist = new list <Product__c>();
recordtype[] aa = [Select  r.Id, r.SobjectType, r.Name From RecordType r where sobjecttype 

='Product__c' and Name = 'Residential Sales'];
for(Easy_Opportunity__c eachopp:opplist){
Product__c newpd = new Product__c();

newpd.name = 'Market Appraisal';
newpd.Sale_Price__c = 0.00;
newpd.recordtypeid = aa[0].id;
newpd.Easy_Opportunity__c = eachopp.id;

pdlist.add(newpd);


}

insert pdlist;

          
          
 
    

  } 
    
}
}

 
pconpcon
In your easycontacttriggerhelper class you'll want to create a static boolean that you can reference to stop the loop.
 
public with sharing class easycontacttriggerhelper {
    public static Boolean hasExecuted = false;

    // Rest of code
}

Then you'd update your trigger like
trigger easycontacttrigger on Contact (
    before insert,
    after insert,
    before update,
    after update,
    before delete,
    after delete,
    after undelete
){
    if (!easycontacttriggerhelper.hasExecuted) {
        easycontacttriggerhelper.hasExecuted = true;

        // Rest of code
    }
}

The static's lifetime is the life of the transaction so when you set it in your first trigger run it will stay set until the transaction is complete.