In this article, I’ll demonstrate how to showcase a custom roll-up summary on the Account object.
Before delving into the code, start by creating a custom field of number type on the Account object.
Associated_Contact_Count__c
Our objective is to display the count of all contacts associated with a specific account within the field named “Associated_Contact_Count__c”. This functionality should encompass various events like insertions, updates, deletions, and undeletions.
To achieve this, we’ve developed a trigger on the Contact object, incorporating context variables. However, this implementation is now surpassing the governor limits.
Retrieve all Accounts along with their associated contacts using the query:
Query = [SELECT Id, Associated_Contact_Count__c, (SELECT Id FROM Contacts) FROM Account]
Below is the code that flawlessly implements the same concept across all events.
Code:
trigger customRollupTrigger on Contact (after insert, after update, after delete, after undelete) { Set<Id> accountIds = new Set<Id>(); system.debug('newData'+ trigger.old); if(trigger.isInsert || trigger.isUpdate || trigger.isUndelete){ system.debug('test1++'+trigger.new); for(Contact con:trigger.new){ if(con.AccountId != null){ accountIds.add(con.AccountId); } } } if(trigger.isAfter && (trigger.isUpdate || trigger.isDelete)){ system.debug('test2++'+trigger.old); for(Contact con:trigger.old){ if(con.AccountId != null){ accountIds.add(con.AccountId); } } } if(!accountIds.isEmpty()){ List<Account> accList = new List<Account>(); for(Account acc:[SELECT Id, Associated_Contact_Count__c, (SELECT Id FROM Contacts) FROM Account WHERE Id IN : accountIds]) { acc.Associated_Contact_Count__c=acc.contacts.size(); accList.add(acc); system.debug(acc.Associated_Contact_Count__c); } update accList; } }