3

我正在尝试使用 C# 访问 CRM 的 WebAPI,我想知道是否有一种方法可以为 WebAPI 响应生成强类型,类似于CrmSvcUtil基于组织服务生成强类型的方法

我尝试使用OData v4 客户端代码生成器(可从Marketplace获得)来生成代码,这适用于简单的结构(整数、字符串、小数),但它似乎对更复杂的类型(例如查找)有问题

例如,拨打/api/data/v9.0/accounts(fca0da1c-8fc3-e711-a825-000d3ae09197)?$select=_primarycontactid_value将检索指定帐户的主要联系人 ID。

问题是它_primarycontactid_value没有映射到生成的对象的任何属性,Account并且当反序列化 JSON 结果时,该primarycontactid属性保留为 null


在下面解决达里尔的评论;我决定直接使用 CRM WebAPI(而不是通过 SDK)是基于此处找到的信息:

如 Microsoft Dynamics CRM 2011 端点中所述,Dynamics CRM 2011 端点已被弃用,取而代之的是 Web API。弃用一个端点是一件大事,尤其是当编程模型与这两个端点一样不同时。我们强烈鼓励开发人员将 Web API 用于连接到 CRM 的应用程序。对于插件和工作流程序集,您可以继续使用 SDK 程序集。在即将发布的版本中,我们将修改这些程序集,以便它们使用 Web API 而不是 2011 端点。

我认为语言很模棱两可。微软表示将使用 SDK 程序集,但也指出它们只应用于插件和工作流


MS 的另一个链接指出应该使用 CRM WebAPI:

https://docs.microsoft.com/en-au/dynamics365/customer-engagement/developer/choose-development-style

4

1 回答 1

0

_primarycontactid_value属性不会映射到Contact实体类的引用,因为它表示 type 的结构属性Edm.Guid。表示导航属性类型的属性ContactPrimarycontactid。从以下生成的客户端 SDK 类复制属性定义:

public global::System.Nullable<global::System.Guid> _primarycontactid_value    
public global::ODataV4Sdk.Contact Primarycontactid

Microsoft 的 OData 客户端库可能具有对扩展导航属性的内置支持,但无法链接或取消链接记录。OData 库文档中没有示例:http: //odata.github.io/odata.net/#04-01-basic-crud-operations

另一方面,Simple.Odata.Client ( https://github.com/object/Simple.OData.Client/wiki ) 提供类型化语法并支持链接操作,但据我所知,它没有工具支持。这些类需要手动创建。使用无类型语法可以避免创建类的工作,但当然,我们不会让 Intellisense 加速编码,而且拼写错误可能要到运行时才会被发现。

于 2017-12-13T13:26:25.143 回答