【发布时间】:2011-11-03 17:59:07
【问题描述】:
我有一个使用映射的批量触发器,以避免遇到 SOQL 调控器限制。此触发器还使用静态类变量进行递归和限制查询。
我正在做的是在对象上启动批量操作(例如插入或更新)时,在这种情况下为联系人对象,然后触发器将在第一个触发器上构建相关帐户的映射,并将使用那些其余触发器触发的地图。
这是一个运行良好的操作示例,但仅适用于更新后和插入后触发器操作:
检查静态类变量是否为真。
如果变量不是真正的构建映射。
将静态类变量设置为 true。
执行触发器操作。
对于插入/更新触发器,会话状态保持不变,静态类变量直到批量操作结束后才会重置。
但是对于删除前触发器,似乎没有会话状态,并且每次删除记录时都会重置会话。会话被重置,但是对于记录的批量删除,管理器限制是累积的。因此,使用删除前触发器,即使使用映射,soql 查询计数也会一直计数到臭名昭著的“太多 Sql 查询”限制,即删除超过 100 条记录。
任何关于如何防止遇到 SOQL 限制的想法将不胜感激。我无法在任何地方找到任何内容。
【问题讨论】:
标签: triggers salesforce bulk soql cascading-deletes