Use a static variable in an Apex class to avoid an infinite
loop. Static variables are local to the context of a Web request (or test method
during a call to runTests()), so all triggers that fire as a result of a
user's action have access to it.
Example:
Suppose there is a scenario where in one trigger perform update operation, which results in invocation of second trigger and the update operation in second trigger acts as triggering criteria for trigger one.
Solution:
Example:
Suppose there is a scenario where in one trigger perform update operation, which results in invocation of second trigger and the update operation in second trigger acts as triggering criteria for trigger one.
Solution:
Class:
public class Utility { public static boolean isFutureUpdate; }
Trigger:
trigger updateSomething on Account (after insert, after update) { /* This trigger performs its logic when the call is not from @future */ if(Utility.isFutureUpdate != true) { Set<Id> idsToProcess = new Se<Id>(); for(Account acct : trigger.new) { if(acct.NumberOfEmployees > 500) { idsToProcess.add(acct.Id); } } /* Sending Ids to @future method for processing */ futureMethods.processLargeAccounts(idsToProcess); } }
Class:
public class FutureMethods { @future public static void processLargeAccounts(Set<Id> acctIDs) { List<Account> acctsToUpdate = new List<Account>(); /* isFutureUpdate is set to true to avoid recursion */ Utility.isFutureUpdate = true; update acctsToUpdate; } }
No comments:
Post a Comment