9

salesforce零基础学习(一百二十六) Picklist Value Set 优缺点和使用探讨 - zero.zh...

 1 year ago
source link: https://www.cnblogs.com/zero-zyq/p/17181805.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

salesforce零基础学习(一百二十六) Picklist Value Set 优缺点和使用探讨

本篇参考:https://help.salesforce.com/s/articleView?id=sf.fields_creating_global_picklists.htm&type=5

当我们创建Picklist 字段时,比如很多表很多字段都会用到同样的 picklist value时,我们通常会使用 Global Picklist。入口为 set up搜索 picklsit以后选择 Picklist Value Sets然后针对业务上需要的场景,进行字段创建以及picklist value维护。

910966-20230305211657187-1649920702.png

当我们创建picklist类型字段,可以选择基于 global picklist还是基于换行的手动输入。

910966-20230305211911730-552918759.png

我们以这两个类型进行metadata查看

910966-20230305212255933-237915876.png

针对 Code_By_Customize__c,此字段通过换行方式去输入。

<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
    <fullName>Code_By_Customize__c</fullName>
    <externalId>false</externalId>
    <label>Code By Customize</label>
    <required>false</required>
    <trackFeedHistory>false</trackFeedHistory>
    <type>Picklist</type>
    <valueSet>
        <restricted>true</restricted>
        <valueSetDefinition>
            <sorted>true</sorted>
            <value>
                <fullName>AAA</fullName>
                <default>false</default>
                <label>AAA</label>
            </value>
            <value>
                <fullName>BBB</fullName>
                <default>false</default>
                <label>BBB</label>
            </value>
            <value>
                <fullName>CCC</fullName>
                <default>false</default>
                <label>CCC</label>
            </value>
            <value>
                <fullName>DDD</fullName>
                <default>false</default>
                <label>DDD</label>
            </value>
            <value>
                <fullName>EEE</fullName>
                <default>false</default>
                <label>EEE</label>
            </value>
            <value>
                <fullName>FFF</fullName>
                <default>false</default>
                <label>FFF</label>
            </value>
            <value>
                <fullName>GGG</fullName>
                <default>false</default>
                <label>GGG</label>
            </value>
        </valueSetDefinition>
    </valueSet>
</CustomField>

针对Code_By_Global_List__c,此字段用于选择指定的picklist value set。

<?xml version="1.0" encoding="UTF-8"?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
    <fullName>Code_By_Global_List__c</fullName>
    <externalId>false</externalId>
    <label>Code By Global List</label>
    <required>false</required>
    <trackFeedHistory>false</trackFeedHistory>
    <type>Picklist</type>
    <valueSet>
        <restricted>true</restricted>
        <valueSetName>Code</valueSetName>
    </valueSet>
</CustomField>

Picklist Value Set的好处是一个地方维护,其他地方引用就好,维护方便,并且如果针对这个 picklist value有变更,只需要改动一个地方,其他的便会自动的使用最新的版本的值。

坏处往往也来源于好处,因为绑定的太狠,所以当最开始的设计满足了 picklist value set的需求,picklist字段都绑定了同样的picklist value set,后续如果有其他的需要要求有一些新增一个字段值,有一些不新增的时候,便带来了特别大的痛苦(不要以为是小概率事件,随着时间推移,需求增多,这种往往是会发生的,除非设计人员最开始就会告知有此种风险)。比如现在需要新增一个 III的值,有一些字段需要,有一些不需要,这种就很难处理。

一旦发生了这种情况,两种解决方案。

1. 删除原有字段,新建字段(需要先注释掉所有的字段的引用)。这种解决方案在部署的时候同样痛苦,因为无论是change set还是 ant方式都无法直接部署上去,会报错:Error: Cannot set picklist values when a global picklist is referenced on the field

参考:https://success.salesforce.com/issues_view?id=a1p3A0000008g7wQAA  (类似错误)

只能先将生产或者其他环境的删除,然后在做部署。除此以外,当删除操作以后,还会影响以前报表(如果有报表使用了此字段,删除再重新创建,原有报表内容不会自动的追加回来)

2. 需要保证使用 global picklist value set的字段所在的表拥有 record type. 当 picklist value set中新建 value时,下方会选择是否将新加的值默认给引用到 picklist value set的表的所有 record type,可以先将它反选,然后对于需要的字段,进行配置即可。这个也需要前提条件,就是保证表有record type。

910966-20230305215224573-804721248.png

总结:使用与否都是双刃剑,当时满足的需求,随着后续的变更可能改修成本更高,所以使用以前想好场景,想好后续如果扩展所需要的解决方案。针对 global picklist value set的使用,个人建议还是当前表有 record type情况下使用,否则后续容易出现上述类型的潜在风险,并且后续的改动成本以及部署成本会增加。篇中有错误欢迎指出,有不懂欢迎留言。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK