如何通过Salesforce Metadata API和simple-salesforce读取Picklist值
获取Salesforce全局Picklist值集的选项
当你通过_sf.mdapi.CustomObject.read(sf_object_name)读取自定义对象元数据时,遇到的这种情况是因为该Picklist字段使用了全局值集(Named Value Set),而非字段级的本地值集:
- 本地值集会直接在
valueSet.valueSetDefinition.value中返回选项列表 - 全局值集仅返回
valueSetName,具体选项需要单独调用API读取
解决方案:读取全局值集元数据
你可以使用simple-salesforce的mdapi.ValueSet.read()方法,传入返回的valueSetName来获取实际的选项:
# 假设已经获取到字段的valueSetName value_set_name = "Student_Challenge_Experience_Homesick" # 读取全局值集元数据 value_set_metadata = _sf.mdapi.ValueSet.read(value_set_name) # 提取选项列表 picklist_options = value_set_metadata.valueSetDefinition.value
返回的picklist_options结构和本地值集的选项格式一致,包含fullName(值)、label(标签)等字段。
统一处理逻辑示例
如果需要批量处理所有Picklist字段,可以加个判断逻辑,自动区分本地/全局值集:
object_metadata = _sf.mdapi.CustomObject.read(sf_object_name) for field in object_metadata.fields: if field.type == "Picklist": value_set = field.valueSet if value_set.valueSetName: # 全局值集,单独读取 vs_meta = _sf.mdapi.ValueSet.read(value_set.valueSetName) options = vs_meta.valueSetDefinition.value else: # 本地值集,直接获取 options = value_set.valueSetDefinition.value print(f"字段 {field.fullName} 的选项: {options}")
内容的提问来源于stack exchange,提问作者ezeYaniv
相关产品推荐
相关产品推荐

