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

1.當(dāng)數(shù)據(jù)進(jìn)行新增/修改操作時(shí),從DB中獲取原始數(shù)據(jù);

2.從request中加載新數(shù)據(jù)的value;

3.如果請(qǐng)求來(lái)自標(biāo)準(zhǔn)的UI,UI上面可以自動(dòng)check相關(guān)的pagelayout上的必填性校驗(yàn)等,相關(guān)字段必填性配置可以放在page layout做限制;

4.如果請(qǐng)求來(lái)自自定義的VF頁(yè)面或者apex進(jìn)行匿名塊操作,則先忽略相關(guān)pagelayout上的必填性校驗(yàn),執(zhí)行before trigger內(nèi)容;

5.運(yùn)行系統(tǒng)的校驗(yàn),比如字段級(jí)別的必填性,validation rule;

6.當(dāng)通過(guò)validation rule以后,執(zhí)行save操作,此時(shí)數(shù)據(jù)保存到DB,不過(guò)事務(wù)上還沒(méi)有commit,在after trigger及以后如果此obj有addError類似操作,會(huì)導(dǎo)致數(shù)據(jù)的rollback,簡(jiǎn)單demo:

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

 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('測(cè)試錯(cuò)誤提示信息'); 7             } 8         } 9     }10 }

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

理論上after trigger以前數(shù)據(jù)已經(jīng)保存到DB上了,但是因?yàn)閍fter操作對(duì)object進(jìn)行了addError操作,導(dǎo)致事務(wù)回滾,添加失敗。

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

 

7.執(zhí)行after trigger操作;

8.通過(guò)sharing rule分配相關(guān)數(shù)據(jù)共享操作;

9.執(zhí)行workflow rules,workflow rules可以執(zhí)行field update,如果進(jìn)行了field update以后會(huì)重新執(zhí)行before trigger,workflow rules可以設(shè)置field update只是進(jìn)行一次還是每次更改都會(huì)進(jìn)入workflow rules,這里根據(jù)需求好好選擇,避免和trigger作用發(fā)生死循環(huán);

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

11.提交事務(wù),此時(shí)才真正事務(wù)commit,7-10期間 如果有addError類似操作便會(huì)使數(shù)據(jù)rollback;

12.如果有email send操作,發(fā)送郵件。

大數(shù)據(jù)培訓(xùn),云培訓(xùn),數(shù)據(jù)挖掘培訓(xùn),云計(jì)算培訓(xùn),高端軟件開(kāi)發(fā)培訓(xùn),項(xiàng)目經(jīng)理培訓(xùn)

總結(jié):了解數(shù)據(jù)處理的順序無(wú)論對(duì)初學(xué)者還是有經(jīng)驗(yàn)的人來(lái)說(shuō)都是必要的,因?yàn)橛械臅r(shí)候,因?yàn)閳?zhí)行順序的問(wèn)題可能導(dǎo)致意想不到的錯(cuò)誤發(fā)生。千里之行,始于足下,打好基礎(chǔ)方能放眼未來(lái)。如果篇中有描述錯(cuò)誤的地方歡迎指出,有問(wèn)題歡迎留言。