Hi All,
In this post we will discuss how does a trigger gets executed. This is very important to know to structure the trigger when there are many triggers on a sObject Type. Lets take a example of a simple class with a static varibale triggerEntryCount
In this post we will discuss how does a trigger gets executed. This is very important to know to structure the trigger when there are many triggers on a sObject Type. Lets take a example of a simple class with a static varibale triggerEntryCount
public class Constants { //Constant to keep track of entry in trigger public static Integer triggerEntryCount = 0; }
A trigger is written
trigger Test_TriggerEntry on Account ( after update , after insert , before insert , before update , after delete , before delete ) { Constants.triggerEntryCount = Constants.triggerEntryCount + 1; }
Now we will write a test class
private static testmethod void testTriggerEntry() { List<Account> listAccInsert = new List<Account>(); Account a = New Account(Name = 'TestAccountA'); listAccInsert.add(a); Account b = New Account(Name = 'TestAccountB'); listAccInsert.add(b); // insert list of accounts insert listAccInsert; system.debug('Trigger Entry Count : '+ Constants.triggerEntryCount); }
When we run the test class, system debug shows
Trigger Entry Count : 2
In this trigger entries were made for before insert and after insert.
Sequence for entry : before insert and after insert
Now we change test class a bit to check upsert event where two records are updated and one is inserted
private static testmethod void testTriggerEntry() { List<Account> listAccInsert = new List<Account>(); Account a = New Account(Name = 'TestAccountA'); listAccInsert.add(a); Account b = New Account(Name = 'TestAccountB'); listAccInsert.add(b); // insert list of accounts insert listAccInsert; //Initialize triger count to zero Constants.triggerEntryCount = 0; Contact c = new Contact( LastName = ' Test Contat ' , AccountId = a.id , Email = 'testTrigger@testMethod.com'); insert c; System.debug(' ******** Start Debug ********* '); List<Account> listAccUpsert = new List<Account>(); a.Name = 'New Test Account A'; b.Name = 'New Test Account B'; listAccUpsert.add(a); listAccUpsert.add(b); Account a1 = New Account(Name = 'TestAccount'); listAccUpsert.add(a1); //upsert list of accounts upsert listAccUpsert; system.debug('Trigger Entry Count : '+ Constants.triggerEntryCount); }This time in system debug :
Trigger Entry Count : 4
Sequence for entry : Before Insert , After Insert , Before Update , After Update
Now if we have triggers on a sObject for all of these events in that case we need to structure our code in a way that only appropriate code gets executed in a trigger entry.
Structure trigger like this :
trigger Test_Trigger on Account ( after update , after insert , before insert , before update , after delete , before delete ) { if (Trigger.isBefore) { if (Trigger.isInsert) { // Logic to be executed for Before Insert } if (Trigger.isupdate) { // Logic to be executed for Before Update } if (Trigger.isDelete) { // Logic to be executed for Before Delete } } if (Trigger.isAfter) { if (Trigger.isInsert) { // Logic to be executed for After Insert } if (Trigger.isupdate) { // Logic to be executed for After Update } if (Trigger.isDelete) { // Logic to be executed for After Delete } } }
In case you have same trigger logic for more then one trigger context
1)Use trigger context variables with logical operator OR ( "||" )
Or
2)Create a method for the logic and use that in the all the contexts where you want it to execute
and the writer may have his particular www.bestessaywriting.org/essay decision of technique. The brilliant key to great English paper written work is flexibility of composing.
ReplyDeletehttps://saglamproxy.com
ReplyDeletemetin2 proxy
proxy satın al
knight online proxy
mobil proxy satın al
T83