Apex | before trigger 與 after trigger

Apex trigger有兩種類型:before trigger和after trigger策州。在多數(shù)情況下淋淀,before trigger和after trigger可以互相替代使用性宏,但也有一些情況下踩验,它們不能相互替代。在這篇筆記中我們就來分析下before trigger與after trigger的異同亮瓷。

一琴拧、基礎(chǔ)知識(shí)

在正式開始前,我們先回顧下Apex trigger的基礎(chǔ)知識(shí)嘱支。

  1. trigger(觸發(fā)器)允許我們?cè)趕alesforce記錄發(fā)生改變后執(zhí)行某些操作蚓胸。定義一個(gè)trigger的語法如下:
    trigger TriggerName on ObjectName (trigger_events) {
    //code_block
    }

其中挣饥,trigger_events的值可以是:

  • before insert
  • before update
  • before delete
  • after insert
  • after update
  • after delete
  • after undelete
  1. 所有觸發(fā)器都定義了允許開發(fā)人員訪問運(yùn)行時(shí)記錄的隱式變量。這些隱式變量可以幫助我們更好地對(duì)數(shù)據(jù)進(jìn)行操作沛膳。
變量 用途
isInsert 如果trigger是由于插入操作而觸發(fā)的扔枫,則返回true。
oldMap 返回Id和舊記錄的map集合锹安,只在update和delete trigger中有效短荐。
old 返回舊記錄的列表,只在update和delete trigger中有效叹哭。
…… 更多請(qǐng)參考官方文檔Trigger Context Variables
  1. trigger有兩種類型:before trigger和after trigger忍宋。
  • before trigger:在記錄保存到數(shù)據(jù)庫之前對(duì)記錄進(jìn)行更新或驗(yàn)證。
  • after trigger:訪問由系統(tǒng)設(shè)置的字段值(例如記錄的Id或LastModifiedDate字段)风罩,并影響其他記錄中的更改糠排。After trigger的記錄是只讀的
二超升、before trigger與after trigger
before trigger

對(duì)于before trigger入宦,記錄還尚未保存到數(shù)據(jù)庫中,因此室琢,不能對(duì)記錄做查詢操作乾闰,例如:List<Account> accList = [Select Id, Name From Account Where Id in :Trigger.New]是錯(cuò)誤的。此外盈滴,Before trigger的好處是你可以改變Trigger.New的值涯肩,而不用借助DML操作。

after trigger

對(duì)于after trigger巢钓,記錄已經(jīng)保存到數(shù)據(jù)庫宽菜,所以你可以對(duì)記錄做查詢。但是竿报,你不能試圖改變Trigger.New的值铅乡,否則就會(huì)報(bào)錯(cuò):System.FinalException: Record is read-only。如果你一定要改變數(shù)據(jù)的值烈菌,你就得構(gòu)造一個(gè)list阵幸,再做DML操作。例如:

List<Account> accList = new List<Account>();
for(Account acc: Trigger.New)
{
  Account newAcc = new Account();
  newAcc.Id = acc.Id;
  newAcc.Name = acc.Name + 'Test'
  accList.add(newAcc);
}
update accList;

看完上面的內(nèi)容芽世,你對(duì)before trigger和after trigger就有了初步的了解挚赊,但你可能還是不知道什么時(shí)候該用什么。別著急济瓢!一張圖告訴你答案:



所以荠割,啥時(shí)候應(yīng)該用after trigger呢?上圖告訴我們,當(dāng)你在插入記錄并且需要使用記錄ID時(shí)蔑鹦,用after trigger夺克!其他時(shí)候直接用before trigger。

事實(shí)上嚎朽,95%的trigger都是before trigger铺纽,因?yàn)樗?jiǎn)單,但當(dāng)你需要使用記錄ID時(shí)哟忍,就不得不用after trigger了狡门。


參考:
http://sfdcinpractice.com/index.php/2017/01/09/3-6-difference-trigger/
http://www.sfdc99.com/2014/01/25/use-vs-triggers/


題外話:最近忙到不可開交,好累嗚嗚嗚~~ 大晚上的碼字不易锅很,喜歡記得點(diǎn)贊^ O ^

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末其馏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子爆安,更是在濱河造成了極大的恐慌尝偎,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹏控,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肤寝,警方通過查閱死者的電腦和手機(jī)当辐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鲤看,“玉大人缘揪,你說我怎么就攤上這事∫骞穑” “怎么了找筝?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)慷吊。 經(jīng)常有香客問我袖裕,道長(zhǎng),這世上最難降的妖魔是什么溉瓶? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任急鳄,我火速辦了婚禮,結(jié)果婚禮上堰酿,老公的妹妹穿的比我還像新娘疾宏。我一直安慰自己,他們只是感情好触创,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布坎藐。 她就那樣靜靜地躺著,像睡著了一般哼绑。 火紅的嫁衣襯著肌膚如雪岩馍。 梳的紋絲不亂的頭發(fā)上碉咆,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音兼雄,去河邊找鬼吟逝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛赦肋,可吹牛的內(nèi)容都是我干的块攒。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼佃乘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼囱井!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起趣避,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤庞呕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后程帕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體住练,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年愁拭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了讲逛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡岭埠,死狀恐怖盏混,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惜论,我是刑警寧澤许赃,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站馆类,受9級(jí)特大地震影響混聊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜乾巧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一技羔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卧抗,春花似錦藤滥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春标沪,著一層夾襖步出監(jiān)牢的瞬間榄攀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工金句, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留檩赢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓违寞,卻偏偏與公主長(zhǎng)得像贞瞒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子趁曼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • Apex Triggers Apex 觸發(fā)器(Apex Triggers)是一種特殊的 Apex 類军浆。它的主要作用...
    程程哥閱讀 1,261評(píng)論 1 3
  • 1.1 基本結(jié)構(gòu) PL/SQL程序由三個(gè)塊組成,即聲明部分挡闰、執(zhí)行部分乒融、異常處理部分。 1.2 命名規(guī)則 1.3 記...
    慢清塵閱讀 3,835評(píng)論 3 14
  • 看本篇之前可以相應(yīng)閱讀以下Trigger相關(guān)文章: https://developer.salesforce.co...
    zero_zhang閱讀 1,944評(píng)論 0 0
  • 一摄悯、GET:獲取資源 GET方法用來請(qǐng)求訪問已被URI識(shí)別的資源赞季。指定的資源經(jīng)服務(wù)器端解析后返回響應(yīng)內(nèi)容。即如果請(qǐng)...
    李丹linda閱讀 254評(píng)論 0 0
  • - (void)viewDidLoad { [super viewDidLoad]; // Do any addi...
    指尖的跳動(dòng)閱讀 915評(píng)論 0 0