如何在PCF组件中获取并展示Dynamics 365的所有OptionSet列表?——RetrieveMultiple方法调用报错求助
解决Dynamics 365中获取OptionSet列表的问题
首先,你遇到的报错完全合理——OptionSet并不是可以直接用RetrieveMultiple查询的常规实体类型。在Dynamics 365的数据模型里,选项集分为两类:全局选项集(可跨实体复用)和实体属性专属选项集,两者都需要用专门的API请求来获取,而非对"optionset"实体调用常规检索方法。
下面分两种场景给出具体实现方案:
1. 获取所有全局选项集
全局选项集是独立于实体的可复用选项集合,你可以通过Web API直接查询所有全局选项集定义:
Web API请求示例
GET [你的组织URL]/api/data/v9.2/GlobalOptionSetDefinitions?$select=Name,DisplayName,Options
PCF组件中的JavaScript实现
// 用Xrm.WebApi获取全局选项集列表 Xrm.WebApi.retrieveMultipleRecords("GlobalOptionSetDefinitions", "?$select=Name,DisplayName,Options").then( function success(result) { console.log("全局选项集列表:", result.entities); // 在这里把返回的数据渲染到你的PCF组件中即可 }, function error(error) { console.error("获取全局选项集失败:", error.message); } );
2. 获取所有实体属性的选项集(含专属选项集)
如果需要覆盖所有实体上的选项集(包括绑定全局选项集的属性,以及实体专属的选项集),需要先获取实体定义,再筛选出选项集类型的属性:
Web API请求步骤
- 一次性获取带选项集属性的所有实体定义:
GET [你的组织URL]/api/data/v9.2/EntityDefinitions?$select=LogicalName,DisplayName&$expand=Attributes($select=LogicalName,DisplayName,AttributeType,OptionSet)&$filter=Attributes/any(a:a/AttributeType eq 'Picklist' or a:AttributeType eq 'State' or a:AttributeType eq 'Status')
- 在PCF中处理返回数据,提取所有选项集信息:
Xrm.WebApi.retrieveMultipleRecords("EntityDefinitions", "?$select=LogicalName,DisplayName&$expand=Attributes($select=LogicalName,DisplayName,AttributeType,OptionSet)&$filter=Attributes/any(a:a/AttributeType eq 'Picklist' or a:AttributeType eq 'State' or a:AttributeType eq 'Status')").then( function success(result) { const allOptionSets = []; result.entities.forEach(entity => { entity.Attributes.forEach(attr => { if (attr.OptionSet) { allOptionSets.push({ 实体逻辑名: entity.LogicalName, 实体显示名: entity.DisplayName.UserLocalizedLabel.Label, 属性逻辑名: attr.LogicalName, 属性显示名: attr.DisplayName.UserLocalizedLabel.Label, 选项集详情: attr.OptionSet }); } }); }); console.log("所有实体选项集列表:", allOptionSets); // 将整理好的数据渲染到PCF组件中 }, function error(error) { console.error("获取实体选项集失败:", error.message); } );
补充说明
- 状态(State)和状态原因(Status)字段本质也是选项集,所以上面的筛选条件包含了这两种类型;
- 如果只需要特定实体的选项集,可以在EntityDefinitions的查询中添加
$filter=LogicalName eq 'account'这类条件缩小范围; - PCF组件中确保已正确引入Xrm对象,或使用Power Apps Component Framework提供的
WebApi工具类发起请求。
内容的提问来源于stack exchange,提问作者BACCHVS
相关产品推荐
相关产品推荐

