有時候,項目中我們需要設置類似白名單的功能,即某些用戶或者某種Profile的用戶不走一些校驗或者走一些校驗,這時,使用Custom Settings功能可以很好的解決這一需求。
Custom Settings創建類似於Custom Object,但是兩者用法上有一些區別:Custom Setting可以通過條件配置來區分特定的用戶,或者Profile。
Custom Settings可以應用到很多場景,因為可以通過特定用戶和Profile進行配置,所以設置白名單或者相反的功能很容易,除此之外還可以應用到其他場景,根據他的功能自行來使用。
Custom Setting有兩種類型:
1.List Custom Settings:用於創建一組靜態的數據;
2.Hierarchy Custom Settings:通過指定的Profile或者用戶設置指定的數據。
兩種選擇上通常可以選擇第二種,因為第二種用起來更加靈活,如果確定數據是固定的也可以選擇第一種。
接下來的步驟用來實現配置Custom Setting的用戶不走某種校驗,沒有配置Custom Setting的用戶需要走某種校驗的功能。
一.創建步驟:
1.Setup->Build->Develop->Custom Settings,進入后選擇new
2.填寫基本信息后save
3.點擊new按鈕添加需要的字段
4.點擊上圖的manage,添加紀錄並進行記錄分配
5.分配完成,這里我們看一下下圖描述,當type為List情況,選擇上方的new,當type為hierarchy情況下,選擇下方的new按鈕
二.程序實現調用
Custom Setting調用方式和sObject方式基本相同。需求為當添加一條Goods,當不是白名單的用戶,走Validate校驗時,要求GoodsPrice__c必須大於GoodsCostPrice__c,當然需求是隨便編的。。。
調用可參看:https://help.salesforce.com/HTViewHelpDoc?id=cs_accessing.htm&language=en_US
Goods的Trigger代碼如下:
trigger GoodsTrigger on Goods__c (before insert) { if(trigger.isBefore) { if(trigger.isInsert) { GoodsValidateWhiteList__c currentGoodsValidateWhiteList = GoodsValidateWhiteList__c.getInstance(UserInfo.getUserId());if(currentGoodsValidateWhiteList == null || currentGoodsValidateWhiteList.IsActive__c == false ||
currentGoodsValidateWhiteList.IsVisible__c == false) { for(Goods__c goods : trigger.new) { if(goods.GoodsPrice__c < goods.GoodsCostPrice__c) { goods.addError('GoodsPrice應該不小於GoodsCostPrice'); } } } } } }
三.運行效果顯示
1.當使用配置的白名單用戶登錄時,當GoodsPrice小於GoodsCostPrice也無所謂,因為不走validate.
2.當使用其他用戶登錄時,由於沒有配置白名單,需要校驗GoodsPrice和GoodsCostPrice.
總結:使用Custom Setting可以更細致的針對Profile或者User進行數據分配,如果有類似需求情況下,此種方式會更加高效實現功能。如果篇中有描述錯誤的地方,歡迎批評指正,如果有不懂得地方歡迎留言。