本篇参考:

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在实施过程中的考虑的更多相关文章

  1. salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现

    项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...

  2. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

    在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...

  3. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  4. salesforce 零基础学习(六十八)http callout test class写法

    此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...

  5. salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

    项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...

  6. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)

    本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...

  7. salesforce 零基础学习(二十九)Record Types简单介绍

    在项目中我们可能会遇见这种情况,不同的Profile拥有不同的页面,页面中的PickList标签可能显示不同的值.这个时候,使用Record Types可以很便捷的搞定需求. Record Types ...

  8. salesforce 零基础学习(二十二)Test简单使用

    本篇内容只是本人简单的mark开发中常出现的一些疑问,方便后期项目使用时奠定基础,如果对Test零基础童鞋,欢迎查看Test官方的使用介绍: https://help.salesforce.com/a ...

  9. salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)

    Streaming API参考链接: https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_streaming ...

  10. salesforce零基础学习(八十六)Ajax Toolkit (VF页面中使用及javascript action使用)

    Ajax Toolkit 参考文档:https://resources.docs.salesforce.com/212/latest/en-us/sfdc/pdf/apex_ajax.pdf 在项目中 ...

随机推荐

  1. Django——自定义前端上传文件

    from django.db import models class Mytb(models.Model): file = models.FileField(upload_to='uploads/') ...

  2. Linux命令行优化,历史记录优化

    #命令行优化: echo "export PS1='\[\033[01;31m\]\u\[\033[00m\]@\[\033[01;32m\]\h\[\033[00m\][\[\033[01 ...

  3. firewall防火墙基础配置

    Firewalld防火墙 Centos7 中集成了防火墙管理工具, Firewall系统动态防火墙管理器是作为默认的防火墙工具. 它支持规则动态更新,并加入zone区域概念. Firewalld防火墙 ...

  4. H264 H265 分析小工具

    1.在调试 H264 H265 编码的流数据的时候,有时候需要打印没有nalu的类型和数量,自己写了一个小工具 使用方式: p.p1 { margin: 0; font: 22px Menlo; co ...

  5. Java反射获取字段的属性值及对比两个对象的属性值null差异赋值,递归算法查找

    package com.example.demo; import java.lang.reflect.Field; /** * 需求描述:同一类的不同对象,如果某个字段的null则从另外的一个对象中赋 ...

  6. 搭建第一个web项目

    实现使用: 1.创建一个普通java文件 2.Java文件的类名实现HttpServlet 3.重写service方法 4.在WEB-INF下的web.xml中添加请求与servlet类的映射关系 定 ...

  7. LLM学习笔记

    1. 评估榜单 1.1. C-Eval C-Eval 是一个全面的中文基础模型评估套件.它包含了13948个多项选择题,涵盖了52个不同的学科和四个难度级别. https://cevalbenchma ...

  8. 浅谈k8s中cni0和docker0的关系和区别

    最近在复习k8s网络方面的知识,查看之前学习时整理的笔记和文档还有过往自己总结的博客之后发现一个问题,就是在有关flannel和calico这两个k8s网络插件的文章和博客中,会涉及到cni0和doc ...

  9. C#/.NET/.NET Core优秀项目和框架2024年6月简报

    前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍.功能特点.使用方式以及部分功能截图 ...

  10. 3568F-翼辉SylixOS国产操作系统演示案例