防止在一個事務中循環調用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(){
//執行真正需要執行異步的邏輯
}
}