Dynamics CE 实体不包含使用 ServiceClient 的名称的属性,而实体具有属性并且可以使用 Web API 进行查询

问题描述 投票:0回答:1

在使用

ServiceClient
类从 Dynamics CE 中检索基于 QueryExpression 的实体并通过特定字段对特定实体执行此操作时,我遇到了问题。

我的代码构建为使用字段

_invoiceid_value
通过其对发票的引用来检索发票产品(逻辑名称发票详细信息)。

看起来如下:

public async Task<IEnumerable<InvoiceDetail>> GetInvoiceDetailsByInvoiceIdAsync(Guid invoiceId)
{
    var query = new QueryExpression(InvoiceDetail.EntityLogicalName);
    query.ColumnSet = new ColumnSet(true);
    query.Criteria.AddCondition("_invoiceid_value", ConditionOperator.Equal, invoiceId);

    return await _repository.GetInvoiceDetailsByQueryAsync(query);
}

存储库类仅处理

ServiceClient
并且不包含任何逻辑。当
ServiceClient
发送此请求时,我收到以下错误消息:

System.Private.ServiceModel: “InvoiceDetail”实体不包含 Name =“_invoiceid_value”且 NameMapping =“Logical”的属性。
元数据缓存详细信息:ProviderType=动态,
标准缓存=真,
IsLoadedInStagingContext = False,
时间戳=170102496,
最小活动行版本=170102496,
元数据实例Id=19121005,
最后更新=2024-02-11 09:54:52.403,
组织ID=.

我读到的响应是实体“发票详细信息”不存在字段

_invoiceid_value
。问题是它确实存在,无论是在使用 Dynamics 365 的 Level up 查看 Dynamics CE 中的实体时还是在使用其 Web API 时。

我尝试向他们的 API 发出以下请求,其中组织和发票 ID 值包含正确的值:

https://organisation.api.crm4.dynamics.com/api/data/v9.2/invoicedetails?$filter=_invoiceid_value eq invoiceid

这将返回 200 OK 以及所请求的发票详细信息实体。

为什么使用 Dynamics CE Web API 可以正常工作,但当我将

ServiceClient
类与
QueryExpression
结合使用时却不起作用?

ServiceClient
类还支持对Web API的OData查询,这也有效,因此仅在使用
QueryExpression
时才存在问题。过去两年我一直使用
QueryExpresssion
方法,没有任何问题。

我的主要专长不是动力学,所以我可能遗漏了该组件中明显的一些东西。但考虑到它可以与 OData 查询一起使用,我不明白为什么它不能使用

QueryExpression
工作。

c# dynamics-crm microsoft-dynamics
1个回答
2
投票

使用

IOrganizationService
接口(由
ServiceClient
实现)时,实体和属性名称必须由其逻辑名称指定。

因此条件

query.Criteria.AddCondition("_invoiceid_value", ConditionOperator.Equal, invoiceId);

应该这样写:

query.Criteria.AddCondition("invoiceid", ConditionOperator.Equal, invoiceId);

_invoiceid_value
是 OData 语法)

© www.soinside.com 2019 - 2024. All rights reserved.