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

一. 在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. jdk1.8 HashMap的实现

    在了解HashMap之前,我们先进行位运算知识的补充 1.Java 位运算:(都是二进制的运算) << :相当于乘以2的倍数  --->1<<4  =1*2*2*2*2 ...

  2. JavaSE基础知识(1)—初识Java

    一.JAVA的背景 JAVA本身隶属的公司的是sun公司(创始公司) JAVA创始人:詹姆斯 高斯林 09年被oracle收购 JAVA的前身是Oak 二.JAVA的版本 95年 JAVA诞生96年 ...

  3. MySQL优化(五) SQL 语句的优化 索引、explain

    一.索引 1.分类 (1)主键索引:当一张表的某个字段设置为主键时,该字段就是主键索引: (2)唯一索引:索引列中的值必须是唯一的,但是允许为空值(可以存在多个null): (3)普通索引:基本索引类 ...

  4. SpringBoot小新手。

    2018-09-27 最近在学习SpringBoot:教材 先是在https://start.spring.io/下载了工程.demo.zip 下载之后,导入Eclipse工程,pom.xml里面的& ...

  5. 学习:java集合

    java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, Jav ...

  6. 别人的Linux私房菜(23)软件安装RPM、SRPM、YUM

    RPM(RedHat Package Manager),不同Linux发行版发布的RPM文件甚至不同版本,不通用. SRPM为Source RPM,所提供的软件内容没有经过编译,格式为xxx.src. ...

  7. 别人的Linux私房菜(11)认识与学习BASH

    Linux下使用BASH   Bourne Again Shell        另外一种由用于Unix的伯克利大学的Bill Joy设计的C Shell 系统中合法的shell会写入到/etc/sh ...

  8. python_day1_变量

    一.变量 定义: 通俗来讲可变化的量称之为变量,专业的解释为:把程序运算的中间结果临时存到内存里,以备后面的代码继续调用,这几个名字的学名就叫做“变量” 用法: name = 'zzx' 其中name ...

  9. 卷积在深度学习中的作用(转自http://timdettmers.com/2015/03/26/convolution-deep-learning/)

    卷积可能是现在深入学习中最重要的概念.卷积网络和卷积网络将深度学习推向了几乎所有机器学习任务的最前沿.但是,卷积如此强大呢?它是如何工作的?在这篇博客文章中,我将解释卷积并将其与其他概念联系起来,以帮 ...

  10. azkaban disable 停用部分工作流

    在使用azkaban作为调度工具的时候,难免遇到只需要跑工作流某部分的情况,这时需要用到停用部分工作的操作, 如图: