2015-01-11 5 views
0

в нижеследующем примере кода. Я хочу сравнить адрес электронной почты и контактный номер объекта клиента и жалобы. жалоба и клиент находятся в поиске. я хочу, чтобы выход, как если бы перед регистрацией совместимого, он должен проверить тот же адрес электронной почты, и номер телефона должен быть в записи клиента.Salesforce Apex Trigeer

триггер Demo на Complaint__c (перед вставкой) {

if(trigger.isBefore) 
{ 
    if(trigger.isInsert) 
    { 
     for(Shan__Complaint__c a:Trigger.new) 
     { 
      for(Shan__bsnl_customer__c b:Trigger.new) 
       if(a.Shan__Phone_Number_del__c== b.Shan__cust_contact__c && a.Shan__E_mail_del__c==b.Shan__cust_email__c) 
       { 
         a.adderror('Customer is not in Database'); 

       } 
     } 

    } 

ответ

0

Несколько вещей здесь. Во-первых, если вы определяете этот триггер для запуска перед вставкой, ваши операторы if, чтобы проверить, что это до вставки, являются избыточными.

Во-вторых, Trigger.new представляет собой набор вставленных объектов, в этом случае я принимаю объекты типа Shan__Complaint__c, поэтому вы не сможете магическим образом получить любые другие типы объектов из коллекции, Повторите попытку с помощью Shan__bsnl_customer__c здесь.

Что вам нужно сделать, это сделать запрос для соответствующих объектов Shan__bsnl_customer__c, а затем проверить их.

Что-то вроде этого должно быть достаточно, чтобы вы начали. Я использовал Shan__CustomerId__c для отношений, поскольку вы не указали его в своем вопросе, убедитесь, что вы заменили его на имя реального поля. Я также сохранил логику в конечный, если заявление, как вы выразились, хотя от чтения на ваш вопрос, и сообщение об ошибке, это звучит для меня, как вы хотите, чтобы они были! = Вместо ==

Set<Id> customerIds = new Set<Id>(); 

for (Shan__Complaint__c complaint : Trigger.new) 
{ 
    //get a list of Customer Ids to query 
    customerIds.add(complaint.Shan__CustomerId__c); // replace field name here 
} 

//query the customer objects 
Map<Id, Shan__bsnl_customer__c> customers = new Map<Id, Shan__bsnl_customer__c>(
    [SELECT Id, Shan__cust_contact__c, Shan__cust_email__c 
     FROM Shan__bsnl_customer__c 
     WHERE Id IN :customerIds];  

for (Shan__Complaint__c complaint : Trigger.new) 
{ 
    //get the right customer -- replace field name with correct value 
    Shan__bsnl_customer__c customer = customers.get(complaint.Shan__CustomerId__c); 

    //add null check in case no customer found 
    if (customer == null || 
     (complaint.Shan__Phone_Number_del__c == customer.Shan__cust_contact__c 
     && complaint.Shan__E_mail_del__c == customer.Shan__cust_email__c)) 
    { 
      complaint.addError('Customer is not in Database'); 
    } 
} 

Я сделал предположение, что, если клиент не найден (например, поле отношения поиска клиента пустое), то это также состояние ошибки, похоже, что это было бы основано на вашем вопросе.

Как я уже сказал, я бы также рассмотрел условия в вашем окончательном утверждении if, они, похоже, противоречат вопросу, иначе этот код или что-то подобное должно выполнить то, что вы хотите.

Я думаю, вы также выиграете от дальнейшего чтения на триггерах, в частности, следующее:

Trigger Context Variables

Common Bulk Trigger Idioms

Trigger and Bulk Request Best Practices

+0

я хочу клиент поле поиска должно быть пустым –

+0

Вашего оригинальным вопрос говорит, что вы хотите проверить, не указан ли адрес электронной почты и номер телефона в записи клиента - если вы хотите, чтобы поле поиска клиента было пустым то, конечно, это всегда будет ложным? Извините, но я действительно не понимаю, что вы хотите, читая его с оригинальным вопросом. –

+0

Я хочу проверить детали клиента, такие как адрес электронной почты и номер телефона, если номер телефона и адрес электронной почты совпадают, тогда только клиент может подать заявку на регистрацию! –

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