You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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请求步骤

  1. 一次性获取带选项集属性的所有实体定义:
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')
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:17:45