2014-09-26 72 views
0

我剛收到開發商腳本異常電子郵件觸發我已經在生產環境中得到:Apex腳本中未處理的異常觸發的Salesforce

Apex script unhandled trigger exception by user/organization: 00590000002GfMD/00D90000000cIze 
SetContactDonorCampaign: execution of BeforeInsert 
caused by: System.DmlException: Update failed. First exception on row 0; first error: 
MISSING_ARGUMENT, Id not specified in an update call: [] 
Trigger.SetContactDonorCampaign: line 25, column 1 

誤差不給我任何標識備案它失敗了,這有點煩人。觸發器本身只是識別在創建Payment_Information__c記錄時是否填充了查找聯繫人__c,並且在該聯繫人上設置多選擇選擇列表以包括「捐助者」,如果它尚未。

trigger SetContactDonorCampaign on Payment_Information__c (before insert,before update) { 

    for(Payment_Information__c donation : Trigger.new) 
    { 
     Contact reg = new Contact(); 
     if(donation.Contact__c != NULL) 
     { 
      reg = [SELECT id, Campaign__c FROM Contact WHERE Id = :donation.Contact__c]; 
      String regCampaign = ''; 
      if (reg.Campaign__c != NULL) 
      { 
       if (!reg.Campaign__c.contains('Donor')) 
       { 
        regCampaign = reg.Campaign__c + ';Donor'; 
       } else { 
        return; 
       } 
      } else {    
       regCampaign = 'Donor'; 
      } 
      reg.Campaign__c = regCampaign; 
     } 
     if (reg != NULL) 
     { 
      update reg; 
     } 
    } 
} 

沒有特定的記錄來查找(系統甚至沒有與修改日期匹配的付款信息記錄這個錯誤),對什麼是失敗在這裏有什麼建議?

+0

您在插入前調用此,在未提交之前插入實際插入,所以它可能有可能沒有接觸對象ID字段。並且您的聯繫人對象在任何情況下都不爲空,因爲您已添加「Contact reg = new Contact();」在你的代碼中。 – 2014-09-26 07:11:45

回答

0

即使donation.Contact__c爲空,聯繫對象也爲空。 ,因爲您每次都創建了新的聯繫人對象。

Contact reg = new Contact(); 

if (reg != NULL) 
{ 
     update reg; 
}  

總是執行上述條件。這就是這種錯誤發生的方式。

請將您的代碼更改爲波紋管。

trigger SetContactDonorCampaign on Payment_Information__c (before insert,before update) { 

for(Payment_Information__c donation : Trigger.new) 
{ 
    Contact reg = null; 
    if(donation.Contact__c != NULL) 
    { 
     reg = [SELECT id, Campaign__c FROM Contact WHERE Id = :donation.Contact__c]; 
     String regCampaign = ''; 
     if (reg.Campaign__c != NULL) 
     { 
      if (!reg.Campaign__c.contains('Donor')) 
      { 
       regCampaign = reg.Campaign__c + ';Donor'; 
      } else { 
       return; 
      } 
     } else {    
      regCampaign = 'Donor'; 
     } 
     reg.Campaign__c = regCampaign; 
    } 
    if (reg != NULL) 
    { 
     update reg; 
    } 
} 

}