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
Prasanna_24Prasanna_24 

System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, NbdsEappValidation: execution of AfterInsert

Hi,

I have  created a trigger handler class and when i try to run test class,it is giving errors as follows

Error MessageSystem.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, NbdsEappValidation: execution of AfterInsert

caused by: System.DmlException: Update failed. First exception on row 0 with id a0u21000000EquXAAS; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, NbdsEappValidation: execution of BeforeUpdate

caused by: System.FinalException: Record is read-only

Class.NbdsEappValidationTriggerHandler.OnBeforeUpdate: line 39, column 1
Trigger.NbdsEappValidation: line 21, column 1: []

Class.NbdsEappValidationTriggerHandler.OnAfterInsert: line 59, column 1
Trigger.NbdsEappValidation: line 26, column 1: []



Here is my Trigger:
==============


trigger NbdsEappValidation on NBDS_eApp__c (before insert, before update, after insert, after update) {
       
       NbdsEappValidationTriggerHandler handler = new NbdsEappValidationTriggerHandler(false);
       
                if ( trigger.isBefore ) {
                                if ( trigger.isInsert ) {
                                                Handler.onBeforeInsert(trigger.new);
                                } else if ( trigger.isUpdate ) {
                                                Handler.onBeforeUpdate(trigger.new, trigger.oldMap);
                                } 
                                
                } else if ( trigger.isAfter ) {
                                if ( trigger.isInsert ) {
                                                Handler.onAfterInsert(trigger.new);
                                } else if ( trigger.isUpdate ) {
                                                Handler.onAfterUpdate(trigger.new, trigger.oldMap);
                                }
                                
                }


Here is my Handler class:
===================


public with sharing class NbdsEappValidationTriggerHandler {

        private boolean m_isExecuting = false;

public NbdsEappValidationTriggerHandler(boolean isExecuting){
            m_isExecuting = isExecuting;

}

public void OnBeforeInsert(List<NBDS_eApp__c> listeApp){
//Check if the Data Entry Complete-Validate on Save flag is true
    //If true set sectionidentifier to All before insert and update
        for (NBDS_eApp__c eApp : listeApp) {
            if(eApp.NBDS_DataEntry_Complete_Validate_on_Save__c==true)
                eApp.SectionIdentifier__c='All';
                }       
}

public void OnBeforeUpdate(List<NBDS_eApp__c> listeApp, Map<id,NBDS_eApp__c> MapeAppOld){
        
         for (NBDS_eApp__c eApp : listeApp) {
            if(eApp.NBDS_DataEntry_Complete_Validate_on_Save__c==true)
                eApp.SectionIdentifier__c='All';
                }   
                
                
                             
         for(NBDS_eApp__c eApp:MapeAppOld.values()){
            if(eApp.NBDS_DataEntry_Complete_Validate_on_Save__c==true)
            {
                            eApp.SectionIdentifier__c='All';                                
             }
                }
}

public void OnAfterInsert(List<NBDS_eApp__c> listeApp) {
//Reset Data Entry Complete-Validate on Save flag is false
    //SectionIdentifier value to ''
        List<NBDS_eApp__c> listeApp1=new List<NBDS_eApp__c>();
            for (NBDS_eApp__c eApp : listeApp) {
                if(eApp.NBDS_DataEntry_Complete_Validate_on_Save__c==true) {
//Use fresh object to update only those fields that require updating
                  NBDS_eApp__c ueApp=new NBDS_eApp__c();
                  ueApp.Id = eApp.Id;
                  ueApp.SectionIdentifier__c=null;
                  ueApp.NBDS_DataEntry_Complete_Validate_on_Save__c=false;
                  listeApp1.add(ueApp);
            }
        }
//Update only if there are records
        if(listeApp1.size()>0)
            update listeApp1;
    }

public void OnAfterUpdate(List<NBDS_eApp__c>  listeApp, map<id,NBDS_eApp__c> MapeAppOld){
        List<NBDS_eApp__c> listeApp1=new List<NBDS_eApp__c>();
            for (NBDS_eApp__c eApp : listeApp) {
            if(eApp.NBDS_DataEntry_Complete_Validate_on_Save__c==true) {
//Use fresh object to update only those fields that require updating
                NBDS_eApp__c ueApp=new NBDS_eApp__c();
                ueApp.Id = eApp.Id;
                ueApp.SectionIdentifier__c=null;
                ueApp.NBDS_DataEntry_Complete_Validate_on_Save__c=false;
                listeApp1.add(ueApp);
            }
        }        
//Update only if there are records
        if(listeApp1.size()>0)
            update listeApp1;
            
           List<NBDS_eApp__c> listeApp2=new List<NBDS_eApp__c>();  
             for (NBDS_eApp__c eApp : MapeAppold.values()) {
            if(eApp.NBDS_DataEntry_Complete_Validate_on_Save__c==true) {
//Use fresh object to update only those fields that require updating
                NBDS_eApp__c ueApp=new NBDS_eApp__c();
                ueApp.Id = eApp.Id;
                ueApp.SectionIdentifier__c=null;
                ueApp.NBDS_DataEntry_Complete_Validate_on_Save__c=false;
                listeApp2.add(ueApp);
            }
}
//Update only if there are records
        if(listeApp2.size()>0)
            update listeApp2;           
}
}


Your answers will be highly helpful for me!!Thanks in Advance!!