2012-01-30 12 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を使用することができます。

public class NamingException extends Exception {}; 

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

個々のレコードでaddErrorを使用する場合は、ループ内でクエリを実行する必要がありますか?超過ガバナの制限を引き起こす可能性があります。 – Prady

+0

私はここで私が必要としているものに優れたリファレンスを持っています。http://www.salesforce.com/docs/developer/cookbook/Content/apex_dedupe.htm – Prady

0

あなたのコードは、それが現在のバッチ、例えば内dupesを発見しないというバグがあります5行のAPIの挿入は、すべて同じ名前で行われます。

これを行う簡単な方法は、名前フィールドをカスタムフィールドにコピーしてから、カスタムフィールド定義で独自のものに設定することです。

関連する問題