Skip to main content The Trailblazer Community will be unavailable from 2/1/2025 to 2/2/2025. Please plan your activities accordingly.
I create atfter update trigger on Account object.it takes all the contacts from account object and update the contact mailing Address,I create another after update trigger on Contact object.it monitor the last contact update.I got recursive .my question is ,what kind of situation recursive trigger occurs,why we use static lock.static lock use for both trigger ?or any one ?

here my code:

trigger AccountRecursiveTrigger on Account (after insert,after update) {

    if(checkRecursive.isFutureUpdate) {

        checkRecursive.isFutureUpdate=false;

    List<Contact> updateContact=new List<Contact>();

    List<Account> accounts=new List<Account>();

    accounts=[select id,Name,BillingStreet,BillingCity,BillingCountry,

              (select id,FirstName,LastName,MailingStreet,MailingCity,MailingCountry from Contacts) from Account where id IN:trigger.new];

    system.debug('cc::'+accounts);

    for(Account acc:accounts){

        for(Contact con:acc.Contacts){

            

             con.MailingStreet=acc.BillingStreet;

             con.MailingCity=acc.BillingCity;

            con.MailingCountry=acc.BillingCountry;

            updateContact.add(con);

            

        }

        

    }

             

    update updateContact;

     

         

    }

}

trigger ContactRecursiveTrigger on Contact (after insert,after update) {

     System.debug('afterif::'+checkRecursive.isFutureUpdate);

    //if(checkRecursive.isFutureUpdate=true) {

        System.debug('afterif::'+checkRecursive.isFutureUpdate);

    Map<id,Account> updateAccount=new Map<id,Account>();

    for(Contact con:trigger.new){

        if(con.AccountId !=null){

            

            Account acc=new Account(id=con.AccountId,Contact_Last_Updates__c=system.now());

            updateAccount.put(con.AccountId, acc);

        }

        

    }

    System.debug('valuess:'+updateAccount.values());

       // checkRecursive.isFutureUpdate=false;

    update updateAccount.values();

         System.debug('change::'+checkRecursive.isFutureUpdate);

        

//}

}

 
2 answers
  1. Mar 2, 2016, 12:24 PM
    Please check below post for same

    1) http://amitsalesforce.blogspot.in/2015/03/how-to-stop-recursive-trigger-in.html

    Problem :-  

    1) Many Developers face recursive trigger , or recursive update trigger. For example in 'after update' trigger, Developer is performing update operation and this lead to recursive call.

    2) You want to write a trigger that creates a new record ; however, that record may then cause another trigger to fire, which in turn causes another to fire, and so on. 

     

    Solution :-

    you can create a class with a static Boolean variable with default value true. In the trigger, before executing your code keep a check that the variable is true or not. Once you check make the variable false.

     
Loading
0/9000