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
Waqar Hussain SFWaqar Hussain SF 

I wrote a triiger, when I edit salary fields, then an Errorr occur this: System.NullPointerException: Argument cannot be null.: Trigger.TotalSalTrigger: line 6, column 1. How can I solve?

i have two object employee__c(Name, total_salary__c) and salary__c (Monthly_salary__c, Bonus__c). They have a lookup relation.

This is my Trigger

Trigger TotalSalTrigger on Salary__c (after insert) {
    Salary__c sal = trigger.new[0];
    List<Salary__c> s = [SELECT Monthly_Salary__c, Bonus__c FROM Salary__c where Employee__c =:sal.Employee__c limit 30000];
    decimal amt =0;
    for(Salary__c ss:s){
        amt += ss.Monthly_Salary__c + ss.Bonus__c;
    }
    List<Employee__c> emp = [SELECT id FROM Employee__c where id= :sal.Employee__c limit 1];
    for(Employee__c e:emp)
    {
        e.Total_Salary__c = amt;
        }
    update emp;
}
Best Answer chosen by Waqar Hussain SF
Vatsal KothariVatsal Kothari
Hi Waqar,

Replace 6th line with below code:

amt += (ss.Monthly_Salary__c != null ? ss.Monthly_Salary__c : 0) + (ss.Bonus__c != null ? ss.Bonus__c : 0);
If this solves your problem, kindly mark it as the best answer.

Thnaks,
Vatsal

All Answers

Vatsal KothariVatsal Kothari
Hi Waqar,

Replace 6th line with below code:

amt += (ss.Monthly_Salary__c != null ? ss.Monthly_Salary__c : 0) + (ss.Bonus__c != null ? ss.Bonus__c : 0);
If this solves your problem, kindly mark it as the best answer.

Thnaks,
Vatsal

This was selected as the best answer
Grazitti TeamGrazitti Team
Hi,

you should check before using any fieldor list before using it.

Update your code by:-

Trigger TotalSalTrigger on Salary__c (after insert) {
    Salary__c sal = trigger.new;
    List<Salary__c> s = [SELECT Monthly_Salary__c, Bonus__c FROM Salary__c where Employee__c =:sal.Employee__c limit 30000];
    decimal amt =0;

if(s.size()>0)
{
  for(Salary__c ss : s){
  if((ss.Monthly_Salary__c != null || ss.Monthly_Salary__c != '') && (ss.Bonus__c != null || ss.Bonus__c!= ''))
   amt += ss.Monthly_Salary__c + ss.Bonus__c;
  }
}

    List<Employee__c> emp = [SELECT id FROM Employee__c where id= :sal.Employee__c limit 1];
    for(Employee__c e:emp)
    {
        e.Total_Salary__c = amt;
    }
    update emp;
}



And don't forget to mark this answer as best, if answer this helps you :-)

--
Regards,
Grazitti Team
Web: www.grazitti.com
Waqar Hussain SFWaqar Hussain SF
Hi Grazitti Team...
Your code still give this error.
and Mr. @Vatsal Kothari code works correctly.
Thanks a lot both of you :-)