覆盖自定义对象的删除方法

时间:2013-05-29 11:51:33

标签: salesforce apex-code

我们的实例中有一个自定义对象,实际上是一个联结对象。现在,如果删除关系,则删除联结对象中的记录。

我们希望更改此行为,以便将联结对象标记为已删除,但不进行物理删除(请理解我无法详细说明原因,有很好的商业理由这样做)。由于我们有多个客户端通过SOAP和REST API访问我们的实例,我想实现一个解决方案,我可以覆盖自定义对象的标准删除功能,只检查自定义字段is_deleted,而不是删除记录。

这可能吗?

干杯,

2 个答案:

答案 0 :(得分:0)

我想你不能在对象上放一个on-delete触发器?

如果可以,则只需添加触发器代码即可更新该字段,然后将错误附加到要删除的记录中(因此删除操作不会通过)。官方文档中有很多关于如何做到这一点的例子。

请记住将所有内容批量化(从列表中一次处理所有正在删除的记录)...

另一方面,SalesForce中删除的记录在删除后的15天内保存在组织的回收站中。因此,您也可以使用SELECT ... ALL ROWS查询表单从对象中选择它们。

答案 1 :(得分:0)

我认为你不能真正覆盖删除操作。您可以覆盖一个按钮(使用Visualforce页面),但如果从API触发删除,则无法以任何方式帮助您。

我怀疑你想假装用于记录被删除的API(SOAP,REST等)用户,而实际上是将它保留在某个地方?闻到一些阴暗的商业惯例,说实话,但无论如何,让我们假设它真的是合法的...当然,你不能突然在操作中抛出错误,因为你的最终用户会注意到。

我想我会选择一个隐藏的1对1匹配“阴影”对象并将每个动作同步到它。您需要在您的联结的插入/更新/删除/取消删除时触发将复制操作的触发器(不同之处在于此自定义“软删除”标志)。这有很多问题,比如存储使用但很好。

我想到的一件事是(如果我没记错的话),如果删除其中一个母版,则联结对象上的触发器不会触发。因此,如果它是一个真正的联结对象(你写的“行为像”),你也必须处理这个场景并将逻辑放入主对象的触发器中。

如果它不是真正的联结对象(即它有OwnerId字段可见)并且您的共享规则允许 - 也许您可以将记录的所有权转移到角色层次结构之外的某个特殊用户/队列,这样它就变得不可见了...但我怀疑它会起作用,最终删除应该看起来是成功完成的,对吧?也许与一些@future结合起来,立即取消删除它们&转移...仍然 - 凌乱!