防止自定义对象中的重复记录

时间:2011-11-10 04:50:48

标签: salesforce apex-code

我有一个自定义对象。有一些字段组合,例如month_ c,Project _c,contact_ c和role _c,它们将记录确定为唯一。

我可以在插入之前编写一个触发器来检查是否有任何已存在相同组合的记录。我想问的问题是

如何让插入停止。一旦我发现已有记录,那么它应该不插入记录。它不需要抛出/显示错误。

由于

Prady

3 个答案:

答案 0 :(得分:2)

几天前,我发现了一个非常有用且简单的解决方案(在ForceTree.com文章中),这使我无法编写触发器。它允许您使用工作流规则和自定义字段组合字段以检查唯一性。

这是一个演练: http://www.forcetree.com/2010/07/unique-field-combination-in-salesforce.html

答案 1 :(得分:2)

虽然其他人已经用更好的解决方案回答了这个问题(通常非代码解决方案对于系统的最终用户来说更灵活),但是停止插入特定记录的答案是向该记录上的字段添加错误

例如,如果我插入帐户,我可能会这样:

for(Account sAcct : trigger.new)
{
    if(sAcct.Name == 'DeniedAccount')
    {
        sAcct.Name.addError('This is a denied account.');
    }
}

另一种方法是创建一个扩展Exception的类,然后抛出该异常类的新实例,这将阻止处理传递给触发器的所有记录而不是特定记录。

答案 2 :(得分:1)

我在Salesforce中有类似的情况。它通过创建一个字段来处理,该字段包含一个值,该值由保证唯一性所需的所有值组成(在您的情况下,month_c,Project_c,contact_c和role_c)。然后,选择该字段的“唯一”复选框。重复项目现在将被丢弃。

在我的情况下,这个新字段由外部程序填充(并推送到Salesforce)。在您的情况下,您需要在触发器中填写值。我认为这比在触发器中执行SOQL查询更有效,但我没有做任何检查来确认这一点。