如何在APEX中创建一个在对象被销毁之前运行的解构器(或类似物)?

时间:2012-02-10 15:38:51

标签: salesforce apex-code force.com

我的应用程序有许多聚合字段,需要在更改,添加或删除任何相关记录时进行更新。关系和计算有些牵连,所以我创建了一个类来处理所有相关表的所有计算。计算中涉及一些SOQL和DML开销,因此该类会批量处理所有内容。

我希望此类上的updateAll()方法对于已添加到其队列的所有记录的每个请求运行不超过一次。但是,在这个计算器对象被销毁之前,APEX中似乎没有“解构器式”功能可以自动调用。

在APEX中实施此模式的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

是的,没有办法检测或预测对象破坏,因为它本质上是JSP在后台(嘘,他们不想让你知道,它是“没有软件”的东西;)ir可能跟随它的终生机制但你不能依赖它。

我们实际上在触发器或报告中处理我们的聚合(取决于是否需要存储聚合)。触发器还接收批次作为列表而不是一行一行,这允许批量聚合并允许我们满足讨厌的调控器。不幸的是,如果您有多表聚合,则需要为所有这些聚合提供触发器,并为每个批次重新运行它们

答案 1 :(得分:1)

这就是我的所作所为。我创建了一个Calculator类,它重新计算~10表/对象关系中的每个相关聚合/计算字段。我在每个对象上使用了触发器,使计算器类在相关对象族的集合上运行到已更改的对象。我在计算器类上使用了一个静态变量来检查计算器是否在每个触发器中运行,这样如果它当前没有运行,它们只会调用计算器。它运作良好。有点低效,但仍然低于州长限制并且非常好地工作。而且,我可以随之成长......