Apex脚本未处理触发器异常Salesforce

时间:2014-09-26 03:00:38

标签: exception triggers salesforce apex unhandled

我刚刚收到了一个开发人员脚本异常电子邮件,其中包含我在生产环境中获得的触发器:

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

错误没有给我任何失败记录的id,这有点烦人。触发器本身只识别何时创建Payment_Information__c记录并填充查找Contact__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;
        }
    }   
}

如果没有要查找的特定记录(系统甚至没有包含与此错误匹配的修改日期的付款信息记录),是否有关于此处失败的任何建议?

1 个答案:

答案 0 :(得分:0)

联系对象即使是捐赠也不为空.Contact__c为null。 因为你每次都创建了新的联系人对象。

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;
    }
}   

}

相关问题