批量删除触发器(太多的Soql语句)Salesforce.com

问题描述:

我有一个使用映射的批量触发器,以避免遇到SOQL调控器限制。该触发器还使用静态类变量进行递归和限制查询。批量删除触发器(太多的Soql语句)Salesforce.com

我正在做的是当一个批量操作(如插入或更新)在对象上触发对象,在这种情况下触发对象,然后触发器将在第一个触发器上构建相关帐户的映射,并将使用这些地图用于其余触发点火。

这里是伟大的工作,操作的例子,但仅用于更新&插入扳机操作之后:

  1. 检查静态类变量是不正确的。

  2. 如果变量不是真的构建映射。

  3. 将静态类变量设置为true。

  4. 执行触发操作。

对于插入/更新触发器,会话状态将保持不变,直到批量操作结束后才会重置静态类变量。

但是,对于之前的删除触发器,似乎没有会话状态,并且每次删除记录时都会重置会话。会话重置,但州长限制对于批量删除记录是累积的。因此,即使使用映射,在删除触发器之前,soql查询计数仍会继续计入臭名昭着的“Too Many Sql Queries”限制,以删除超过100条记录。

有关如何防止进入SOQL限制的任何想法将非常感激。我无法在任何地方找到任何东西。

您可以选择的一个选项是使用触发器安排batch apex class for execution。对于哪个对象是启用级联删除的对象,请使用触发器创建批处理实例,并将其传递给它的源ID列表。

然后在批次类的执行方法中,您可以为每个批次构建映射等,并在那里执行删除。在同步执行的牺牲方面,批次顶点的调节器限制要高得多,即过程通常会在几秒钟内启动。

除此之外,它可能仅仅是优化代码的一种情况,这样级联删除总是在尽可能大的列表上工作(最多可达200​​个限制),或者也可以使用Master Detail关系来照顾你的一些删除操作?