利用Excel生成Salesforce字段依赖性

项目上经常会有配置字段依赖性的需求,一般来说,通过设置页面配置字段依赖性矩阵就可以了。

但当控制字段选项值及依赖字段选项值较多时,比如说,控制字段有50个选项值,依赖字段有650个,这样就会导致字段依赖性配置矩阵过大,配置起来很费时间,而且容易遗漏。

这种情况下,可以考虑通过Excel生成元数据,然后修改元数据文件生成字段依赖性,省时省力,且不容易出错。

关键词

元数据(metadata)、字段依赖性、Excel

元数据简介

首先,什么是元数据?

元数据是用来描述系统配置数据的数据。

Salesforce.com平台采用元数据驱动开发模式。无论是通过标准配置实现的功能,如对象、字段、页面布局、简档等,还是通过自定义开发实现的功能,如Visualforce页面、Lightning Component、Trigger、Apex类,都被定义成元数据存储在数据库中。

换句话说,所有能够通过配置实现的功能,如创建对象、创建不同类型字段、调整页面布局、调整简档权限等,理论上都可以通过修改元数据文件达到同样的效果。

字段依赖性的元数据结构

用Sublime工具把系统的元数据下载下来以后,首先可以看到,src目录下分别有描述批准过程(approvalProcesses)、Apex Class、页面布局(layouts)、对象(objects)等的元数据文件。

objects目录下是描述对象的元数据文件,包括标准对象及自定义对象的所有对象相关配置,我们选取一个已经配置好字段依赖性的对象为例:

为了简单起见,假设Account对象有2个选项列表字段:

其中一个选项列表字段叫“控制字段”,有2个选项值A和B;

另外一个选项列表字段叫“依赖字段”,有5个选项值A1,A2,B1,B2,B3;

这2个选项列表字段存在如下依赖关系:

我们先来观察一下这2个字段的元数据结构,先看"控制字段":

首先是fields节点,所有字段的元数据均以fields节点开始;

然后是fullName节点,也就是"控制字段"的API Name;

接下来是externalId节点,标识这个字段是否为external id;

然后是label节点,也就是这个字段的标签;

接下来是重点内容,选项列表字段的核心元数据:

首先是picklist节点,该节点下包含每个选项值的元数据;

接下来是picklistValues节点,即选项值A的元数据,包括fullName节点(选项值),default节点(是否为默认选项值);

然后是选项值B的元数据,结构上与选项值A完全一样;

后续的节点就不逐一介绍了;

然后,我们再来观察一下"依赖字段"的元数据结构:

结构上与"控制字段"的元数据基本一样,但是,有2个地方不太一样:

picklist节点下,多了一个controllingField节点,节点的值为"Controlling_Field__c",这不正是"控制字段"的API Name吗?

picklistValues节点下多了一个节点,controllingFieldValues节点。我们以选项值A2为例,controllingFieldValues节点值为A,这不正是控制字段的控制选项值吗?

不难发现如下规律:

"依赖字段"的元数据里会描述"控制字段"是哪一个字段;

"依赖字段"的选项列表值元数据会描述"控制字段"的控制选项值是什么;

那么,如果我们通过其他方式生成这些元数据,是否也可以建立字段依赖性呢?

Excel生成字段依赖性

首先,先删除"控制字段"和"依赖字段"间的依赖性关系,我们可以看到,删除依赖性后,"依赖字段"的元数据如下,controllingField节点和controllingFieldValues节点没了,结构上与"控制字段"完全一样:

用Excel按如下格式填充好"控制字段"列和"依赖字段"列:

然后,用如下公式在"元数据"列的C2单元格,生成选项值A1的元数据,然后填充生成其他选项值的元数据:

="

"&B2&"false"&A2&""

回到元数据文件,新增controllingField节点,并将所有的picklistValues节点用Excel里成的元数据替换:

保存。

或者说,保存到服务器。

接下来,看图:

其他注意事项

选项列表字段本身限制,比如最多1000个选项列表值;

选项列表字段作为控制字段或依赖字段的限制,比如控制字段最多只能有300个值;

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180811G161FY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券