【问题标题】:i am not able to resolve the error nullobject reference salesforce trigger我无法解决错误 nullobject reference salesforce trigger
【发布时间】:2025-12-11 11:20:29
【问题描述】:

您好,我设计了一个触发器,该触发器从其子对象(交易/报价)向帐户提供汇总汇总最大日期值(它们与父对象具有查找关系)...但是每当我尝试删除子对象时,我我被抛出一个验证错误,请帮忙,因为我是 salesforce 的新手,无法解决它。

这里是触发代码:

trigger accountupdate on Deal_Offer__c (after delete, after insert, after update) {
Set<id> accountIds = new Set<id>();
Date maxdate;
Date maxdate1;
Date maxdate2;    
List<Account> accountsToUpdate = new List<Account>();

for (Deal_Offer__c item : Trigger.new)
    accountIds.add(item.Account__c);

if (Trigger.isUpdate || Trigger.isDelete) {
    for (Deal_Offer__c item : Trigger.old)
        accountIds.add(item.Account__c);
}

// get a map of the Accounts and the related fields that need to be updated
Map<id,Account> accountMap = new Map<id,Account>([select id,Most_Recent_Live_Date_Homerun__c,Most_Recent_Live_Date_Chase__c,Most_Recent_Live_Date_Serve__c from Account where id IN :accountIds]);

// query the account and the related deals_offers and update the max_run_date fiels in the account
for (Account acc : [select id,Name,Most_Recent_Live_Date_Homerun__c,Most_Recent_Live_Date_Chase__c,Most_Recent_Live_Date_Serve__c,(select id,Most_Recent_Live_Date_Homerun__c,Most_Recent_Live_Date_Chase__c,Most_Recent_Live_Date_Serve__c from Deals_Offers__r) from Account where id IN :accountIds]) {
   maxdate = acc.Deals_offers__r[0].Most_Recent_Live_Date_Homerun__c;
   maxdate1 = acc.Deals_offers__r[0].Most_Recent_Live_Date_Chase__c;
   maxdate2 = acc.Deals_offers__r[0].Most_Recent_Live_Date_Serve__c;
   for (Integer i = 0;i < acc.Deals_Offers__r.size(); i++){
       if(acc.Deals_Offers__r[i].Most_Recent_Live_Date_Homerun__c > maxdate){
           maxdate = acc.Deals_Offers__r[i].Most_Recent_Live_Date_Homerun__c;
       }
       if(acc.Deals_Offers__r[i].Most_Recent_Live_Date_Chase__c > maxdate){
           maxdate1 = acc.Deals_Offers__r[i].Most_Recent_Live_Date_Chase__c;
       }
       if(acc.Deals_Offers__r[i].Most_Recent_Live_Date_Serve__c > maxdate){
           maxdate2 = acc.Deals_Offers__r[i].Most_Recent_Live_Date_Serve__c;
       }                                     
   }
  accountMap.get(acc.Id).Most_Recent_Live_Date_Homerun__c = maxdate;
  accountMap.get(acc.Id).Most_Recent_Live_Date_Chase__c = maxdate1;
  accountMap.get(acc.Id).Most_Recent_Live_Date_Serve__c = maxdate2;
  //add the account to update list          
  accountsToUpdate.add(accountMap.get(acc.Id));  

}

update accountsToUpdate;

}

这是我从帐户中删除交易/报价时遇到的错误

在保存受影响的记录时遇到自定义验证错误。遇到的第一个验证错误是“Apex 触发器帐户更新导致意外异常,请联系您的管理员:帐户更新:执行 AfterDelete 导致:System.NullPointerException:尝试取消引用空对象:Trigger.accountupdate:第 8 行,第 1 列” .

请告诉我我哪里弄错了,应该怎么做才能纠正它。

提前感谢

【问题讨论】:

    标签: triggers salesforce


    【解决方案1】:

    Trigger.NewTrigger.old 都是触发器上下文变量。 New 为您提供更新的值,而 Old 为您提供记录的先前值。

    Trigger.new 可用于插入前、插入后、更新前、更新后

    Trigger.old 可用于更新前、更新后、删除前、删除后。

    您的代码尝试在删除后删除记录的位置使用 Trigger.New,并且很明显,删除后 Trigger.New 将具有空值。

    请尝试使用
    如果(触发器.isDelete) 在您的代码中为特定操作(插入、删除、更新)执行代码块。 Click here 查看所有 Apex 触发器上下文变量。

    【讨论】:

      最近更新 更多