2014-09-26 4 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 создается с заполненным контактом 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; 
     } 
    } 
} 

Без конкретной записи смотреть вверх (система даже не имеет записи информации платежа с измененной датой согласования этой ошибки), любые предложения о том, что здесь провал?

+0

Вы вызываете это перед тем вкладышем, в перед тем вставить фактическую вставку в не совершала, так что, возможно, возможно, что не имеют идентификаторов полей контакта объекта. и ваш контактный объект не имеет значения ни в каких условиях, потому что вы добавили «Contact reg = new Contact();» в вашем коде. –

ответ

0

Контактный объект не является нулевым даже пожертвованием.Contact__c имеет значение null. , потому что вы каждый раз создавали новый контактный объект.

Contact reg = new Contact(); 

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

above condition всегда выполняется. Так происходит эта ошибка.

Пожалуйста, измените настройки кода.

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

}

Смежные вопросы