Thursday, August 2, 2012

Cyclic Trigger Solution:

Cyclic Trigger Solution:
This example shows how to use trigger properly instead of firing every time by checking some entry criteria.

trigger TriggerWithoutEntryCriteria on Account (after update)      {                  for(Account acc : Trigger.New)             {                    //Trigger Action Logic                 List<Contact> listCon = [Select Fax from Contact where AccountId =: acc.id];                       for(Contact con : listCon)                     {                         con.Fax = acc.Fax;                     }                 update listCon;                             }     }
trigger TriggerWithEntryCriteria on Account (after update){         Integer index = 0;                for(Account acc : Trigger.New){                              //Check entry criteria                 if(acc.Fax != Trigger.Old[index].Fax){                                     List<Contact> listCon = [Select Fax from Contact where AccountId =: acc.id];                                for(Contact con:listCon){                                                                con.Fax = acc.Fax;                              }                          update listCon;                         }                 index++;             }     }
Now it is time to take a look at your debug logs and find the dml and soql statements as shown below

25.0 APEX_CODE,DEBUG;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WORKFLOW,INFO
20:58:30.106 (106130000)|EXECUTION_STARTED
20:58:30.106 (106172000)|CODE_UNIT_STARTED|[EXTERNAL]|01qE0000000B3a9|TriggerWithoutEntryCriteria on Account trigger event AfterUpdate for [001E000000KBqWz]
20:58:30.107 (107644000)|SYSTEM_METHOD_ENTRY|[4]|LIST<Account>.iterator()
20:58:30.107 (107928000)|SYSTEM_METHOD_EXIT|[4]|LIST<Account>.iterator()
20:58:30.107 (107964000)|SYSTEM_METHOD_ENTRY|[4]|system.ListIterator.hasNext()
20:58:30.107 (107998000)|SYSTEM_METHOD_EXIT|[4]|system.ListIterator.hasNext()
20:58:30.108 (108498000)|SOQL_EXECUTE_BEGIN|[7]|Aggregations:0|select Fax from Contact where AccountId = :tmpVar1
20:58:30.138 (138962000)|SOQL_EXECUTE_END|[7]|Rows:3
20:58:30.139 (139118000)|SYSTEM_METHOD_ENTRY|[8]|LIST<Contact>.iterator()
20:58:30.139 (139269000)|SYSTEM_METHOD_EXIT|[8]|LIST<Contact>.iterator()
20:58:30.139 (139297000)|SYSTEM_METHOD_ENTRY|[8]|system.ListIterator.hasNext()
20:58:30.139 (139315000)|SYSTEM_METHOD_EXIT|[8]|system.ListIterator.hasNext()
20:58:30.139 (139430000)|SYSTEM_METHOD_ENTRY|[8]|system.ListIterator.hasNext()
20:58:30.139 (139447000)|SYSTEM_METHOD_EXIT|[8]|system.ListIterator.hasNext()
20:58:30.139 (139501000)|SYSTEM_METHOD_ENTRY|[8]|system.ListIterator.hasNext()
20:58:30.139 (139517000)|SYSTEM_METHOD_EXIT|[8]|system.ListIterator.hasNext()
20:58:30.139 (139568000)|SYSTEM_METHOD_ENTRY|[8]|system.ListIterator.hasNext()
20:58:30.139 (139590000)|SYSTEM_METHOD_EXIT|[8]|system.ListIterator.hasNext()
20:58:30.139 (139654000)|DML_BEGIN|[12]|Op:Update|Type:Contact|Rows:3
20:58:30.186 (186374000)|DML_END|[12]
20:58:30.186 (186443000)|SYSTEM_METHOD_ENTRY|[4]|system.ListIterator.hasNext()
20:58:30.186 (186461000)|SYSTEM_METHOD_EXIT|[4]|system.ListIterator.hasNext()
20:58:30.193 (186488000)|CUMULATIVE_LIMIT_USAGE
20:58:30.193|LIMIT_USAGE_FOR_NS|(default)|
  Number of SOQL queries: 1 out of 100
  Number of query rows: 3 out of 50000
  Number of SOSL queries: 0 out of 20
  Number of DML statements: 1 out of 150
  Number of DML rows: 3 out of 10000
  Number of script statements: 5 out of 200000
  Maximum heap size: 0 out of 6000000
  Number of callouts: 0 out of 10
  Number of Email Invocations: 0 out of 10
  Number of fields describes: 0 out of 100
  Number of record type describes: 0 out of 100
  Number of child relationships describes: 0 out of 100
  Number of picklist describes: 0 out of 100
  Number of future calls: 0 out of 10

20:58:30.193|CUMULATIVE_LIMIT_USAGE_END

20:58:30.186 (186541000)|CODE_UNIT_FINISHED|TriggerWithoutEntryCriteria on Account trigger event AfterUpdate for [001E000000KBqWz]
20:58:30.186 (186550000)|EXECUTION_FINISHED

25.0 APEX_CODE,DEBUG;APEX_PROFILING,INFO;CALLOUT,INFO;DB,INFO;SYSTEM,DEBUG;VALIDATION,INFO;VISUALFORCE,INFO;WORKFLOW,INFO
21:11:58.062 (62402000)|EXECUTION_STARTED
21:11:58.062 (62445000)|CODE_UNIT_STARTED|[EXTERNAL]|01qE0000000B3aE|TriggerWithEntryCriteria on Account trigger event AfterUpdate for [001E000000KBqWz]
21:11:58.064 (64002000)|SYSTEM_METHOD_ENTRY|[3]|LIST<Account>.iterator()
21:11:58.064 (64372000)|SYSTEM_METHOD_EXIT|[3]|LIST<Account>.iterator()
21:11:58.064 (64409000)|SYSTEM_METHOD_ENTRY|[3]|system.ListIterator.hasNext()
21:11:58.064 (64450000)|SYSTEM_METHOD_EXIT|[3]|system.ListIterator.hasNext()
21:11:58.064 (64630000)|SYSTEM_METHOD_ENTRY|[3]|system.ListIterator.hasNext()
21:11:58.064 (64647000)|SYSTEM_METHOD_EXIT|[3]|system.ListIterator.hasNext()
21:11:58.154 (64675000)|CUMULATIVE_LIMIT_USAGE
21:11:58.154|LIMIT_USAGE_FOR_NS|(default)|
  Number of SOQL queries: 0 out of 100
  Number of query rows: 0 out of 50000
  Number of SOSL queries: 0 out of 20
  Number of DML statements: 0 out of 150
  Number of DML rows: 0 out of 10000
  Number of script statements: 3 out of 200000
  Maximum heap size: 0 out of 6000000
  Number of callouts: 0 out of 10
  Number of Email Invocations: 0 out of 10
  Number of fields describes: 0 out of 100
  Number of record type describes: 0 out of 100
  Number of child relationships describes: 0 out of 100
  Number of picklist describes: 0 out of 100
  Number of future calls: 0 out of 10

21:11:58.154|CUMULATIVE_LIMIT_USAGE_END

21:11:58.064 (64736000)|CODE_UNIT_FINISHED|TriggerWithEntryCriteria on Account trigger event AfterUpdate for [001E000000KBqWz]
21:11:58.064 (64745000)|EXECUTION_FINISHED

No comments:

Post a Comment