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

使用C# SDK查询Dynamics 365产品信息遇实体未找到问题

问题解决指南

核心问题原因

报错提示找不到product实体,主要有两个可能:

  1. 你的Dynamics 365环境未启用产品目录功能,导致product实体未在系统中注册。
  2. 当前使用的IOrganizationService用户没有product实体的读取权限,元数据查询时无法获取该实体信息。

验证与解决步骤

1. 确认产品目录功能是否启用

进入Dynamics 365后台:

  • 路径:设置 → 销售 → 产品目录
  • 若无法访问或提示功能未启用,联系管理员启用产品目录模块,系统会自动加载product及关联定价实体。

2. 检查用户权限

  • 进入设置 → 安全 → 安全角色,找到当前用户所属的角色
  • 在「实体权限」列表中找到「产品」,确保已分配读取权限,必要时添加「写入」「删除」等权限
  • 保存角色后重新测试查询

3. 修正查询代码(含定价信息获取)

Dynamics 365中产品的定价信息存储在productpricelevel(产品价格)实体中,该实体关联product(产品)和pricelevel(价格列表)。以下是完整的查询示例:

// 1. 根据产品编号查询产品
var productCols = new ColumnSet("name", "productnumber", "productid");
var productQuery = new QueryByAttribute("product")
{
    ColumnSet = productCols,
    Attributes = { "productnumber" },
    Values = { "100002" }
};

var productResults = service.RetrieveMultiple(productQuery);
if (productResults?.Entities.Any() == true)
{
    var product = productResults.Entities.First();
    Console.WriteLine($"产品名称:{product.GetAttributeValue<string>("name")}");

    // 2. 查询该产品关联的定价信息
    var priceCols = new ColumnSet("amount", "pricelevelid", "uomid");
    var priceQuery = new QueryByAttribute("productpricelevel")
    {
        ColumnSet = priceCols,
        Attributes = { "productid" },
        Values = { product.Id }
    };

    var priceResults = service.RetrieveMultiple(priceQuery);
    foreach (var priceItem in priceResults.Entities)
    {
        // 获取价格列表名称
        var priceLevelRef = priceItem.GetAttributeValue<EntityReference>("pricelevelid");
        var priceLevel = service.Retrieve("pricelevel", priceLevelRef.Id, new ColumnSet("name"));
        
        // 获取单价和单位
        var unitPrice = priceItem.GetAttributeValue<Money>("amount").Value;
        var uomRef = priceItem.GetAttributeValue<EntityReference>("uomid");
        var uom = service.Retrieve("uom", uomRef.Id, new ColumnSet("name"));

        Console.WriteLine($"价格列表:{priceLevel.GetAttributeValue<string>("name")},单价:{unitPrice},单位:{uom.GetAttributeValue<string>("name")}");
    }
}

4. 修正元数据查询代码

若要确认product实体是否存在,可修改元数据查询的EntityFilters参数,获取更完整的实体信息:

public static EntityMetadata[] GetEntities(IOrganizationService organizationService)
{
    var metaDataRequest = new RetrieveAllEntitiesRequest
    {
        // 获取实体及属性信息,确保不会遗漏已启用的实体
        EntityFilters = EntityFilters.Entity | EntityFilters.Attributes,
        RetrieveAsIfPublished = true
    };

    var metaDataResponse = (RetrieveAllEntitiesResponse)organizationService.Execute(metaDataRequest);
    return metaDataResponse.EntityMetadata;
}

内容的提问来源于stack exchange,提问作者Jurgen Cuschieri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 06:50:16