2012-01-30 68 views
2

我需要防止输入重复名称。此限制需要使用触发器来施加。我想知道如何限制DML操作的发生。不确定在批量代码中使用.addError。触发器以防止salesforce中出现重复记录名称

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? 

回答

1

您可以使用addError与个人记录则应该表现出对他们在的DataLoader的报告,但如果你想停止一切在那里那么你也可以只是抛出一个异常。

public class NamingException extends Exception {}; 

throw new NamingException('Found duplicate name'); 
+0

如果我要在单个记录上使用addError,那么我将不得不在循环内部查询不是吗?这可能会导致超过州长限制 – Prady 2012-01-30 07:36:22

+0

我得到了一个很好的参考,我需要在这里http://www.salesforce.com/docs/developer/cookbook/Content/apex_dedupe.htm – Prady 2012-01-30 08:19:49

0

你代码中有,它不会在当前批次,例如内发现受骗者中的错误5行所有相同名称的API插入都会通过。

一个更简单的方法就是让触发器将名称字段复制到自定义字段,然后在自定义字段定义中将其设置为唯一。