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