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
chikkuchikku 

Avoid Null in Trigger.Old and Trigger.New in Trigger

When I track the old value and new value in the trigger, the first value showing has null, I don't know how to void it .. 
I have used if ( Trigger.isbefore  &&  Trigger.isUpdate) also I condition it doesn't work.
 
if ( Trigger.isbefore )
         for(integer i=0; i<trigger.new.size();i++){
        
            if(Trigger.New[i].Decision_Determined__c!=Trigger.Old[i].Decision_Determined__c){
                
                if(Trigger.Old[i].Plaid_Report_JSON__c==null){
                    Trigger.New[i].Plaid_Report_JSON__c='';
                }
              
                Trigger.New[i].Plaid_Report_JSON__c +='\n Decision old value='+Trigger.Old[i].Decision_Determined__c+  ' Decision New value ' + Trigger.New[i].Decision_Determined__c;
                  }
}
    system.debug('-----old value'+Trigger.Old);
    system.debug('-----new value'+Trigger.New);

User-added image
AbhinavAbhinav (Salesforce Developers) 
Hi Chiiku,

Which type of trigger is this? if you can share full code.

Thanks!
chikkuchikku
This is my full code
trigger LoanApplication on Loan_Application__c (after insert,after update, before update) {   
    
        Map<String,String> mapp = new Map<String,String>();  
   ;
        if(Trigger.isInsert)
        {
          for(Loan_Application__c  app:Trigger.New)
          {
               string LoanState;
                for(String key : mapp.keySet()){
                    LoanState =  mapp.get(app.Loan_State__c);
                }
                Log__c log = new Log__c(Loan_Application__c=app.Id,Contact__c=app.Contact__c,Action__c=app.Loan_State__c,Datetime__c = app.CreatedDate,Source__c= LoanState,Description__c=app.Loan_State__c); 
                insert log;
          }
        }
        else if(Trigger.isUpdate)
        {
            for(Loan_Application__c lapp : Trigger.New){ 
                if(lapp.Loan_State__c == 'Started' && lapp.SaltEdge_Report_JSON__c != ''){
                        LoanApplicationController.editState(lapp.Id, 'Open Banking Data Obtained');
                } 
            }
    
            for(Loan_Application__c  apps:Trigger.New)
            {
                string LoanStatus = Trigger.Old[0].Loan_State__c;
                if(LoanStatus != apps.Loan_State__c)
                {
                    string LoanState;
                    for(String key : mapp.keySet())
                    {
                        LoanState =  mapp.get(apps.Loan_State__c);
                    }
                    Log__c log = new Log__c(Loan_Application__c=apps.Id,Contact__c=apps.Contact__c,Action__c=apps.Loan_State__c,Datetime__c = apps.CreatedDate,Source__c= LoanState,Description__c=apps.Loan_State__c); 
                    insert log;
                }
            } 
        } 
    else if(Trigger.isBefore)
         for(integer i=0; i<trigger.new.size();i++){
        
            if(Trigger.New[i].Decision_Determined__c!=Trigger.Old[i].Decision_Determined__c){
                
                if(Trigger.Old[i].Plaid_Report_JSON__c==null){
                    Trigger.New[i].Plaid_Report_JSON__c='';
                }
              
                Trigger.New[i].Plaid_Report_JSON__c +='\n Decision old value='+Trigger.Old[i].Decision_Determined__c+  ' Decision New value ' + Trigger.New[i].Decision_Determined__c;
                  }
}
    system.debug('-----old value'+Trigger.Old);
    system.debug('-----new value'+Trigger.New); 

   
}

 
AbhinavAbhinav (Salesforce Developers) 
You are having this trigger for insert as well, So for that scenario Trigger.old value will be null.

I did not clearly understand you question , let me know if its something else you are trying to ask.
chikkuchikku
Hi Abhinav,

I need to show old and new values when it updates the respective fields, if I use (Trigger.isUpdate) is not updating, nothing has been changed remains the same.
CharuDuttCharuDutt
Hii Chikku
Try Below Code
Example
trigger SameobjTrg on Contact (after insert ,before update) 
{
    if(Trigger.IsAfter && Trigger.IsInsert){
     for(contact con:trigger.new)
    {
        {	if(con.Name != Trigger.oldMap.get(con.Id).Name){
         /*logic*/
     }
		system.debug('Insert Case Old Value ====> '+ Trigger.oldMap.get(con.Id).Name);
            system.debug('Insert Case New Value ====> '+ con.Name);
		
      }
    }
    
    if(Trigger.IsBefore && Trigger.IsUpdate){
     for(contact con:trigger.new)
     {	if(con.Name != Trigger.oldMap.get(con.Id).Name){
         /*logic*/
     }
		system.debug('Insert Case Old Value ====> '+ Trigger.oldMap.get(con.Id).Name);
            system.debug('Insert Case New Value ====> '+ con.Name);
		
      }
    }
}
}
Please Mark It As Best Answer If It Helps
Thank You!

 
Erwin DavidErwin David
When a field value is changed to certain value, we use trigger. old and trigger. new to compare the older and new version values of the field values on a record and perform the required business logic accordingly. upsers account (https://www.upsers.biz/)
trigger. old is available only on the update and delete events.