SFDC 防止在一个事务中循环调用Apex Trigger,转载

防止在一个事务中循环调用trigger

学习目的:

  1. Trigger的循环调用--追踪trigger是否执行
  2. 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

posted @ 2021-04-28 17:46  Victor-Wei  阅读(15)  评论(0编辑  收藏  举报