2015-03-24 6 views
0

У меня есть два пользовательских объекта 1. Клиент 2.Complaint, и они взаимозависимы друг с другом.Apex Trigger-Salesforce перед вставкой

У меня проблема, так как триггер ниже не работает. Мое требование так же, как прежде, чем вставлять жалобу, сначала он проверяет идентификатор электронной почты и номер контакта, а затем будет регистрироваться жалоба.

trigger Demo on Complaint__c (before insert) { 
    Set<Id> customerIds = new Set<Id>(); 
    for (Shan__Complaint__c complaint : Trigger.new) { 
     customerIds.add(complaint.Shan__customer__c); 
    } 
    Map<String, Shan__cust__c> customers = 
     new Map<String, Shan__cust__c>([SELECT Shan__cust_contact__c, Shan__cust_email__c 
             FROM Shan__cust__c WHERE id IN: customerIds]); 
    for (Shan__Complaint__c complaint : Trigger.new) { 
     Shan__cust__c customer = customers.get(complaint.Shan__customer__c); 
     if (customer == null || complaint.Shan__E_mail__c == customer.Shan__cust_email__c 
      && complaint.Shan__Phone_Number__c == customer.Shan__cust_contact__c) { 
      complaint.adderror('Your phone and Email does not exists in out database '); 
     } 
    } 
} 

ответ

0

Этот триггер не должен компилироваться вообще.

Вы должны увидеть ошибки

переменная цикла должна иметь тип Complaint__c

Trigger.new является List<Complaint__c>

Итак, есть 2 ошибки:

for (Shan__Complaint__c complaint : Trigger.new) { 
    customerIds.add(complaint.Shan__customer__c); 
... 

for (Shan__Complaint__c complaint : Trigger.new) { 
    Shan__cust__c customer = customers.get(complaint.Shan__customer__c); 
... 
+0

это строка также неверна. 'Map customers = new Map ([SELECT Shan__cust_contact__c, Shan__cust_email__c FROM Shan__cust__c WHERE id IN: customerIds]);' создание такой карты будет отображать Shan_Cust__c.Id на Shan_Cust__c – willard

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