salesforce零基础学习(八十八)项目中的零碎知识点小总结(二)
通过做项目以及群里面的一些大神的聊天,总结一下关于项目中的两个知识点,以后当做参考。
一. 在custom setting中配置集成接口信息后刷sandbox的问题
我们做项目时,经常会遇见和其他平台集成,比如和SAP等系统平台进行集成。因为salesforce开发模式大部分是dev -> full -> production. 所以当我们做类似callout等操作时,集成的账号密码或者Endpoint等通常要动态的配置。这种操作通常会配置在Custom Setting或者custom metadata type中。然而,因为某些开发规范性问题,我们无法保证dev或者full环境和生产代码或者配置是最新的或者说正确的。所以一定时间我们有可能需要进行刷sandbox操作。所以我们针对这种Custom Setting 需要设计好,免得生产刷到full或者dev将生产相关的配置刷下来,引发问题,或者每次刷新sandbox都需要进行重复的配置操作。
解决方案为在custom setting或者custom metadata type 创建完必要的字段后,manage数据的时候,根据项目的要求,分别配置dev/full/production的配置信息,程序中根据当前的org类型或者org的名称获取不同的配置信息。这样后期刷sandbox便不再需要考虑重复的配置操作。下面的内容以custom setting进行描述。
1.启用list类型的custom setting:现在custom setting中默认不可以选择list,如果需要选择list需要启用list custom setting type.

2. 针对Dev、Full、Production 均创建一套配置信息。

3.代码中根据 Organization以及URL类获取当前的org的类型(sandbox/production)以及sandbox类型(dev/full).
Integration_Setting__c integrationSetting;
Map<String,Integration_Setting__c> integrationSettingMap = Integration_Setting__c.getAll(); Organization currentOrganization = [SELECT IsSandbox from Organization limit 1]; //if current organization is sandbox, then return true; if current organization is production,then return false
if(!currentOrganization.IsSandbox) {
integrationSetting = integrationSettingMap.get('XX_Integration_Production');
} else {
//get dev or full sandbox integration setting information
String orgBaseURL = URL.getSalesforceBaseUrl().toExternalForm();
//each sandbox may have different single sign on URL,use contains function to identify which environment it is
//here simulate dev sandbox URL contains 'dev' and full sandbox URL contains 'full'
if(orgBaseURL.containsIgnoreCase('dev')) {
integrationSetting = integrationSettingMap.get('XX_Integration_Dev');
} else if(orgBaseURL.containsIgnoreCase('full')) {
integrationSetting = integrationSettingMap.get('XX_Integration_Full');
}
} System.debug(LoggingLevel.INFO, '*** integrationSetting: ' + JSON.serialize(integrationSetting));
(注:Organization的IsSandbox仅适用于API version在31及以上才可以使用)
二.某些用户针对某些场景下(Workflow/Trigger/Validation Rule)作为白名单用户
项目中,我们为了完成特定的业务或者进行特定的限制,会对表创建Workflow,Trigger,Validation Rule等等内容。然而,我们后期还是希望一些特定的用户有能力跳过这些校验(Validation Rule)或者不走相关的或者这个表的所有的Trigger,或者相关的Workflow Rule,即白名单用户。这种情况下,使用基于hierarchy的custom setting便可以搞定这种需求。
1.创建基于Hierarchy 的Custom Setting,设置三个布尔类型的变量,用于控制当前的用户是否有对Workflow/Trigger/Validation Rule的白名单权限,默认均为false。

2.针对指定的User或者Profile设置Hierarchy的数据,这里设置了一个User。

3. 逻辑中控制白名单逻辑。其中Workflow以及Validation Rule控制方式相同,这里只对其中一个进行描述。
1) Trigger中进行控制:项目现在针对Trigger基本上会采用Handler方式,所以只要在最外面控制是否需要调用Trigger便可以。Hierarchy的Custom Setting可以通过.getInstance(ProfileId/UserInfoId)来获取到Custom Setting的实例化对象。下面的例子为只要有Trigger的白名单权限,就不需要执行这个表的所有Trigger.
trigger CompanyInfoTrigger on Company_Info__c (before insert, before update) {
White_List_Setting__c whiteListSetting = White_List_Setting__c.getInstance(UserInfo.getUserId());
if(whiteListSetting != null && whiteListSetting.White_List_For_Trigger__c) {
return;
}
Triggers companyInfoTrigger = new Triggers();
if(TriggerExecutionHelper.enableExecuteF1) {
companyInfoTrigger.bind(Triggers.Evt.BeforeInsert, new F1Handler());
}
if(TriggerExecutionHelper.enableExecuteF2) {
companyInfoTrigger.bind(Triggers.Evt.BeforeInsert, new F2Handler());
}
companyInfoTrigger.Execute();
}
2)Workflow/Validation中进行控制:使用$Setup.CustomSettingName.FieldName可以获取到当前User对某个字段的访问权限,通过这种方式便可以进行逻辑判断。
demo的内容为只有指定的用户才可以将status设置为approved.

(注:Workflow/Validation Rule只可以访问hierarchy的Custom Setting)
总结:此篇内容主要是通过做项目以及前辈们总结的经验写的上面的两个注意点,有错误的地方欢迎指出,有更好的方案欢迎提出,有不懂的欢迎提问。
salesforce零基础学习(八十八)项目中的零碎知识点小总结(二)的更多相关文章
- salesforce零基础学习(九十)项目中的零碎知识点小总结(三)
本次的内容其实大部分人都遇到过,也知道解决方案.但是因为没有牢记于心,导致问题再次出现还是花费了一点时间去排查了原因.在此记录下来,好记性不如烂笔头,争取下次发现类似的现象可以直接就知道原因.废话少说 ...
- salesforce 零基础学习(十八)WorkFlow介绍及用法
说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配置workflow来完成以上 ...
- salesforce零基础学习(九十六)项目中的零碎知识点小总结(四)
本篇参考: https://developer.salesforce.com/docs/atlas.en-us.216.0.apexcode.meta/apexcode/apex_classes_ke ...
- salesforce零基础学习(九十八)Salesforce Connect & External Object
本篇参考: https://trailhead.salesforce.com/en/content/learn/modules/lightning_connect https://help.sales ...
- salesforce零基础学习(一百一十二)项目中的零碎知识点小总结(四)
本篇参考: https://trailblazer.salesforce.com/issues_view?id=a1p4V0000003znDQAQ https://salesforce.stacke ...
- salesforce零基础学习(七十二)项目中的零碎知识点小总结(一)
项目终于告一段落,虽然比较苦逼,不过也学到了好多知识,总结一下,以后当作参考. 一.visualforce标签中使用html相关的属性使用 曾经看文档没有看得仔细,导致开发的时候走了一些弯路.还好得到 ...
- salesforce零基础学习(一百零三)项目中的零碎知识点小总结(五)
本篇参考:Salesforce Admin篇(四) Security 之Two-Factor Authentication & Single Sign On https://developer ...
- salesforce零基础学习(九十八)Type浅谈
在Salesforce的世界,凡事皆Metadata. 先通过一句经常使用的代码带入一下: Account accountItem = (Account)JSON.deserialize(accoun ...
- salesforce 零基础学习(十九)Permission sets 讲解及设置
Permission sets以及Profile是常见的设置访问权限的方式. Profile规则为'who see what'.通过Profile可以将一类的用户设置相同的访问权限.对于有着相同Pro ...
随机推荐
- 【转载】Windows上那些值得推荐的良心软件-整理 easybcd 引导工具 easyuefi 引导工具
您查询的关键词是:清理dism知乎 以下是该网页在北京时间 2019年03月17日 21:56:16 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 htt ...
- 认识正则RegExp;
1.什么是正则??? 就是一条规则,用于检验字符串的格式,目标就是字符串. *只要是表单提交的数据都是字符串 2.正则的定义??? (1)var reg=new RegExp() (2)var reg ...
- [Hadoop]Hadoop章1 Hadoop原理解析
Hadoop是Apache软件基金会所开发的并行计算框架与分布式文件系统.最核心的模块包括Hadoop Common.HDFS与MapReduce. HDFS HDFS是Hadoop分布式文件系统(H ...
- 利用redis制作消息队列
redis在游戏服务器中的使用初探(一) 环境搭建redis在游戏服务器中的使用初探(二) 客户端开源库选择redis在游戏服务器中的使用初探(三) 信息存储redis在游戏服务器中的使用初探(四) ...
- memmove、memcpy和memccpy简介
memmove.memcpy和memccpy三个函数都是内存的拷贝,从一个缓冲区拷贝到另一个缓冲区.memmove(void *dest,void*src,int count)memcpy(void ...
- 关于git 命令的一些事
克隆代码命令 http://www.yiibai.com/git/git_clone.html 关键:得实现新建本地仓库文件夹 ==> git clone 远程网址 git 上传主要代码:htt ...
- linux之用户密码破解的操作
一 无引导介质救援模式破解root用户密码 1 启动虚拟用户,在GRUB启动画面停留的那段时间,用上下键选择启动项. 2 用‘e’键进入你选择的启动项 ,然后用上下键将光标移动到“linux16... ...
- VS中编译出现——计算机中丢失XINPUT1_4.dll解决办法
如果用DX SDK 2010的版本,编译时可能就会出现这种问题. 解决办法,在链接库时把XInput.lib换成XINPUT9_1_0.LIB,重新编译就可以了. 用老操作系统 + 老DX SDK + ...
- unique(未完成)
const unique = arr => { const sortedArr = arr.sort((a, b) => a > b); const first = sortedAr ...
- 展示博客---Alpha版本展示
Alpha版本展示 1. 团队成员的简介和个人博客地址,团队的源码仓库地址. 成员 简介 个人博客地址 祁泽文 被动态统计图搞扒下的我 http://www.cnblogs.com/jiaowoxia ...