1
我有幾個對象(1個自定義對象稱爲約會和事件對象),我試圖同步。所以我有1個觸發每個對象搜索和更新記錄。問題是,這些觸發器將繼續遞歸運行,因爲每次更新約會時,事件也會更新並且觸發器繼續觸發,而且當然salesforce不接受它。在Salesforce中遞歸地更新2個對象的觸發器
任何想法如何克服這一點?
由於
我有幾個對象(1個自定義對象稱爲約會和事件對象),我試圖同步。所以我有1個觸發每個對象搜索和更新記錄。問題是,這些觸發器將繼續遞歸運行,因爲每次更新約會時,事件也會更新並且觸發器繼續觸發,而且當然salesforce不接受它。在Salesforce中遞歸地更新2個對象的觸發器
任何想法如何克服這一點?
由於
最簡單方法是有一個包含初始化爲假的靜態布爾變量的頂點類。然後在每個觸發器,你會檢查這個變量的狀態:
trigger MyTrigger on MyObject (after update)
{
if(CStaticTracker.bHasTriggerFired == false)
{
CStaticTracker.bHasTriggerFired = true;
// do your work and update the other object here
// shouldn't need this but let's play safe!
CStaticTracker.bHasTriggerFired = false;
}
}
其結果是,當然,當觸發一個運行時,它會將此變量設置爲true,並防止循環觸發從執行if語句中包含的任何邏輯。當然,這可能會導致一些級聯,但只要不在其中一個觸發器中調用另一個更新,它就會停止。
祝你好運!
在第二次觸發我應該檢查CStaticTracker.bHasTriggerFired == false? – Prady
您可能想使用兩個布爾值來指示每個布爾值的狀態,但我認爲在您的情況下,您只需要在'CStaticTrack.bHasTriggerFired == false'中使用相同的代碼,以便第二個代碼不會嘗試更新初始記錄。 –