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
Hermann OuréHermann Ouré 

How to Fix error : System.NullPointerException: Attempt to de-reference a null object

Hello,

Could anyone help me with Fixing this error 
System.NullPointerException: Attempt to de-reference a null object
Line 43
Thank you
 
trigger UpdateAccountCA on Order (after update, before delete) {
	
    Map<Id, Decimal> mAccAmount = new Map<Id, Decimal>();
    
    if(Trigger.isUpdate) {
        //Iterate through each Order 
        for(Order o : Trigger.new) {
            Decimal totalAmount = o.TotalAmount == null ? 0 : o.TotalAmount;
            if(mAccAmount.containskey(o.accountid)) {
              Decimal d = mAccAmount.get( o.AccountId );
              System.debug('Decimal value ' +d);
              d += totalAmount;
              mAccAmount.put( o.AccountId, d );  
                
            } else {
                mAccAmount.put( o.AccountId, totalAmount );
    
            }
        }
    }  
    
    else if(Trigger.isDelete) {
        for(Order o2 : Trigger.old) {
           Decimal newTotalAmount = o2.TotalAmount != null ? 0 : o2.TotalAmount; 
            if(mAccAmount.containsKey(o2.AccountId)) {
                Decimal dc = mAccAmount.get(o2.AccountId);
                System.debug('New Value after Delete ' +dc);
                dc -= newTotalAmount;
            }
        }  
    }
        
    //List<Account> lAccs = [SELECT Id, Chiffre_d_affaire__c FROM Account WHERE Id = :mAccAmount.keySet()];
	List<Account> lAccs = new List<Account>();
    Map<Id, Account> acct = new Map<Id, Account> ([SELECT Id, Chiffre_d_affaire__c FROM Account WHERE Id = :mAccAmount.keySet()]);
    System.debug('Account Keyset: ' +mAccAmount);
    
    AggregateResult[] groupedResults = [SELECT AccountId, SUM(TotalAmount)amt FROM Order WHERE AccountId != null GROUP BY AccountId];
    
    for(AggregateResult Results: groupedResults) {
        Id accountId = (id) Results.get('AccountId');
        Account a = acct.get(accountId);
        a.Chiffre_d_affaire__c = (Decimal)Results.get('amt');
        lAccs.add(a);
    }
    
    //Iterate through each List of Accounts 
    if(lAccs.size()>0) {
    	for(Account acc : lAccs){
        	Decimal ca = acc.Chiffre_d_affaire__c == null ? 0 : acc.Chiffre_d_affaire__c;
            System.debug('acc ' +acc);
            if(mAccAmount.get(acc.Id)!=null) {
            	acc.Chiffre_d_affaire__c = ca + mAccAmount.get(acc.Id);  
            }
        }
    }
    
    update lAccs;
    
}


 
Best Answer chosen by Hermann Ouré
David Zhu 🔥David Zhu 🔥
Can you change line 38 to?
 AggregateResult[] groupedResults = [SELECT AccountId, SUM(TotalAmount)amt FROM Order WHERE AccountId in :mAccAmount.keySet()  GROUP BY AccountId];

All Answers

David Zhu 🔥David Zhu 🔥
Can you change line 38 to?
 AggregateResult[] groupedResults = [SELECT AccountId, SUM(TotalAmount)amt FROM Order WHERE AccountId in :mAccAmount.keySet()  GROUP BY AccountId];
This was selected as the best answer
Hermann OuréHermann Ouré
Thank you David