2012-01-30 69 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插入都會通過。

一個更簡單的方法就是讓觸發器將名稱字段複製到自定義字段,然後在自定義字段定義中將其設置爲唯一。