This trigger tracks and updates the total number of Partner Cases and Customer Cases linked to an Account when new Cases are created.
Practice scenarios like this here: YouTube playlist.
Solution:
trigger CaseTrigger on Case (after insert) {
if(Trigger.isInsert){
if(Trigger.isAfter){
CaseTriggerHandler.countCases(Trigger.new);
}
}
}
public class CaseTriggerHandler{ public static void
countCases(List cList){
List<Account> accList= new List<Account>();
Set<Id> idSet= new Set<Id>();
Id partnerCaseRecordTypeId = [Select Id From RecordType Where
DeveloperName = ‘Partner_Case’].Id;//1.way to do with
DeveloperName which is API name
Id customerCaseRecordTypeId=[Select Id From RecordType Where
Name = ‘Customer Case’].Id;//2.way to do with Name for(Case c:cList){
if(c.AccountId!=null){ idSet.add(c.AccountId);
}
}
for(Account acc:[SELECT
Id,Total_Case__c,Customer_Case__c,Partner_Case__c,(SELE
CT Id,RecordTypeId FROM Cases) FROM Account WHERE Id
IN:idSet]){
decimal countPartner=0; decimal countCustomer=0;
for(Case c:acc.Cases){
if(c.RecordTypeId==partnerCaseRecordTypeId){
countPartner++;
}else if(c.RecordTypeId==customerCaseRecordTypeId){ countCustomer++;
}
}
acc.Customer_Case__c=countCustomer;
acc.Partner_Case__c=countPartner;
acc.Total_Case__c=acc.Customer_Case__c+acc.Partner_Case
__c;
accList.add(acc);
}
if(!accList.isEmpty()){
update accList;
}
}
}