2017-10-05 130 views
0

我已經創建了更新後觸發以下,但我無法把它保存,我不太undetstand爲什麼它不工作Salesforce的更新後觸發

trigger Adhoc_Approval_process_trigger on Ad_Hoc_Approval__c (after update) { 

    list<Ad_Hoc_Approval__c> ladh= new list<Ad_Hoc_Approval__c>(); 
    list<Ad_Hoc_Approval__c> query=[select Status__c,Submitted_for_Approval_Date__c from Ad_Hoc_Approval__c]; 
    for(Ad_Hoc_Approval__c adh : query) 
    { 
     if(adh.Status__c =='Submitted for Approval') 
     { 
      adh.Submitted_for_Approval_Date__c=Date.today(); 
      ladh.add(adh); 
     } 

    } 

    update ladh; 

} 

我也它轉換成更新觸發之前,它的做工精細,任何人都可以請幫助我瞭解爲什麼,

trigger Adhoc_Approval_process_trigger on Ad_Hoc_Approval__c (before update) { 

     for(Ad_Hoc_Approval__c adh : trigger.new) 
     { 
      if(adh.Status__c =='Submitted for Approval') 
      { 
       adh.Submitted_for_Approval_Date__c=Date.today(); 

      } 

     } 



    } 

非常感謝

回答

1

你的意思是無法保存,因爲它不編譯?呃,看起來很好看,有什麼錯誤?

你的第一個版本最終會成爲一個永無止境的循環:)更新 - >更新 - >更新...更不用說查詢沒有任何WHERE子句,所以它最終會爆炸,一旦你達到10,0001記錄...

第二個版本更好:)只適用於當前觸發器的範圍和「更新前」,你可以免費保存到數據庫。

+0

感謝您的迴應,如果我錯了,請糾正我,您不能在同一對象的後觸發器中使用更新DML,但是如果DML更新其他對象,我們應該很好,正確嗎? – Sam

+0

通常情況下,您無法獲得「無法鎖定行」錯誤。如果你真的需要它,那麼有一個竅門,但是確保它不會進入無限循環並最終因違反州長限制而終止是你的工作。但是你可以自由地插入,更新,刪除不在'trigger.new'範圍內的任何其他對象。 – eyescream

+0

現在有道理,非常感謝 – Sam