SFDC 防止在一个事务中循环调用Apex Trigger,转载
防止在一个事务中循环调用trigger
学习目的:
- Trigger的循环调用--追踪trigger是否执行
- future方法是否执行 -- 追踪future的执行
salesforce不像java开发的平台,能够限定输入和输出。在salesforce里面可能有多个地方会去对同一个东西进行操作。比如工作流可能触发trigger,apex里面的更新操作可能触发trigger。这是salesforce追求多配置化,low-codeing的弊端之一。给了管理人和那些没有开发技能的人也可以进行对数据的操纵。
追踪trigger是否执行
图片展示的就是,当trigger触发trigger,然后工作流又循环触发。这个时候我们就要考虑如何避免这种死循环的操作。写代码的的时候可以考虑使用以下的代码框架
//使用静态变量,是因为在一个事务中静态变量只会初始化一次,并且作为全局变量,只有当事务终止,值才会被重置
public static Boolean firstCall = false;
if (!firstCall) {
//第一次触发
firstCall = true;
}else{
//再次触发
}
future方法是否执行
使用以下的框架就可以判断是否执行了future方法
public class someFutureOperations{
private static Boolean futureCallCalled = false;
public static void doFutureCalle(){
if (futureCallCalled || System.isFuture()) {
return;
}
futureCallCalled = true;
actualFutureCall();
}
@future
public static void actualFutureCall(){
//执行真正需要执行异步的逻辑
}
}
转载:
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41126799/article/details/88930361