通过做项目以及群里面的一些大神的聊天,总结一下关于项目中的两个知识点,以后当做参考。

一. 在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零基础学习(八十八)项目中的零碎知识点小总结(二)的更多相关文章

  1. salesforce零基础学习(九十)项目中的零碎知识点小总结(三)

    本次的内容其实大部分人都遇到过,也知道解决方案.但是因为没有牢记于心,导致问题再次出现还是花费了一点时间去排查了原因.在此记录下来,好记性不如烂笔头,争取下次发现类似的现象可以直接就知道原因.废话少说 ...

  2. salesforce 零基础学习(十八)WorkFlow介绍及用法

    说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配置workflow来完成以上 ...

  3. salesforce零基础学习(九十六)项目中的零碎知识点小总结(四)

    本篇参考: https://developer.salesforce.com/docs/atlas.en-us.216.0.apexcode.meta/apexcode/apex_classes_ke ...

  4. salesforce零基础学习(九十八)Salesforce Connect & External Object

    本篇参考: https://trailhead.salesforce.com/en/content/learn/modules/lightning_connect https://help.sales ...

  5. salesforce零基础学习(一百一十二)项目中的零碎知识点小总结(四)

    本篇参考: https://trailblazer.salesforce.com/issues_view?id=a1p4V0000003znDQAQ https://salesforce.stacke ...

  6. salesforce零基础学习(七十二)项目中的零碎知识点小总结(一)

    项目终于告一段落,虽然比较苦逼,不过也学到了好多知识,总结一下,以后当作参考. 一.visualforce标签中使用html相关的属性使用 曾经看文档没有看得仔细,导致开发的时候走了一些弯路.还好得到 ...

  7. salesforce零基础学习(一百零三)项目中的零碎知识点小总结(五)

    本篇参考:Salesforce Admin篇(四) Security 之Two-Factor Authentication & Single Sign On https://developer ...

  8. salesforce零基础学习(九十八)Type浅谈

    在Salesforce的世界,凡事皆Metadata. 先通过一句经常使用的代码带入一下: Account accountItem = (Account)JSON.deserialize(accoun ...

  9. salesforce 零基础学习(十九)Permission sets 讲解及设置

    Permission sets以及Profile是常见的设置访问权限的方式. Profile规则为'who see what'.通过Profile可以将一类的用户设置相同的访问权限.对于有着相同Pro ...

随机推荐

  1. Linux驱动之异常处理体系结构简析

    异常的概念在单片机中也接触过,它的意思是让CPU可以暂停当前的事情,跳到异常处理程序去执行.以前写单片机裸机程序属于前后台程序,前台指的就是mian函数里的while(1)大循环,后台指的就是产生异常 ...

  2. Python中的urllib

    urllib提供了一系列URL的功能. Get urllib的request模块可以非常方便的抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP响应: 例如,对豆瓣的一个URLht ...

  3. vue中鼠标移入字体下面显示颜色并改变字体颜色的问题

    <template> <div class="smart_nav" :class="{'fixedTop':fixedTop}"> &l ...

  4. UVa 11481 Arrange the Numbers (组合数学)

    题意:给定 n,m,k,问你在 1 ~ n 的排列中,前 m 个恰好有 k 个不在自己位置的排列有多少个. 析:枚举 m+1 ~ n 中有多少个恰好在自己位置,这个是C(n-m, i),然后前面选出 ...

  5. HDMI EDID 处理过程

    DDC的参数 EDID是一种VESA 标准数据格式,其中包含有关监视器及其性能的参数,包括供应商信息.最大图像大小.颜色设置.厂商预设置.频率范围的限制以及显示器名和序列号的字符串.EDID数据标准: ...

  6. Codeforces Round #539--1113B - Sasha and Magnetic Machines

    https://codeforces.com/contest/1113/problem/B 思想不难,但是在比较大小的时候,我选择了很笨的方法,我用两个数变化之后的差值大小来进行选择,然后最后再进行数 ...

  7. Golang 调用 Python 代码

    go 中的 cgo 模块可以让 go 无缝调用 c 或者 c++ 的代码,而 python 本身就是个 c 库,自然也可以由 cgo 直接调用,前提是指定正确的编译条件,如 Python.h 头文件( ...

  8. .NET Core微服务之路:基于gRPC服务发现与服务治理的方案

    重温最少化集群搭建,我相信很多朋友都已经搭建出来,基于Watch机制也实现了出来,相信也有很多朋友有了自己的实现思路,但是,很多朋友有个疑问,我API和服务分离好了,怎么通过服务中心进行发现呢,这个过 ...

  9. 关于JavaScript的操作

    一:js基础. 1. var是定义js变量的关键字. 如: var leng=5;定义一个变量为5 var length = 16; // Number 通过数字字面量赋值 var points = ...

  10. 【UNR #1】火车管理(主席树)

    [UNR #1]火车管理(主席树) 好好的代码被 \(extra\ test\) 卡常了...我就放一个目前最快的版本吧... 题意简化: 有 \(n\) 个栈,\(m\) 次操作. 将 \(x\) ...