Wednesday 11 March 2015

how to stop recursive trigger in salesforce

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.


 Apex Class with Static Variable

public class ContactTriggerHandler
{
     public static Boolean isFirstTime = true;
}


Trigger Code

trigger ContactTriggers on Contact (after update)
{
    Set<String> accIdSet = new Set<String>(); 
    if(ContactTriggerHandler.isFirstTime)
    {
        ContactTriggerHandler.isFirstTime = false;
         for(Contact conObj : Trigger.New)
  {
            if(conObj.name != 'Test') 
     {
                accIdSet.add(conObj.accountId);
            }
         }
   // any code here
    }
}


5 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. Do we need to create a test class as well for this

    ReplyDelete
  3. its a solution for one record update, what about bulk records?

    ReplyDelete
  4. what if the trigger runs for before and after event .
    If the before trigger runs the static variable will be changed already and then after triggers runs after trigger wont work ?

    ReplyDelete
  5. Thank you! This was extremely helpful.

    ReplyDelete