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

Salesforce 覆盖自定义对象的删除方法,salesforce,apex-code,Salesforce,Apex Code,我们的实例中有一个自定义对象,它实际上是一个连接对象。现在,如果删除了关系,则会删除连接对象中的记录 我们希望将此行为更改为将连接对象标记为已删除,而不是实际删除(请理解,我无法详细说明原因,因为有充分的商业理由这样做)。由于我们有多个客户机通过SOAP和REST API访问我们的实例,因此我想实现一个解决方案,通过该解决方案,我覆盖自定义对象的标准删除功能,只检查自定义字段是否被删除,而不是删除记录 这可能吗 干杯 Dan我想你不能在对象上放一个on delete触发器 如果可以,只需添加触发

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

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

这可能吗

干杯


Dan

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

如果可以,只需添加触发器代码来更新字段,然后将错误附加到要删除的记录上(这样删除就不会进行)。官方文件中有很多关于如何做到这一点的例子

请记住将所有内容都打包(一次从列表中删除所有记录)


另一方面,SalesForce中删除的记录在删除后会在组织的回收站中保留15天。所以你也可以从对象中选择它们,通过使用选择。。。所有行查询表单。

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

我怀疑你们想向API(SOAP、REST等)用户假装记录被删除了,而实际上却保留在某个地方?老实说,闻起来像是一些阴暗的商业行为,但不管怎样,让我们假设它真的是合法的。。。当然,您不能突然在操作中抛出错误,因为最终用户会注意到

我想我应该使用一个隐藏的1对1匹配的“阴影”对象,并将每个动作同步到它。在连接的insert/update/delete/undelete上需要一个触发器来复制操作(不同之处在于这个自定义的“软删除”标志)。这有很多问题,比如存储使用率,但也有很多问题

我想到的一件事是(如果我没记错的话)如果你删除一个主节点,连接对象上的触发器不会触发。因此,如果它是一个真正的连接对象(您编写了“acts like”),那么您也必须处理这个场景,并将逻辑放入主对象的触发器中


如果它不是一个真正的连接对象(即它有可见的
OwnerId
字段),并且您的共享规则允许-也许您可以将记录的所有权转移到角色层次结构之外的某个特殊用户/队列,使其不可见。。。但我怀疑它会起作用,最终删除应该会成功完成,对吗?也许结合一些
@future
会立即取消删除并转移。。。还是乱七八糟

我不想隐藏记录。它是关于在触发删除操作时设置记录已删除标志,并防止记录被删除。拉取数据时,人们仍然需要考虑删除标志,但这是次要的。您必须抛出异常或使用
addError()
方法来阻止删除操作。我认为这将停止事务(我怀疑您能否在同一触发器中更新它们)。仔细阅读。我想你必须在删除之前写一个
,设置你的标志,允许操作进行(无加法器等),并包含@future立即取消删除它们…我将尝试on-delete触发器并报告。