3

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

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

这可能吗?

干杯,

4

2 回答 2

0

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

我怀疑您想向 API(SOAP、REST 等)用户假装记录已被删除,而实际上将其保留在某处?老实说,这闻起来像是一些阴暗的商业行为,但无论如何,让我们假设它确实是合法的......当然,您不能突然在操作中抛出错误,因为您的最终用户会注意到。

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

想到的一件事是(如果我没记错的话)如果您删除其中一个主节点,则不会触发联结对象上的触发器。因此,如果它是一个真正的联结对象(您写了“行为类似”),您也必须处理这种情况并将逻辑放入主对象的触发器中。

如果它不是真正的连接对象(即它具有OwnerId可见的字段)并且您的共享规则允许 - 也许您可以将记录的所有权转移到角色层次结构之外的某些特殊用户/队列,因此它变得不可见......但我怀疑它'会工作,最后删除应该会成功完成,对吗?也许与一些@future会立即取消删除它们并转移的组合......仍然 - 混乱!

于 2013-05-29T18:03:25.697 回答
0

我想您不能只在对象上放置一个删除触发器吗?

如果可以,则只需添加触发代码以更新字段,然后将错误附加到正在删除的记录(因此删除不会通过)。官方文档中有很多关于如何执行此操作的示例。

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

附带说明一下,SalesForce 中已删除的记录在删除后会保留在组织的回收站中 15 天。因此,您还可以使用 SELECT...ALL ROWS 查询表单从对象中选择它们。

于 2013-05-29T16:02:12.940 回答