【问题标题】:Trigger to restrict duplicate record for a particular type触发器以限制特定类型的重复记录
【发布时间】:2023-03-08 10:26:01
【问题描述】:

我有一个自定义对象同意和偏好,这是孩子的帐户。 要求是根据通道字段限制重复记录。 例如,如果我创建了频道电子邮件的同意,当我尝试使用与频道相同的电子邮件创建第二条记录时,它应该会抛出错误。

以下是我编写的代码,但它只允许我创建一条记录。对于第二条记录,无论频道如何,它都会向我抛出错误:

Trigger code:

set<string> newChannelSet = new set<string>();
    set<string> dbChannelSet = new set<string>();
    for(PE_ConsentPreferences__c newCon : trigger.new){
        newChannelSet.add(newCon.PE_Channel__c);
    }
 for(PE_ConsentPreferences__c dbcon : [select id, PE_Channel__c from PE_ConsentPreferences__c where PE_Channel__c IN: newChannelSet]){

        dbChannelSet.add(dbcon.PE_Channel__c);
    }    
    for(PE_ConsentPreferences__c newConsent : trigger.new){

        if(dbChannelSet.contains(newConsent.PE_Channel__c))

            newConsent.addError('You are inserting Duplicate record');

    }

【问题讨论】:

    标签: salesforce salesforce-lightning


    【解决方案1】:

    您的触发器阻止了您,因为您没有在查询中按帐户过滤。因此,它可以让您为每种渠道类型添加 1 条记录,仅此而已。

    我建议不要用代码来做。它会变得比你想象的还要快。

    1. 您需要停止插入。为此,您需要与数据库中已有的值进行比较(很好),但您还应该防止使用 Data Loader 进行大规模加载。因此,您需要与trigger.new 中的其他记录进行比较。如果您将逻辑从before insert 移动到after insert,您可以简化它,然后您可以从数据库中查询所有内容......但它很弱,这是一个应该阻止保存的验证,它在逻辑上属于before。它会浪费帐户 ID,也许是一些自动编号......不优雅。
    2. 在更新时,您应该处理频道的更新以及帐户 ID 的更新(重新设置为另一条记录!)。否则,我将使用 acc1 创建同意并将其移至 acc2。
    3. 取消删除方案怎么样?我创建 1 个同意,删除它,创建相同的同意并从回收站恢复第一个。如果你没有报道after undelete - 轰隆隆,爆头。

    改为使用纯配置路由(或简单触发器),让数据库为您处理。

    1. 制作一个帮助文本字段,将其标记为唯一。
    2. 编写一个工作流/流程构建器/简单触发器(插入之前,更新之前),写入Account__c + ' ' + PE_Channel__c 的此字段组合。条件可能是ISNEW() || ISCHANGED(Account__c) || ISCHANGED(PE_Channel__c)
    3. 可选择准备数据修复以更新现有记录。

    工作完成了,你现在不能破坏它。如果您需要允许更多组合(第三个字段),管理员可以轻松扩展它。只要您的总字符数少于 255 个。

    或者(甚至更好)有duplicate matching 规则;)在你做任何定制之前先试一试?也许检查一下https://trailhead.salesforce.com/en/content/learn/modules/sales_admin_duplicate_management

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      相关资源
      最近更新 更多