【问题标题】: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 上的触发器。谢谢!