Skip to main content
1 个回答
  1. 2014年6月21日 14:06
    NullPointerException de-reference a null object Apex Code trigger

     

    Knowledge Article Number: 000063739

     

    Description

     

    Customer is receiving the error :NullPointerException attempt to de-reference a null object  in Apex Trigger Code.

     

    Resolution

     

    The execution of a trigger will sometimes generate an error message like the following:

     

    execution of [EventName] caused by: System.NullPointerException: Attempt to de-reference a null object: Trigger.[TriggerName]: line [XX], column [XX]

     

    This error is caused by a line of code that is trying to use an object that has not been instantiated, or an object's attribute that has not been initialized.

     

    For example, if the get() method in the following code cannot find the value oldAccount.Name in the map accountMap, the object newAccount will be null, and trying to use it will generate this error message:

     

        trigger SampleTrigger on Account (before insert, before update) {

     

         integer i = 0;

     

          Map<String, Account> accountMap = new Map<String, Account>{};

     

          for (Account acct : System.Trigger.new)

     

            accountMap.put(acct.Name, acct);

     

          for (Account oldAccount : [SELECT Id, Name, Site FROM Account WHERE Name IN :accountMap.KeySet()]) {

     

            Account newAccount = accountMap.get(oldAccount.Name);

     

            i = newAccount.Site.length;

     

        }

     

    Also in this example, if the field Site was left empty, trying to use it as above will generate the error message as well.

     

    The solution is to make sure the object and/or the attribute to be used is not null. In this example, the code needs to be modified as follows:

     

            Account newAccount = accountMap.get(oldAccount.Name);

     

            if (newAccount != null)

     

              if (newAccount.Site != null)

     

                i = newAccount.Site.length();

     

    or an exception handling routine can be used, such as

     

            Account newAccount = accountMap.get(oldAccount.Name);

     

            try {

     

              i = newAccount.Site.length();

     

            } catch (System.NullPointerException e) {

     

                e1 = e; // can be assigned to a variable to display a user-friendly error message

     

              }

     

    For more information on handling exceptions, check the Apex Language Reference, under "Using Exception Methods", or "Using Exception Variables".

     

    For more information on initializing variables, look under Chapter 2, "Language Constructs", in the topics "Variables", and "Case Sensitivity".

     

    NOTE : PLS POST UR CODE RELATED QUESTIONS IN DEVELOPER.SALESFORCE.COM
0/9000