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
Larry Caper II 7Larry Caper II 7 

Test Class Help: System.NullPointerException: Attempt to de-reference a null object

Please help, I have 50% coverage for the trigger below. However, I am receiving the following error and nor do I know if I'm writing the correct test class: 

System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, RollupEnrollmentCount: execution of AfterInsert
caused by: System.NullPointerException: Attempt to de-reference a null object
Trigger.RollupEnrollmentCount: line 43, column 1: []
_____________________________

trigger RollupEnrollmentCount on DJEnrollment__c (after insert, after update, after delete) {

     Set<Id> CampaignIds = new Set<Id>();
   
   if(Trigger.isDelete) {
     for(DJEnrollment__c test:Trigger.Old) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
    }   
   
   }
   else
   if(Trigger.isUpdate) {

     for(DJEnrollment__c test:Trigger.New) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
     }

     for(DJEnrollment__c test:Trigger.Old) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
     }   
   
   }
   else
   {
     for(DJEnrollment__c test:Trigger.New) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
     }
   }

    AggregateResult[] groupedResults = [SELECT count(id)enrollmentCount, EnrollClass_Name__c FROM DJEnrollment__c WHERE EnrollClass_Name__c in :CampaignIds GROUP BY EnrollClass_Name__c];
    
    Map<id,Campaign> campaignMap = new Map<Id,Campaign>([SELECT id, Class_Total_Enrollments__c FROM Campaign WHERE Id in :CampaignIds]); 
    
    for(AggregateResult ar: groupedResults) {
          campaignMap.get((Id)ar.get('EnrollClass_Name__c')).Class_Total_Enrollments__c = (decimal) ar.get('enrollmentcount');
    }
    
    try {
        update campaignMap.values();
    }   catch(DmlException e) {
        System.debug(e.getMessage());
    }

}
Best Answer chosen by Larry Caper II 7
Medhya MahajanMedhya Mahajan
Hi, 

You need to apply the null check for map like in line 43 here or you need to ensure that your data is inserted corectly in your test class:
 
trigger RollupEnrollmentCount on DJEnrollment__c (after insert, after update, after delete) {

     Set<Id> CampaignIds = new Set<Id>();
   
   if(Trigger.isDelete) {
     for(DJEnrollment__c test:Trigger.Old) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
    }   
   
   }
   else
   if(Trigger.isUpdate) {

     for(DJEnrollment__c test:Trigger.New) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
     }

     for(DJEnrollment__c test:Trigger.Old) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
     }   
   
   }
   else
   {
     for(DJEnrollment__c test:Trigger.New) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
     }
   }

    AggregateResult[] groupedResults = [SELECT count(id)enrollmentCount, EnrollClass_Name__c FROM DJEnrollment__c WHERE EnrollClass_Name__c in :CampaignIds GROUP BY EnrollClass_Name__c];
    
    Map<id,Campaign> campaignMap = new Map<Id,Campaign>([SELECT id, Class_Total_Enrollments__c FROM Campaign WHERE Id in :CampaignIds]); 
    
    for(AggregateResult ar: groupedResults) {
			if (campaignMap.containsKey((Id)ar.get('EnrollClass_Name__c')))
          { campaignMap.get((Id)ar.get('EnrollClass_Name__c')).Class_Total_Enrollments__c = (decimal) ar.get('enrollmentcount'); }
    }
    
    try {
        update campaignMap.values();
    }   catch(DmlException e) {
        System.debug(e.getMessage());
    }

}

Try this and let me know if it helps.

Regards
Medhya Mahajan

All Answers

Medhya MahajanMedhya Mahajan
Hi, 

You need to apply the null check for map like in line 43 here or you need to ensure that your data is inserted corectly in your test class:
 
trigger RollupEnrollmentCount on DJEnrollment__c (after insert, after update, after delete) {

     Set<Id> CampaignIds = new Set<Id>();
   
   if(Trigger.isDelete) {
     for(DJEnrollment__c test:Trigger.Old) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
    }   
   
   }
   else
   if(Trigger.isUpdate) {

     for(DJEnrollment__c test:Trigger.New) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
     }

     for(DJEnrollment__c test:Trigger.Old) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
     }   
   
   }
   else
   {
     for(DJEnrollment__c test:Trigger.New) {
      
        CampaignIds.add(test.EnrollClass_Name__c);   
    
     }
   }

    AggregateResult[] groupedResults = [SELECT count(id)enrollmentCount, EnrollClass_Name__c FROM DJEnrollment__c WHERE EnrollClass_Name__c in :CampaignIds GROUP BY EnrollClass_Name__c];
    
    Map<id,Campaign> campaignMap = new Map<Id,Campaign>([SELECT id, Class_Total_Enrollments__c FROM Campaign WHERE Id in :CampaignIds]); 
    
    for(AggregateResult ar: groupedResults) {
			if (campaignMap.containsKey((Id)ar.get('EnrollClass_Name__c')))
          { campaignMap.get((Id)ar.get('EnrollClass_Name__c')).Class_Total_Enrollments__c = (decimal) ar.get('enrollmentcount'); }
    }
    
    try {
        update campaignMap.values();
    }   catch(DmlException e) {
        System.debug(e.getMessage());
    }

}

Try this and let me know if it helps.

Regards
Medhya Mahajan
This was selected as the best answer
Larry Caper II 7Larry Caper II 7
Medhya - Thank you for the reply, it worked! One more question, do you have any idea as to why my OnClick Javascript button will work in every browser except IE. I receive an error saying: "A problem with the OnClick Javascript for this button or link was encountered: Expected ')' "

The code is below:
if("{!Lead.DT_App_Fee_Paid__c }" == '' || "{!Lead.Enrollment_Agreement_Signed__c }" == ''){ 
alert("REMINDER: Please populate the following field(s): App Fee Paid and Enrollment Agreement Paid") 
} 

else {window.open('/a0M/e?retURL={!Lead.Id}&Name={!Lead.Name}&00N1500000Fu4CN={!Lead.Phone}&00N1500000Fu4DB={!Lead.Email}&00N1500000Fu4Dz={!Lead.Enrollment_Agreement_Signed__c}&00N1500000Fu4DL={!Lead.LeadSource}&00N1500000Fu4C8=Enrolled&00N1500000Fu4DQ={!Lead.Program_Recruit_c__c}&00N1500000Fu4Df={!Lead.DT_App_Submitted__c}&00N1500000Fu4Dk={!Lead.DT_App_Fee_Paid__c}&CF00N1500000FuCSY={!Lead.DT_First_Contacted_User__c}&00N1500000FuCSd={!Lead.DT_First_Contacted__c}&00N1500000FuCSi={!Lead.DT_Tour_Booked__c}&00N1500000FuCSn={!Lead.Date_of_Tour__c}&CF00N1500000FuCSs={!Lead.DT_Tour_Complete_User__c}&00N1500000FuCSx={!Lead.DT_Tour_Complete__c}&00N1500000FuCT2={!Lead.FA_Appt_Date__c}&CF00N1500000FuCT7={!Lead.DT_FA_Appointment_Complete_User__c}&CF00N1500000FuCUF={!Lead.DT_App_Fee_Paid_User__c}&00N1500000HCbao={!Lead.Street}&00N1500000HCbat={!Lead.City}&00N1500000HCd3m={!Lead.State}&00N1500000HCbo7={!Lead.PostalCode}&00N1500000HCbb8={!Lead.Country}'); 

{!REQUIRESCRIPT("/soap/ajax/29.0/connection.js")} 
var c = new sforce.SObject("Lead"); 
c.id = "{!Lead.Id}"; 
c.Status = "Enrolled"; 
result = sforce.connection.update([c]); 
window.location.reload(); 
}

 
Medhya MahajanMedhya Mahajan
Hi Larry ,

Try this :
{!REQUIRESCRIPT("/soap/ajax/29.0/connection.js")} 
if("{!Lead.DT_App_Fee_Paid__c }" == '' || "{!Lead.Enrollment_Agreement_Signed__c }" == ''){ 
alert("REMINDER: Please populate the following field(s): App Fee Paid and Enrollment Agreement Paid");
} 

else {window.open('/a0M/e?retURL={!Lead.Id}&Name={!Lead.Name}&00N1500000Fu4CN={!Lead.Phone}&00N1500000Fu4DB={!Lead.Email}&00N1500000Fu4Dz={!Lead.Enrollment_Agreement_Signed__c}&00N1500000Fu4DL={!Lead.LeadSource}&00N1500000Fu4C8=Enrolled&00N1500000Fu4DQ={!Lead.Program_Recruit_c__c}&00N1500000Fu4Df={!Lead.DT_App_Submitted__c}&00N1500000Fu4Dk={!Lead.DT_App_Fee_Paid__c}&CF00N1500000FuCSY={!Lead.DT_First_Contacted_User__c}&00N1500000FuCSd={!Lead.DT_First_Contacted__c}&00N1500000FuCSi={!Lead.DT_Tour_Booked__c}&00N1500000FuCSn={!Lead.Date_of_Tour__c}&CF00N1500000FuCSs={!Lead.DT_Tour_Complete_User__c}&00N1500000FuCSx={!Lead.DT_Tour_Complete__c}&00N1500000FuCT2={!Lead.FA_Appt_Date__c}&CF00N1500000FuCT7={!Lead.DT_FA_Appointment_Complete_User__c}&CF00N1500000FuCUF={!Lead.DT_App_Fee_Paid_User__c}&00N1500000HCbao={!Lead.Street}&00N1500000HCbat={!Lead.City}&00N1500000HCd3m={!Lead.State}&00N1500000HCbo7={!Lead.PostalCode}&00N1500000HCbb8={!Lead.Country}'); 

var c = new sforce.SObject("Lead"); 
c.id = "{!Lead.Id}"; 
c.Status = "Enrolled"; 
result = sforce.connection.update([c]); 
window.location.reload(); 
}

Hope this helps.

Regards
Medhya Mahajan