0

This code is invoked using process builder and condition to satisfy for firing process builder and creating multiple records is choosing value called "Yes" under a picklist called "Approved" on Parent Object which is "Opportunity Contract".

In sandbox this Code is working fine with all custom profiles, when i give them modify all permission for both the custom objects.

In production this code is working for systems administrator alone and not working for other profiles even with modify all permission and i getting following error and not able to save the record for creating multiple child records.

Infact for a particular custom profile called Finance, i have cloned system administrator profile and reassigned to them as NewFinance, still i am getting error.

Attempt to de-reference a null object

Lookup fields on the both objects include, Account, Contract and Opportunity

Here is the code, any suggestions are highly appreciated

public class OppConAMInvocableClass {
    @InvocableMethod(label='Insert Child Records for Opportunity Contracts' description='Inserts the child records based on number of contract years.')
  public static void insertChildRecords(List<Opportunity_Contract__c> parentList) {
      List<Annual_Maintenance__c> childrecords = new List<Annual_Maintenance__c>();        
      for(Opportunity_Contract__c parent : parentList) {
        Integer numberYears = Integer.valueOf(parent.Contract_Years__c);
        for(Integer i=1;i<numberYears;i++) {
        //Account acct = [SELECT Id FROM Account where Id = :e.WhatId];
        Integer j = i + 1;          
        Annual_Maintenance__c child = new Annual_Maintenance__c();


        Child.Anniversary_Date__c=Parent.Annual_Renewal_Date__c.addYears(i);  
        Child.Name=Parent.Name+'-'+Child.Anniversary_Date__c.year();
        Child.Number_of_sites__c=Parent.Number_of_Sites__c;
        Child.Opportunity_Department__c =Parent.Opportunity_Department__c;
        Child.Account__c=Parent.Account_Name__c;
        Child.Primary_Contact__c=Parent.Primary_Contact__c;
        Child.Annual_Maintenance_Start_Date__c=Parent.Contract_Start_Date__c;
        Child.Annual_Maintenance_End_Date__c=Parent.Contract_End_Date__c;
        Child.Opportunity_Name__c=Parent.Opportunity_Name__c;
        Child.Anniversary_Date__c=Parent.Annual_Renewal_Date__c;
        Child.Sales_Territory__c=Parent.Sales_Territory__c;
        Child.Annual_Maintenance_Amount__c=Parent.SMS_Maintenance_Amount__c;
    child.Opportunity_Contract__c=parent.Id;
    childrecords.add(child);
    }
  }    
Database.SaveResult[] results = Database.insert(childrecords);
/*
List<ID> itemIds = new List<ID>();
for (Database.SaveResult result : results) {
  if (result.isSuccess()) {
    itemIds.add(result.getId());
  }
}
4
  • If there is record type on object then make sure that picklist values are added in record type and record type is added in your profile.
    – Ayub
    Jun 26, 2019 at 6:27
  • Probably your code breaks when accessing .addYears or .year functions as you need to do a null check on fields before calling function with dot operator.
    – Raul
    Jun 26, 2019 at 6:28
  • Which line is throwing the error? Please edit your original post to include the stack trace if available. Jun 26, 2019 at 18:49
  • Thank you all for the replies, the code started working after i recompiled all apex classes in production. Jun 27, 2019 at 7:36

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.