Apex開發指南--使用靜態變量做追蹤器

防止在一個事務中循環調用trigger

學習目的:
1,trigger的循環調用--追蹤trigger是否執行
2,future方法是否執行 -- 追蹤future的執行

salesforce不想java開發的平臺,能夠限定輸入和輸出。在salesforce裏面可能有多個地方會去對同一個東西進行操作。比如工作流可能觸發trigger,apex裏面的更新操作可能觸發trigger。這是salesforce追求多配置化,少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(){
		//執行真正需要執行異步的邏輯
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章