Триггер для предотвращения дублирования имен записей в системе продаж

Мне нужно предотвратить ввод повторяющихся имен. Это ограничение необходимо наложить с помощью триггера. Я хочу знать, как я могу ограничить выполнение операций DML. Не уверен в использовании .addError в объемном коде.

 Set<string> Seta= new Set<string>();
 for(oj__c o:trigger.new)
 {
   Seta.add(c.name);
 }

 List<oj__c> listoj= new List<oj__c>();
 listoj=[select id from oj__c where name in :Seta]
 if listoj.size()>0
 trigger.new.adderror('Cannot have duplicate name');// i know this line is wrong. How can i stop the DML statement from excuting?

person Prady    schedule 30.01.2012    source источник


Ответы (3)


Хорошую ссылку на то, что я искал, можно найти здесь.

http://www.salesforce.com/docs/developer/cookbook/Content/apex_dedupe.htm

person Prady    schedule 30.01.2012

Вы можете использовать addError с отдельными записями, которые затем должны отображаться против них в отчете в загрузчике данных, хотя, если вы хотите остановить все там, где оно есть, вы также можете просто создать исключение.

public class NamingException extends Exception {};

throw new NamingException('Found duplicate name');
person Matt Lacey    schedule 30.01.2012
comment
если бы я использовал addError для отдельных записей, тогда мне пришлось бы иметь запрос в цикле, не так ли? что может привести к превышению ограничений регулятора - person Prady; 30.01.2012
comment
я получил отличную ссылку на то, что мне нужно здесь salesforce.com/docs/ разработчик/поваренная книга/контент/apex_dedupe.htm - person Prady; 30.01.2012

В вашем коде есть ошибка, заключающаяся в том, что он не будет обнаруживать дубликаты в текущем пакете, например. будет выполнена вставка API из 5 строк с одинаковым именем.

Более простой способ сделать это — просто скопировать триггером поле имени в настраиваемое поле, а затем в определении настраиваемого поля сделать его уникальным.

person superfell    schedule 02.02.2012