実稼働環境で取得したトリガーについて、開発者スクリプトの例外メールを受け取りました。
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 を教えてくれません。これは少し面倒です。トリガー自体は、参照 Contact__c が入力された Payment_Information__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;
}
}
}
検索する特定のレコードがなければ (システムには、このエラーと一致する変更日を含む支払い情報レコードさえありません)、ここで何が失敗しているのかについての提案はありますか?