Trigger Framework:
===================
We can develop code by putting code in trigger and using handler classes. Why
should I go with Trigger Framework?
-> As we know while writing the code we need to follow all best practices. Trigger
framework helps you to confirm best practices
that salesforce does provide.
-> Assure order of execution.
-> It prevents the recursion.
Trigger Interface -
------------------
public Interface TrggerInterface {
void beforeInsert(List<sObject> newRecordList);
void afterInsert(List<sObject> newRecordList, Map<Id,sObject> newMapRecord);
void beforeUpdate(Map<Id,sObject> newMapRecord, Map<Id,sObject> oldMapRecord);
void afterUpdate(Map<Id,sObject> newMapRecord, Map<Id,sObject> oldMapRecord);
void beforeDelete(List<sObject> oldRecordList, Map<Id,sObject> oldMapRecord);
void afterDelete(List<sObject> oldRecordList);
void afterUndelete(List<sObject> newRecordList, Map<Id,sObject> newMapRecord);
}
Trigger Dispatcher -
--------------------
public class DispatcherTrigger {
public static void run(TrggerInterface handler, [Link]
operationMethodType){
switch on operationMethodType{
when BEFORE_INSERT{
[Link]([Link]);
}
when AFTER_INSERT{
[Link]([Link], [Link]);
}
when BEFORE_UPDATE{
[Link]([Link], [Link]);
}
when AFTER_UPDATE{
[Link]([Link], [Link]);
}
when BEFORE_DELETE{
[Link]([Link], [Link]);
}
when AFTER_DELETE{
[Link]([Link]);
}
when AFTER_UNDELETE{
[Link]([Link], [Link]);
}
}
}
}
Contact Helper :
--------------------
public class ContactHelper implements TrggerInterface{
public static void beforeInsert(List<sObject> newRecordList){
public static void afterInsert(List<sObject> newRecordList, Map<Id,sObject>
newMapRecord) {
List<Contact> conList = (List<Contact>)newRecordList;
[Link](conList);
}
public static void beforeUpdate(Map<Id,sObject> newMapRecord, Map<Id,sObject>
oldMapRecord){
Map<Id,Contact> newMapContact = (Map<Id,Contact>) newMapRecord;
Map<Id,Contact> oldMapContact = (Map<Id,Contact>) oldMapRecord;
[Link](newMapContact,
oldMapContact);
}
public static void afterUpdate(Map<Id,sObject> newMapRecord, Map<Id,sObject>
oldMapRecord){
public static void beforeDelete(List<sObject> oldRecordList, Map<Id,sObject>
oldMapRecord){
public static void afterDelete(List<sObject> oldRecordList){
public static void afterUndelete(List<sObject> newRecordList, Map<Id,sObject>
newMapRecord){
}
}
Contact Handler
-------------------
public class ContactTriggerHandler {
public static final String CLASS_NAME = 'ContactTriggerHandler';
/* public static void contactIdsInsertingForAccount(List<Contact> conList){
Map<Id,List<String>> accMap = new Map<Id,List<String>>(); // A1
// accountId - {12345,12345,12345}
for(Integer i =1; i<=5; i++){
for(Contact conObj : conList){
if([Link]([Link])){
[Link]([Link]).add([Link]);
[Link]('accMap 1' + accMap);
}else{
List<String> conId = new List<String>();
[Link]([Link]);
[Link]([Link],conId); // A1 - c1,c2,c3
[Link]('accMap 2' + accMap);
}
}
}
if([Link]() > 0 && ![Link]()){
List<Account> accList = new List<Account>();
for(Account accObj : [Select Id, Contact_Ids__c From Account Where Id
IN :[Link]()]){
if(accObj.Contact_Ids__c != Null){
accObj.Contact_Ids__c = ',';
accObj.Contact_Ids__c = [Link]([Link]([Link]));
[Link](accObj);
[Link]('Contact_Ids 1' + accObj.Contact_Ids__c);
}else{
accObj.Contact_Ids__c += [Link]([Link]);
[Link]('Contact_Ids 2' + accObj.Contact_Ids__c);
[Link](accObj);
}
}
if([Link]() > 0 && ![Link]()){
update accList;
}
}
}
public static void preventDeleteContact(List<Contact> conList){
for(Contact con : conList){
if([Link] != Null){
[Link]('Contact can not be deleted.');
}
}
}*/
public static void preventIsPrimaryContactForAccount(List<Contact> conList){
try{
Set<String> accIdSet = new Set<String>();
for(Contact conObj : conList){
if([Link]([Link]) && conObj.IsPrimary__c ==
True){
[Link]([Link]);
}
}
if([Link]() > 0 && ![Link]()){
Map<Id,Contact> conMap = new Map<Id,Contact>();
for(Contact con : [Select Id, Name, IsPrimary__c, AccountId From
Contact Where IsPrimary__c = True And AccountId IN :accIdSet]){
if([Link]([Link])){
[Link]([Link], con);
}
}
if([Link]() > 0 && ![Link]()){
for(Contact con : conList){
if([Link] != Null && con.IsPrimary__c == True &&
[Link]([Link])){
con.IsPrimary__c.addError([Link].Duplicate_Is_Primary_Error);
}
}
}
}
}catch([Link] ex){
[Link](ex, CLASS_NAME);
}
}
public static void generateContactSafeIdNumber(Map<Id,Contact> newMapCon,
Map<Id,Contact> oldMapCon){
GenerateContactSafeId__c conSafeId =
GenerateContactSafeId__c.getValues('Safe Id Number');
[Link]('conSafeId' + conSafeId);
Integer contactSafeId = [Link](conSafeId.Contact_Safe_Id__c);
// GenerateContactSafeId__c{id =111, contact_safe_id=12233, lasy}
Map<Id, Contact> conMap = new Map<Id, Contact>();
for(Contact con :[Link]()){
if([Link] != Null && con.IsPrimary__c == True &&
con.Contact_Safe_Id__c == Null){
contactSafeId++;
con.Contact_Safe_Id__c = [Link](contactSafeId);
[Link]([Link], con);
}
}
conSafeId.Contact_Safe_Id__c = [Link](contactSafeId);
update conSafeId;
public static void countContactForAccount(List<Contact> contactList){
Set<Id> accIdSet = new Set<Id>();
for(Contact con : contactList){
if([Link]([Link]) && [Link] != Null){
[Link]([Link]);
}
}
if([Link]() > 0 && ![Link]()){
Map<Id, Account> accMap = new Map<Id, Account>();
for(AggregateResult result : [Select count(Id) conCount, AccountId From
Contact Where AccountId IN :accIdSet Group By AccountId]){
Account acc = new Account();
acc.No_of_Contacts__c = (Integer) [Link]('conCount');
[Link] = (Id) [Link]('AccountId');
[Link]([Link], acc);
}
if([Link]() > 0 && ![Link]()){
update [Link]();
}
}
}
/*public static void countContactForAccountWhenDelete(List<Contact>
contactList){
Set<Id> accIdSet = new Set<Id>();
for(Contact con : contactList){
if([Link] != Null){
[Link]([Link]);
}
}
if([Link]() > 0 && ![Link]()){
Map<Id, Account> accMap = new Map<Id, Account>();
for(AggregateResult result : [Select count(Id) conCount, AccountId From
Contact Where Id Not In :contactList And AccountId IN :accIdSet Group By
AccountId]){
Account acc = new Account();
acc.No_of_Contacts__c = (Integer) [Link]('conCount');
[Link] = (Id) [Link]('AccountId');
[Link]([Link], acc);
}
if([Link]() > 0 && ![Link]()){
update [Link]();
}
}
}
public static void whenContactInsert(List<Contact> contactList){
List<Contact> conList = new List<Contact>();
for(Contact con : contactList){
Contact conToBeCreated = new Contact();
[Link] = 'Test';
[Link] = 'Second';
[Link](conToBeCreated);
}
if([Link]() > 0 && ![Link]()){
insert conList;
}
}*/