Show:            

SampleTriggerHandler

General Theme

Each object has a single trigger

Each trigger has a single handler

Handler Documentation


Sample Trigger


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;
  }
}


Credits

This trigger framework is from https://github.com/dschach/sfdc-trigger-framework which is based on Kevin O'Hara's framework https://github.com/kevinohara80/sfdc-trigger-framework