salesforce 零基礎學習(六十九)當新增/修改一條記錄以后發生了什么(適合初學者)


salesforce開發中,我們會對object進行很多的操作,比如對object設置字段的必填性唯一性等,設置validation rule實現一下相關的字段的邏輯校驗,設置workflow實現某個字段的更改或者發送郵件等,設置trigger實現before和after的數據相關邏輯處理,設置sharing setting實現數據share,設置master detail的rollup summary字段等。當這些操作鋪天蓋地的上來時,你還搞得清楚當新增/修改一條記錄以后到底怎么運行的嗎?有了下面的圖以后(從國外博客盜的圖,忘記了鏈接,不好意思),相信可以以后對於這些操作的處理順序變得游刃有余。

1.當數據進行新增/修改操作時,從DB中獲取原始數據;

2.從request中加載新數據的value;

3.如果請求來自標准的UI,UI上面可以自動check相關的pagelayout上的必填性校驗等,相關字段必填性配置可以放在page layout做限制;

4.如果請求來自自定義的VF頁面或者apex進行匿名塊操作,則先忽略相關pagelayout上的必填性校驗,執行before trigger內容;

5.運行系統的校驗,比如字段級別的必填性,validation rule;

6.當通過validation rule以后,執行save操作,此時數據保存到DB,不過事務上還沒有commit,在after trigger及以后如果此obj有addError類似操作,會導致數據的rollback,簡單demo:

 1 trigger GoodsTrigger on Goods__c (after insert) {
 2     if(trigger.isAfter) {
 3         if(trigger.isInsert) {
 4             List<Goods__c> goodsList = trigger.new;
 5             for(Goods__c goods : goodsList) {
 6                 goods.addError('測試錯誤提示信息');
 7             }
 8         }
 9     }
10 }

理論上after trigger以前數據已經保存到DB上了,但是因為after操作對object進行了addError操作,導致事務回滾,添加失敗。

 

7.執行after trigger操作;

8.通過sharing rule分配相關數據共享操作;

9.執行workflow rules,workflow rules可以執行field update,如果進行了field update以后會重新執行before trigger,workflow rules可以設置field update只是進行一次還是每次更改都會進入workflow rules,這里根據需求好好選擇,避免和trigger作用發生死循環;

10.如果有rollup summary字段,更新rollup summary;

11.提交事務,此時才真正事務commit,7-10期間 如果有addError類似操作便會使數據rollback;

12.如果有email send操作,發送郵件。

總結:了解數據處理的順序無論對初學者還是有經驗的人來說都是必要的,因為有的時候,因為執行順序的問題可能導致意想不到的錯誤發生。千里之行,始於足下,打好基礎方能放眼未來。如果篇中有描述錯誤的地方歡迎指出,有問題歡迎留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM