使用Salesforce Tooling API更新自定义字段picklist值集报错如何解决
问题原因
- 传入的picklist值对象缺少必填的
fullName字段:Salesforce Tooling API要求每个picklist选项必须同时指定fullName(存储在数据库中的API名称,和界面展示的label对应),仅传label会被系统判定为无效值,因此触发「至少需要一个值」的报错。 - 空值字段的序列化问题:
color、description、isActive字段传入None时,会被序列化为null,而Tooling API对这类字段的空值处理有严格校验,也可能导致请求被判定为无效。
解决步骤
- 给每个picklist值对象添加
fullName字段,值和label保持一致即可(如果没有特殊的API名需求) - 删除不必要的空值字段,或者显式传入合法的布尔/字符串值,不要传
None - 修正后的payload参考如下:
payload = { "Metadata": { "valueSet": { "valueSetDefinition": { "value": [ { 'default': False, 'label': 'Agilysis', 'fullName': 'Agilysis', 'isActive': True } ], "sorted": True, }, "restricted": False, } }, }
- 如果是在原有picklist的基础上追加选项,而不是全量覆盖,需要先调用GET接口拉取当前所有的picklist值,把新选项追加到
value数组后再提交PATCH请求,否则原有选项会被清空。
注意事项
- 若该picklist字段绑定的是全局共享值集,直接更新字段的
valueSet属性会报错,需要单独调用Tooling API更新对应全局值集的元数据。 - PATCH请求是全量覆盖逻辑,提交的
value数组就是更新后picklist的全部选项,切记不要只传新选项导致原有选项丢失。
内容的提问来源于stack exchange,提问作者Navid Khan
相关产品推荐
相关产品推荐

