【问题标题】:Prevent a record from being deleted防止记录被删除
【发布时间】:2019-09-10 15:44:37
【问题描述】:

如果对象“A”的阶段字段具有“已完成”作为值,我试图防止删除作为对象“A”的子对象的记录。

如何使用触发器来满足条件? 如果触发器不能做到这一点,有没有更好的方法呢? 提前谢谢你。

【问题讨论】:

标签: triggers salesforce apex


【解决方案1】:

如果关系是主从关系,您可以对主对象执行汇总汇总和验证规则,例如 ISPICKVAL(Stage__c, 'Completed') && PRIORVALUE(Rollup__c) > Rollup__c

如果它只是一个查找 - 在子对象上触发。验证规则不会在被删除的记录上触发。

类似这样的东西(可能有语法错误,但只是为了给你一个想法)

trigger ObjectATrigger on ObjectA__c (before delete){

    Map<Id, Parent__c> parents = new Map<Id, Parent__c>([SELECT Id
        FROM Parent__c 
        WHERE Stage__c = 'Completed' 
            AND Id IN (SELECT Parent__c FROM ObjectA__c WHERE Id IN :trigger.old)]);

    for(ObjectA__c o : trigger.old){
        if(parents.containsKey(o.Parent__c)){
            o.addError('Nice try');
        }
    }
}

【讨论】:

    【解决方案2】:

    很抱歉问的问题如此含糊。如果相关父级的状态字段值设置为“已完成”,我实际上对阻止“文件”对象上的插入/更新/删除感到好奇。对此的答案是利用 ContentDocument 和 ContentDocumentLink 上的触发器。谢谢!

    【讨论】: