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

一. 在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. [leetcode]88. Merge Sorted Array归并有序数组

    Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note: T ...

  2. Python爬虫项目--爬取链家热门城市新房

    本次实战是利用爬虫爬取链家的新房(声明: 内容仅用于学习交流, 请勿用作商业用途) 环境 win8, python 3.7, pycharm 正文 1. 目标网站分析 通过分析, 找出相关url, 确 ...

  3. protobuff 编译注意事项

    把protoc.exe增加到环境变量path,这样方便运行protoc 生成C++代码  protoc -I=Proto文件路径 –cpp_out=指定输出.h和.cc的目录 Proto文件 具体参数 ...

  4. 查找 管道 exec

    #查找150天为使用的文件并列出find -type f -mtime +150 -exec ls -ltr {} \;#查找150天内120外的文件find -type f -mtime -150 ...

  5. 操作系统学习笔记(三) windows内存管理

    //系统物理页面是由 (Page Frame Number Database )简称PFN数据库来进行管理,实际上是一个数组,每个物理页面都对应一个PFN项. 进程的地址空间是通过VAD(Virtua ...

  6. javascript的异步编程

    同步与异步 介绍异步之前,回顾一下,所谓同步编程,就是计算机一行一行按顺序依次执行代码,当前代码任务耗时执行会阻塞后续代码的执行. 同步编程,即是一种典型的请求-响应模型,当请求调用一个函数或方法后, ...

  7. x64 assembler fun-facts(转载)

    原文地址 While implementing the x64 built-in assembler for Delphi 64bit, I got to “know” the AMD64/EM64T ...

  8. left join on 和where中条件的放置位置

    转自:http://blog.csdn.net/muxiaoshan/article/details/7617533 select * from td  left join (select case_ ...

  9. [solution] JZOJ-5458 质数

    [solution] JZOJ-5458 质数 题面 Description 小X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小X 认为,质数是一切自然数起源的地方. 在小X ...

  10. Android-Java-构造方法内存图

    描述Dog对象: package android.java.oop07; // 描述Dog对象/实体 public class Dog { private String name; private i ...