salesforce零基础学习(一百四十)Record Type在实施过程中的考虑
本篇参考:
salesforce 零基础学习(二十九)Record Types简单介绍
https://help.salesforce.com/s/articleView?id=sf.customize_recordtype_considerations.htm&type=5
https://trailhead.salesforce.com/zh-CN/trailblazer-community/feed/0D54S00000FWK1gSAH
我在之前的博客中简单介绍过Record Type的使用,当时作为开发人员,需要考虑的就是根据需求,创建Record Type,设置 Picklist Values以及相关的 layout,然后就完成工作。 其实对于大部分的Salesforce从业者来说,基本在项目上都接触过Record Type,如果不知道Record Type是什么以及如何简单使用的可以移步之前的record type文档或者查看官方文档。作为既有系统的设置,或许简单修修补补或者不断增加逻辑很简单,如果系统第一次考虑要不要上 Record Type以及上的话,我们应该考虑哪些问题呢? 本篇我们以 Lightning环境进行归纳和整理。
一. 是否需要 Record Type
1. 业务需求
- 是否需要不同的流程:确定不同的组或部门是否需要不同的业务流程。Record Type可以实现不同的组或者部门显示不同的定制的布局和选项列表值。
- 数据分组:决定是否需要出于不同目的对同一对象的记录进行分组/分段。例如,潜在客户可以分为不同类型,例如“零售”和“企业”。
如果我们有这方面的需要,则可以启用 Record Type,否则不需要启用。
二. 上 Record Type前考虑点
1. 迁移和集成
数据迁移:需要有清晰的数据清洗的逻辑,是所有的历史数据都设置指定的 Record Type还是要基于逻辑对不同数据设置不同的Record Type。
历史数据可能存在owner是inactive的情况,可以基于上方的参考文档进行操作。
数据集成:如果上下游系统有对这个表进行CRUD操作,需要联系上下游关于 Record Type的改动以及继承相关文档。举个例子: 如果对方使用标准 REST API进行数据插入,我们需要告知相关team 如何获取到指定的 RecordTypeId 以及如何在requestBody中设置 RecordTypeId。如果集成系统获取salesforce系统的数据用于报表等操作,还需要告知相关team去进行filter来避免数据混乱。
2. Picklist Value
需要有清晰的逻辑关于不同的 Record Type所可以设置的 Picklist Value的值,如果Picklist Value进行了缩减,需要检查一下历史数据中的值是否有在范围之外的,如果存在并且需求确定,需要将将这个字段的 Restrict选项反选,上线后也要手动检查所有的 Picklist Values是否和预期相同。
3. Page Layout 以及 Lightning Record Page
Page Layout: 如果系统是 classic或者系统是Lightning 但是没有启用 dynamic form以及其他的部分相同,我们需要考虑通过 Page layout来实现不同的 Record Type显示不同的UI,需要清晰的设计来设置Laytout。
Lightning Record Page:如果系统启用了 Dynamic Form或者不同的Record Type需要展示的页面不同(不只是Layout),我们需要考虑 Lightning Record Page创建,原则上最好每个 Record Type设置一个相关的 Lightning Record Page来设置页面布局,并且要基于Record Type来分配页面的访问。
建议最后还要设置一个org默认的Lightning Record Page,即使最后没有满足的页面,我们还可以保证Salesforce可以重定向到我们设置的默认页面从而避免死循环。
4. Profile 以及 Permission Set
Profile和Permission Set都可以设置所可以访问的 Record Type。
如果系统基于 Profile来设计,设计者或者架构师需要考虑不同的 Profile所可以访问的 Record Type以及设置的 Default Record Type。
如果系统基于Permission Set来设计,设计者或者架构师需要考虑如何维护不同的人所对应的不同的 Record Type的访问权限设置。
不要使用Record Type作为访问控制机制。Profile Assignment只会控制对象的创建和编辑访问权限,但不控制读取访问权限。例如,Account有 Agency 以及Business两个Record Type,Sales Profile User只设置了Agency Record Type然后当前系统设置的Account的权限是 Public Read/Write,代表着Sales Profile User可以访问并且编辑Business Record Type的Account记录,只是无法创建而已。
5. Report & Dashboard & ListView
当我们启用Record Type以后,数据进行了分组。我们需要保证既有的 Report的Filter是业务所需要的,如果业务需要所有数据,则不必修改,如果只需要某个Record Type的数据,则需要增加 Filter来过滤指定的 Record Type。这个考虑适用于 Report 以及 Dashboard以及ListView。
6. Validation Rule & Automation
Validation Rules: 修改或创建VR以支持每种Record Type的特定需求。
Automation: 更改 workflows, process builders, flows, and approval processes 来处理不同的记录类型所对应的流程。
7. 自定义功能检查
自定义组件:如果org上有自定义的组件,比如 aura / lwc,如果只是通过 Record Id来获取数据,风险较小可以忽略。如果系统中有获取当前表的 Picklist Value或者列表检索等,需要检查并且做出适当的逻辑修改。
Trigger:需要检查一下当前的表的Trigger的逻辑是否针对指定的 record type并且做出相应的处理。同时需要检查父表或者关联表有没有trigge中对当前的表进行DML操作,如果有同样需要分析并且相关处理。
8. 测试和培训
测试:如果当前的表在业务中是独立的,很幸运我们相对来说好测试。如果这个表是一个比较复杂的表,在系统中有庞大的逻辑,我们需要准备 regression test的测试用例来进行充足的测试并且进行部署演练。
培训:我们需要整理好文档来告诉 end user如何使用 Record Type。这里包括两部分,一个是如何使用新增加的功能,另外一个是如何去调整 Report 以及Listview(如果他们有创建权限)。
针对功能培训,我们需要区分不同的场景然后做不同的培训,举个例子,如果一个Profile只有一个Record Type,对于用户来说其实是无感操作,可能就不需要培训UI上的操作的不同。如果Profile包含两个及以上,我们需要培训新的UI以及新的操作。
9. 可扩展性以及文档
当我们进行了一期的实施以后,我们需要整理好文档,关于部署的准备,测试的流程以及客户培训等,后续如果Record Type需要增加,我们可以参考既有的流程来规避一些潜在风险以及提高效率。
三. Record Type部署举例
我们在实际的需求确定以后,一定是在sandbox测试完成以后才可以进行部署的,这里推荐的是使用metadata api方式部署而不是change set。使用 metadata api的好处是我们从 retrieve -> deploy可以所见即所得,通过资源比对工具可以很直观的了解我们上了哪些,资源差异等。模拟的需求特别简单,Account表有两个 Record Type,Retail 以及 Enterprise。实现以下的需求:
- Admin, Sales,Support可以创建 Retail的Account,并且默认Record Type为Retail
- Admin, Sales, Marketing, Support可以创建Enterprise的Account,Marketing默认的Record Type为Enterprise
- Retail以及 enterprise拥有不同的UI,不同的Flexipage以及相关picklist values(一些picklist values相同并且全部选择)
针对上述需求部署的情况下,metadata xml list可以使用下述进行思考。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>Account.AccountSource</members>
<members>Account.Industry</members>
<name>CustomField</name>
</types> <types>
<members>Account.Enterprise</members>
<members>Account.Retail</members>
<name>RecordType</name>
</types> <types>
<members>Account_Record_Page</members>
<members>Enterprise_Record_Page</members>
<name>Flexipage</name>
</types> <!--
Profile 检索时,如果有特殊字符,比如冒号: 需要使用转义字符
-->
<types>
<members>Admin</members>
<members>Custom%3A Marketing Profile</members>
<members>Custom%3A Sales Profile</members>
<members>Custom%3A Support Profile</members>
<name>Profile</name>
</types> <types>
<members>Account-Retail Account Layout</members>
<members>Account-Enterprise Account Layout</members>
<name>Layout</name>
</types>
<version>61.0</version>
</Package> <!--
manual action:
1. 检查Record Type的picklist values
2. 检查 Page Layout Assignment
3. Flexipage 设置Assignment(手动配置比部署更容易)
-->
总结:本篇主要汇总了一下当我们想要启用 Record Type情况下,需要考虑哪些关键点从而将风险达到最低。当然需要考虑的不一定仅有这些,不同的表实施上以及考虑上可能还有一些别的区别,可以查看上方的官方文档进行更多的思考。篇中有错误欢迎指出,有不懂欢迎留言。
salesforce零基础学习(一百四十)Record Type在实施过程中的考虑的更多相关文章
- salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现
项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...
- salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件
在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- salesforce 零基础学习(六十八)http callout test class写法
此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...
- salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见
项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...
- salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)
本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...
- salesforce 零基础学习(二十九)Record Types简单介绍
在项目中我们可能会遇见这种情况,不同的Profile拥有不同的页面,页面中的PickList标签可能显示不同的值.这个时候,使用Record Types可以很便捷的搞定需求. Record Types ...
- salesforce 零基础学习(二十二)Test简单使用
本篇内容只是本人简单的mark开发中常出现的一些疑问,方便后期项目使用时奠定基础,如果对Test零基础童鞋,欢迎查看Test官方的使用介绍: https://help.salesforce.com/a ...
- salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)
Streaming API参考链接: https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_streaming ...
- salesforce零基础学习(八十六)Ajax Toolkit (VF页面中使用及javascript action使用)
Ajax Toolkit 参考文档:https://resources.docs.salesforce.com/212/latest/en-us/sfdc/pdf/apex_ajax.pdf 在项目中 ...
随机推荐
- Android 13 - Media框架(30)- ACodec(六)
关注公众号免费阅读全文,进入音视频开发技术分享群! 前一节我们了解了input buffer写入的流程,知道了起播写前几笔数据时会先获取graphic buffer,这一节我们就一起来了解下deque ...
- 美团一面:什么是CAS?有什么优缺点?我说我只用过AtomicInteger。。。。
引言 传统的并发控制手段,如使用synchronized关键字或者ReentrantLock等互斥锁机制,虽然能够有效防止资源的竞争冲突,但也可能带来额外的性能开销,如上下文切换.锁竞争导致的线程阻塞 ...
- Redisson 限流器源码分析
Redisson 限流器源码分析 对上篇文章网友评论给出问题进行解答:redis 的key 是否会过期 可以先阅读上篇文章: redis + AOP + 自定义注解实现接口限流 - 古渡蓝按 - 博客 ...
- Java中的包(Package)
# 包(Package) **为方便管理类(按照不同的功能管理类),解决同名问题的发生** - 使用`package关键字`修饰包 - **类名(全类名)=包名(地址)+类名简称** ```java ...
- Redis 常用的数据结构简介与实例测试【Redis 系列二】
〇.都有哪些数据结构? Redis 提供了较为丰富的数据类型,常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合).Zset(有序集合). 随着 Redis 版本的 ...
- 算法金 | 再见!!!KNN
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 KNN算法的工作原理简单直观,易于理解和实现,这使得它在各种应用场景中备受青睐. 我们 ...
- Azkaban快速入门
先说一些废话 因为之前自己工作中有用过Azkaban作为自动化任务调度工具,所以想参考自己之前的使用经验,总结一下关于Azkaban的使用,方便大家使用Azkaban快速实现企业级自动化任务 如何选择 ...
- jquery的全局函数 多库并存
// jQuery的全局函数 , 也称钩子函数 // 所谓的钩子函数 是 与 其他函数绑定的函数 // 作用是 监听 函数的执行 当函数执行到某个状态时 ...
- C#.NET 国密 BASE64编码的私钥提取16进制私钥 (锦州银行、建行轻应用)
C#.NET 国密 BASE64编码的私钥提取16进制私钥 (锦州银行.建行轻应用), 从BASE64编码的公钥中提取16进制字符串公钥, 从BASE64编码的私钥中提取16进制字符串私钥, 锦州银行 ...
- 知名火锅连锁企业,IT 团队如何在数千家门店中先于用户发现故障
该知名火锅连锁企业是中国领先的餐饮企业,上千家门店遍布全球,由于门店餐饮行业的特殊性,需要靠前部署服务,所以在每家餐厅中,会部署相应的服务器,及相应 IT 设备,本地会运行POS.会员.下单等业务.公 ...