function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Nishit MistryyyNishit Mistryyy 

Getting an error in case trigger while inserting the case(after insert case trigger is giving error)

CaseTrigger.txt
trigger CaseTrigger on Case (before update, After Insert, before insert,After update){
    //before Triggers
    if(Trigger.isBefore){
        //before insert
        if(Trigger.isInsert){
            CaseTriggerHandler.validateEmail(Trigger.New);
            CaseTriggerHandler.registerOrNot(Trigger.New);
            if(CaseTriggerHelper.isCaseInserted == false){
                CaseTriggerHandler.populateTATOnCase(Trigger.New);
                CaseTriggerHandler.populateEntitlementOnCase(Trigger.New);
                CaseTriggerHandler.getCaseCategories(Trigger.New,true);
                CaseTriggerHandler.validateCaseCreationWithinTAT(Trigger.New);
                CaseTriggerHandler.validateTATBreachedCaseCreation(Trigger.New);
                CaseTriggerHandler.populateEmailOnCase(Trigger.New);
                CaseTriggerHandler.complaintsproritycheck(Trigger.New);
            }
            
            //CTSTMetadataHandler.setPriorityOnCaseInsert(trigger.new);
        }
        
        //before update
        if(Trigger.isUpdate){
            if(CaseTriggerHelper.isCaseUpdated == false){
                CaseTriggerHandler.updateSTatusAndFlags(Trigger.New, Trigger.oldMap);
                CaseTriggerHandler.populateAccountandServicebranchOnCase(Trigger.New);
                CaseTriggerHandler.updateEscalationMails(Trigger.New);
                CaseTriggerHandler.autoCloseMilestone(Trigger.New);
                CaseTriggerHandler.populateEntitlementOnCase(Trigger.New);        
                CaseTriggerHandler.getCaseCategories(Trigger.New,false); 
                //CaseTriggerHandler.updateQueueAssignedDate(Trigger.new, false);
                CaseTriggerHandler.PopulateClosedBy(Trigger.New);
                CaseTriggerHandler.complaintsproritycheck(Trigger.New);
                if(CaseTriggerHelper.assignmentDetails == false){
                    CaseTriggerHandler.updateQueueAssignedDate(Trigger.New);
                }
            }
        }
    }
    //After triggers
    else if(Trigger.isAfter){
        //after insert
        if(Trigger.isInsert){

            if(CaseTriggerHelper.isCaseInserted == false){
                /**DON't REMOVE OR COMMENT THIS METHOD Added BY Pratap*/
                CaseTriggerHandler.createCaseCustomDetail(Trigger.new);
                 /**DON't REMOVE OR COMMENT THIS METHOD Added BY Pratap*/

                CaseTriggerHandler.postNonKYCUpdateAPI(Trigger.New);         
                CaseTriggerHandler.postContactUpdateAPI(Trigger.new, null);
                CaseTriggerHandler.populateLoanOnCase(Trigger.new);
                //Added by PJ date 12 Oct 23
                //CaseTriggerHandler.sendCaseCreationSMS(Trigger.New);
                //addded by PJ
                 CaseSMShandler.sendCaseCreationSMS(Trigger.new);
                 //Ended by PJ


                //CaseTriggerHandler.sendCaseCreationSMS(Trigger.New,'New');
                CaseTriggerHandler.complaintsproritycheck(Trigger.New);
                CaseTriggerHandler.updateTopManagementFlag(Trigger.newMap.keySet());
                //CaseTriggerHandler.caseOwnerAfterInsertHelper(Trigger.New);
                if(Boolean.valueOf(System.label.Run_csOutbondFlag)){
                    CaseTriggerHandler.csOutbondFlag(Trigger.New);
                }
            }
            CaseTriggerHandler.callCaseAssignment(Trigger.newMap);
        }
        
        //after update
        if(Trigger.isUpdate){
            if(CaseTriggerHelper.isCaseUpdated == false){
                CaseTriggerHandler.postNonKYCUpdateAPI(Trigger.New);    
                CaseTriggerHandler.populateLoanOnEmailMessageOfCase(Trigger.new, trigger.oldMap);
                CaseTriggerHandler.sendCaseCreationUpdSMS(Trigger.new,trigger.oldMap);
                //CaseTriggerHandler.sendCaseClosureSMS(Trigger.new,trigger.oldMap);
                //addded by PJ
                CaseSMShandler.sendCaseClosureSMS(Trigger.new,trigger.oldMap);
                //CaseSMShandler.sendCaseCreationSMSOnUpdate(Trigger.new,trigger.oldMap);
                 //Ended by PJ
                CaseTriggerHandler.sendDocOnEmail(Trigger.new);
                CaseTriggerHandler.caseARforPendingWithCustomer(Trigger.new, trigger.oldmap);
                CaseTriggerHandler.complaintsproritycheck(Trigger.New);
            }
            //CaseTriggerHandler.validateExcludedCase(Trigger.new, Trigger.oldMap);
            CaseTriggerHandler.vehicleUpdateAPIcall(Trigger.new, Trigger.oldMap);
            CaseTriggerHandler.postContactUpdateAPI(Trigger.new, Trigger.oldMap);
        }
    }
}

CaseTriggerHandler.apxc
public class CaseTriggerHandler {
public static Boolean isCaseInserted = false;
//Helper method to check priority of Complaints CTST.
    public static void complaintsproritycheck(List<Case> newCaseList){
        Id caseTypeGenericTemplate = Schema.SObjectType.Case.getRecordTypeInfosByName().get('Generic Template').getRecordTypeId();
        Map<Case, CaseCategoryMetadata__c> caseCategoriesMap = new Map<Case, CaseCategoryMetadata__c>();
        Set<String> caseCategorySet = new Set<String>();
        Set<String> categorySet = new Set<String>();
        Set<String> subcategorySet = new Set<String>();
        Set<String> subsubcategorySet = new Set<String>();
        Set<String> productTypeSet = new Set<String>();
        DateTime startDate = DateTime.newInstance(2023, 11, 16,12,0,0);
        
        String dynamicCMDQuery = '';
        
        for(Case caseRec : newCaseList){
            if(caseRec.Case_Category__c=='Complaint' && caseRec.RecordTypeId==caseTypeGenericTemplate){
                if(!String.isBlank(caseRec.Product_Type__c)){
                    productTypeSet.add(caseRec.Product_Type__c);
                }
                if(!String.isBlank(caseRec.Case_Category__c)){
                    caseCategorySet.add(caseRec.Case_Category__c);
                }
                if(!String.isBlank(caseRec.Category__c)){
                    categorySet.add(caseRec.Category__c);
                }
                if(!String.isBlank(caseRec.Sub_Category__c)){
                    subcategorySet.add(caseRec.Sub_Category__c);
                }
                if(!String.isBlank(caseRec.Sub_Sub_Category__c)){
                    subsubcategorySet.add(caseRec.Sub_Sub_Category__c);
                }
            } else{
                return;
            }

            
        }
        
        //Set<Case_Category_Metadata__mdt> caseCategoryCMDSet = new Set<Case_Category_Metadata__mdt>();
        Set<CaseCategoryMetadata__c> caseCategoryCMDSet = new Set<CaseCategoryMetadata__c>();
        if((productTypeSet.size()>0) &&
           (caseCategorySet.size()>0) &&
           (categorySet.size()>0) &&
           (subcategorySet.size()>0)
          ){
              dynamicCMDQuery += 'select Product_Type__c, Case_Category__c, Category__c, Sub_Category__c, Sub_Sub_Category__c, Escalation_2_Business_Days__c, Priority__c from CaseCategoryMetadata__c ';
              dynamicCMDQuery += 'where Product_Type__c IN: productTypeSet AND Case_Category__c IN: caseCategorySet AND Category__c IN: categorySet AND Sub_Category__c IN: subcategorySet AND isActive__c = true AND Priority__c=\'High\'';
              if(subsubcategorySet.size()>0){
                  dynamicCMDQuery += 'AND Sub_Sub_Category__c IN: subsubcategorySet';
              }
          }
        
        //List<Case_Category_Metadata__mdt> caseCategoryCMD = new List<Case_Category_Metadata__mdt>();
        List<CaseCategoryMetadata__c> caseCategoryCMD = new List<CaseCategoryMetadata__c>();
        if(!String.isBlank(dynamicCMDQuery)){
            caseCategoryCMD = Database.query(dynamicCMDQuery);   
        }
        System.debug('caseCategoryCMD: '+caseCategoryCMD); 
        if(!Test.isRunningTest()){
        for(Case caseRec : newCaseList){
            if(caseCategoryCMD.size() == 0){
                if(caseRec.CreatedDate > startDate){
                    caseRec.addError('Selected Category is not a part of the complaint case type');
                }
            }}    
        }

    }
public static void updateTopManagementFlag(Set<Id> newCasesids){
        List<case> caseListupdate = [select id, owner.name from case where id IN :newCasesids ];
        for(Case caseRec : caseListupdate){
            if(caseRec.Owner.name == 'Top Management Escalation bucket'){
                caseRec.Top_Management_Flag__c = 'Yes';
            }else{
                caseRec.Top_Management_Flag__c = 'No';
            }
        }
        update caseListupdate;
    }

Getting an below error
CaseTrigger: execution of AfterInsert caused by: System.DmlException: Update failed. First exception on row 0 with id 5001s000008uj8GAAQ; first error: FIELD_CUSTOM_VALIDATION_EXCEPTION, Selected Category is not a part of the complaint case type: [] Class.CaseTriggerHandler.updateTopManagementFlag: line(update caseListupdate;)
Trigger.CaseTrigger: line 61, column 1