Here is a sample Rollup Summary calculation trigger for Lookup relationship. In below example I’m using Account object as parent and Contact object as child.
I’m updating Account object Account record field Number_of_Contacts__c with Count of all related Contact records.
Apex Trigger:
trigger ContactTrigger on Contact (after insert, after update, after delete, after undelete) {
Set<Id> accountIds = new Set<Id>();
if(trigger.isInsert || trigger.isUpdate || trigger.isUndelete){
for(Contact con:trigger.new){
if(con.AccountId != null){
accountIds.add(con.AccountId);
}
}
}
if(trigger.isUpdate || trigger.isDelete){
for(Contact con:trigger.old){
if(con.AccountId != null){
accountIds.add(con.AccountId);
}
}
}
if(!accountIds.isEmpty()){
List<Account> accList = [SELECT Id, Number_of_Contacts__c, (SELECT Id FROM Contacts)
FROM Account WHERE Id IN : accountIds];
if(!accList.isEmpty()){
List<Account> updateAccList = new List<Account>();
for(Account acc:accList){
Account objAcc = new Account(Id = acc.Id, Number_of_Contacts__c = acc.Contacts.size());
updateAccList.add(objAcc);
}
if(!updateAccList.isEmpty()){
update updateAccList;
}
}
}
}
Here is a sample Rollup Summary calculation trigger for Lookup relationship. In below example I’m using Account object as parent and Contact object as child.
I’m updating Account object record field Total__c with Sum of all related Contact object records Amount__c field value.
Apex Trigger:
trigger RollUpFromChildToParent on Contact (after insert, after update, after delete, after undelete) {
Set<Id> accountIds = new Set<Id>();
if(Trigger.isInsert || Trigger.isUpdate || Trigger.isUndelete){
for(Contact con : Trigger.new){
if(con.AccountId != null){
accountIds.add(con.AccountId);
}
}
}
if(Trigger.isDelete || Trigger.isUpdate){
for(Contact con : Trigger.old){
if(con.AccountId != null){
accountIds.add(con.AccountId);
}
}
}
List<Account> accList = new List<Account>();
for(AggregateResult aRes : [SELECT AccountId, SUM(Amount__c) Total FROM Contact WHERE AccountId IN :accountIds GROUP BY AccountId]) {
accList.add(new Account(Id = (Id)aRes.get('AccountId'), Total__c = (Decimal)aRes.get('Total')));
}
try{
Update accList;
}catch(DmlException de){
System.debug(de);
}
}
This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish.AcceptReject