初學salesforce 的apex開發,trigger可以說的開發者的基本功了。
trigger的定義模式如下:
trigger triggername on objectname (trigger_events)
triggername相當於trigger的命名,objectname指trigger繫結的類的名字,trigger_events指能引起**觸發的條件,主要有insert,update,delete,merge,upsert,undelete六種,本文主要介紹insert,update和delete三種。
trigger的型別包括兩種
建立乙個測試用例testtrigger__c,裡面含欄位status__c,觸發器**如下:
trigger testtrigger on testtrigger__c (before insert,before update,before delete,after insert,after update,after delete)
//更新前
if(trigger.isupdate)
//刪除前
if(trigger.isdelete)
} if(trigger.isafter)
//更新後
if(trigger.isupdate)
//刪除後
if(trigger.isdelete)
}}
新建乙個
testtrigger__c物件,控制台輸出可以看到:
*******插入前trigger.new********(testtrigger__c:)
*******插入前trigger.newmap********null
*******插入前trigger.old********null
*******插入前trigger.oldmap********null
*******插入後trigger.new********(testtrigger__c:)
*******插入後trigger.newmap********}
*******插入後trigger.old********null
*******插入後trigger.oldmap********null
修改物件,控制台輸出看到:
*******更新前trigger.new********(testtrigger__c:)
*******更新前trigger.newmap********}
*******更新前trigger.old********(testtrigger__c:)
*******更新前trigger.oldmap********}
*******更新後trigger.new********(testtrigger__c:)
*******更新後trigger.newmap********}
*******更新後trigger.old********(testtrigger__c:)
*******更新後trigger.oldmap********}
刪除物件,控制台輸出可以看到:
*******刪除前trigger.new********null
*******刪除前trigger.newmap********null
*******刪除前trigger.old********(testtrigger__c:)
*******刪除前trigger.oldmap********}
*******刪除後trigger.new********null
*******刪除後trigger.newmap********null
*******刪除後trigger.old********(testtrigger__c:)
*******刪除後trigger.oldmap********}
上述結果可以看到,trigger.new等變數不是在任何時候都會有值,當它實際上等於null的時候,在trigger_events下是沒有意義的。
對於trigger中的new/old變數需要注意的是,它的實質的乙個list集合的儲存形式,裡面包含的不僅只是乙個物件的值,更多的是針對批處理的情況、apex開發後期使用dataloader匯入使用者資料就是很典型的一種批處理場景。所以在開發的時候,我們更多的要針對多條資料進行處理。
listlist_test = trigger.new
if(trigger.isbefore)
}}
每次新建testtrigger__c物件的時候,將狀態都修改為「狀態二」
而對於trigger中的newmap/oldmap變數,實質是乙個map儲存了物件的id和物件,通過id可以取出對應的sobject。
下面舉個例子
trigger testtrigger on testtrigger__c (after update)
handler.onafterupdate(trigger.new,trigger.oldmap);
}}
/**
* author:小青
* time:2017-8-21
* function:testtrigger__c的狀態發生變化
* */
public class testtriggerhandle
listlist_update = [select id,status__c from testtrigger__c where id in :set_id];
for(testtrigger__c test : advlist)
}}
以上是常用的觸發器開發的方法,邏輯處理放在乙個handler類中,在觸發器中呼叫handler類的方法進行處理,從而實現**的分離,便於控制**的執行順序以及避免業務邏輯過於複雜。
最後,對於觸發器的開發需要理解,例如trigger.new在before insert中,不需要進行dml操作就可以直接修改記錄的資料,然後就能進行儲存,而在after update中,並不能直接使用trigger.new所代表是資料,因為這條記錄已經被插入到資料庫中,這時候直接進行dml操作會報錯,所以需要我們用乙個set記錄下對應的id然後再進行一次查詢,對這個查詢出來的集合重新dml操作就沒有問題了。
餐館那些事之 Mediator Pattern
1.概述 mediator pattern 封裝了 一組物件之間的互動,使得物件之間保持松耦合的關係,避免物件維護複雜的關係互動。簡單的說,mediator封裝的是互動。類圖 object例項之間的互動,統一由mediator維護。2.例項 餐館有cook和waiter,cook之間需要彼此交流配合...
前端那些事之 jQuery
1.jquery是什麼 乙個js的框架,可以方便的使用js 2 什麼是jquery物件 是由jquery封裝後的dom物件 注意 與dom物件的方法不同,不可以混用,但是可以相互轉換 3.基本語法 jquery物件.方法 4.得到jquery物件 1 選擇器 基本選擇器 id class eleme...
Http之Auth的那些事
謹以此文獻給那些需要實現http auth的 程式猿 們。關於http auth的文件不多。rfc在 wiki在 使用http auth需要在server端配置http auth資訊 一般是webserver啟動的時候從配置檔案裡面讀取相關資訊 我用中文簡述一下http auth的過程 一次典型的訪...