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
Swaroopa Akula 10Swaroopa Akula 10 

getting an error message-System.NullPointerException: Attempt to de-reference a null object

we have a requirement that when if a Conga transaction record has 'Sent' status , it should not allow the user to create a new conga transaction record. I created a trigger and apex handler class.

trigger congatransaction on APXT_CongaSign__Transaction__c (before INSERT) {
    
   congatransactionHandler.congatransactionMethod(Trigger.NewMap,Trigger.OldMap);
   
   }


public class congatransactionHandler {
    
    public static void congatransactionMethod(Map<Id,APXT_CongaSign__Transaction__c> newconMap, Map<Id,APXT_CongaSign__Transaction__c> oldconMap){
        Set<Id> conIds = New Set<Id>();
        List<APXT_CongaSign__Transaction__c> conList = New List<APXT_CongaSign__Transaction__c>();
        
        for(APXT_CongaSign__Transaction__c con : newconMap.values()){
               APXT_CongaSign__Transaction__c oldcontranmap = oldconMap.get(con.Id);
             if(oldconMap!=null && oldconMap.size()>0)
    // Trigger.new records are conveniently the "new" versions!
{        //Boolean oldcontransactionmap = oldcontranmap.APXT_CongaSign__Status__c.equals('SENT'); 
            if((newconMap.get(con.Id).Parent_a29__c== oldcontranmap.Parent_a29__c) && oldcontranmap.APXT_CongaSign__Status__c.equals('SENT')){


          con.adderror('You have already sent the conga transaction');
            }
        }
          
    }
}
}
Best Answer chosen by Swaroopa Akula 10
Abdul KhatriAbdul Khatri
Hi Swaroopa,

Please see if the below code help you., I just placed necessary checks to avoid null pointer
 
trigger congatransaction on APXT_CongaSign__Transaction__c (before INSERT) {
    
    congatransactionHandler.congatransactionMethod(Trigger.NewMap,Trigger.OldMap);
    
}


public class congatransactionHandler {
    
    public static void congatransactionMethod(Map<Id,APXT_CongaSign__Transaction__c> newconMap, Map<Id,APXT_CongaSign__Transaction__c> oldconMap){
        Set<Id> conIds = New Set<Id>();
        List<APXT_CongaSign__Transaction__c> conList = New List<APXT_CongaSign__Transaction__c>();
        
        for(APXT_CongaSign__Transaction__c con : newconMap.values()){
            if(oldconMap!=null && oldconMap.size()>0)
                // Trigger.new records are conveniently the "new" versions!
            {        //Boolean oldcontransactionmap = oldcontranmap.APXT_CongaSign__Status__c.equals('SENT'); 
            	APXT_CongaSign__Transaction__c oldcontranmap = oldconMap.get(con.Id);                
                if(oldcontranmap != null && con.Parent_a29__c == oldcontranmap.Parent_a29__c && 
                    oldcontranmap.APXT_CongaSign__Status__c != null &&
                   	oldcontranmap.APXT_CongaSign__Status__c.equals('SENT')){
                    
                    
                    con.adderror('You have already sent the conga transaction');
                }
            }
            
        }
    }
}

 

All Answers

Swaroopa Akula 10Swaroopa Akula 10
Conga transaction is a related object of contract agreements(Parent_a29__c is the contract agreement id)
Abdul KhatriAbdul Khatri
Hi Swaroopa,

Please see if the below code help you., I just placed necessary checks to avoid null pointer
 
trigger congatransaction on APXT_CongaSign__Transaction__c (before INSERT) {
    
    congatransactionHandler.congatransactionMethod(Trigger.NewMap,Trigger.OldMap);
    
}


public class congatransactionHandler {
    
    public static void congatransactionMethod(Map<Id,APXT_CongaSign__Transaction__c> newconMap, Map<Id,APXT_CongaSign__Transaction__c> oldconMap){
        Set<Id> conIds = New Set<Id>();
        List<APXT_CongaSign__Transaction__c> conList = New List<APXT_CongaSign__Transaction__c>();
        
        for(APXT_CongaSign__Transaction__c con : newconMap.values()){
            if(oldconMap!=null && oldconMap.size()>0)
                // Trigger.new records are conveniently the "new" versions!
            {        //Boolean oldcontransactionmap = oldcontranmap.APXT_CongaSign__Status__c.equals('SENT'); 
            	APXT_CongaSign__Transaction__c oldcontranmap = oldconMap.get(con.Id);                
                if(oldcontranmap != null && con.Parent_a29__c == oldcontranmap.Parent_a29__c && 
                    oldcontranmap.APXT_CongaSign__Status__c != null &&
                   	oldcontranmap.APXT_CongaSign__Status__c.equals('SENT')){
                    
                    
                    con.adderror('You have already sent the conga transaction');
                }
            }
            
        }
    }
}

 
This was selected as the best answer
AnkaiahAnkaiah (Salesforce Developers) 
Hi Swaroopa,

try with below trigger code.
trigger congatransaction on APXT_CongaSign__Transaction__c (before INSERT) {

set<id> Parentids = new set<id>();

for(APXT_CongaSign__Transaction__c con:trigger.new){
Parentids.add(con.Parent_a29__c);
}
map<id,string> parentchildstatus = new map<id,string>();
for(APXT_CongaSign__Transaction__c cg:[select Parent_a29__c,APXT_CongaSign__Status__c from APXT_CongaSign__Transaction__c where Parent_a29__c IN:Parentids AND APXT_CongaSign__Status__c='SENT' ]){
parentchildstatus.add(cg.Parent_a29__c,cg.APXT_CongaSign__Status__c);
}

for(APXT_CongaSign__Transaction__c con:trigger.new){
if(parentchildstatus.containskey(cog.Parent_a29__c)){
 con.adderror('You have already sent the conga transaction');
}
}

}

If this helps, Please mark it as best answer.

Thanks!!​​​​​​​