如何通过REST API为默认Contact对象LeadSource字段添加选项列表值
Salesforce Tooling API 更新LeadSource标准值集返回MALFORMED_ID解决方案
错误根因
MALFORMED_ID: bad id LeadSource报错由两个问题共同导致:
- 更新StandardValueSet的请求路由错误,普通sObject的
/tooling/sobjects/StandardValueSet/[ID]路由不支持标准值集更新操作 - 查询与更新请求混用了不同API版本(v49.0查询、v53.0更新),存在元数据结构兼容问题
正确实现步骤
- 统一API版本:查询、更新操作统一使用同一稳定API版本(推荐v53.0及以上)
- 查询标准值集信息,请求示例:
GET /services/data/v58.0/tooling/query?q=SELECT+Id,DurableId,Metadata,FullName,MasterLabel+FROM+StandardValueSet+WHERE+MasterLabel='LeadSource'
LeadSource对应的标准值集
DurableId固定为LeadSource,无需额外使用查询返回的18位Id字段
- 发起更新请求,使用GlobalValueSet专用路由,不要使用StandardValueSet路由,请求格式:
PATCH /services/data/v58.0/tooling/sobjects/GlobalValueSet/LeadSource Content-Type: application/json
- 构造请求载荷:更新为全量覆盖逻辑,必须先携带查询返回的所有原有选项,再追加新增选项,示例结构:
{ "Metadata": { "customValue": [ // 此处放查询返回的所有原有customValue条目,不要遗漏 { "default": false, "description": "Web", "label": "Web", "isActive": true, "valueName": "Web" }, // 追加的新选项 { "default": false, "description": "第三方活动导入", "label": "第三方活动导入", "isActive": true, "valueName": "Third_Party_Campaign" } ], "masterLabel": "LeadSource", "sorted": false } }
注意事项
- 发起请求的集成用户必须持有
Customize Application、View Setup and Configuration权限,否则会返回权限类错误 - 不要在更新载荷中只传新增选项,会清空所有原有LeadSource选项
- 不要尝试使用StandardValueSet路由执行更新操作,该路由仅支持查询,不支持写入
内容的提问来源于stack exchange,提问作者Danny Tiesling
相关产品推荐
相关产品推荐

