trigger AccountSampleTrigger on Account (before insert, after insert, before update, after update, before delete, after delete, after undelete) {
new AccountSampleTriggerHandler().debug(false).run();
}
Sample Handler
/**
* @description A sample Account trigger handler, with some comments
*
* @author David Schach
* @since 2021
* @see AccountSampleTriggerHandlerTest
*/
public without sharing class AccountSampleTriggerHandler extends TriggerHandler {
private List<Account> newRecords;
private List<Account> oldRecords;
private Map<Id, Account> newRecordsMap;
private Map<Id, Account> oldRecordsMap;
public AccountSampleTriggerHandler() {
super('AccountSampleTriggerHandler');
this.newRecords = (List<Account>)Trigger.new;
this.oldRecords = (List<Account>)Trigger.old;
this.newRecordsMap = (Map<Id, Account>)Trigger.newMap;
this.oldRecordsMap = (Map<Id, Account>)Trigger.oldMap;
}
public override void beforeInsert(){
method1();
method2();
TriggerHandler.clearAllBypass();
}
public override void beforeUpdate(){
method2();
}
public override void afterInsert(){
TriggerHandler.bypass('ContactTriggerHandler');
updateContacts();
TriggerHandler.clearBypass('ContactTriggerHandler');
}
public override void afterUpdate(){
TriggerHandler.bypass('CaseSampleTriggerHandler');
/* do something */
TriggerHandler.clearAllBypasses();
}
//public override void beforeDelete(){}
//public override void afterDelete(){}
//public override void afterUndelete(){}
//public override void andFinally(){}
private void method1(){
for(Account a : newRecords){
a.Name = a.Name.toUpperCase();
}
}
private void method2(){
for(Account a : newRecords){
a.Name = a.Name.toLowerCase();
}
}
/**
* Try to keep all updates on other objects in a single DML statement
* @author Author Name
*/
private void updateContacts(){
List<Contact> acctContacts = [SELECT Id FROM Contact WHERE AccountId IN :newRecordsMap.keyset()];
update acctContacts;
}
}