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
Prashant Yadav 90Prashant Yadav 90 

Code not working in production

What is wrong with my code?

Description: The purpose of this code is to create multiple records based on two conditions
  1. Custom Picklist: Value = Yes (condition set in process builder)
  2. (Number Field) Contract Term (Number of years) =
So whatever is the value entered in the contract term custom field, those many child record would be created.
Parent Object: Opportunity Contract
Child Object: Annual Maintenance
Error in Production
This code is working fine in Developer Sandbox, after I installed in Production, this program is working as expected with the opportunity contract records which were previously created (before deploying this code)
However, this code does not work with opportunity contract records which are created after the deployment.
The error I am geting is “dereference a null object”
Where am I going wrong? Why this behaviour of working for existing records and not working with new records in Production?

Finally i have recomplied all Apex Classes in Production, but the result is the same

Any Help is highly appreciated!


Below is the code
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());
      }
    }
    return itemIds;
    */
  }
}






 
 
GauravendraGauravendra
Hi Prashant,

Can you check whether the new records have all the fields populated. Atleast all the fields that are populated in existing records(old ones) for those its working fine. I think you might not populating some fields in new records.

Hope this helps!