在C#中为WebAPI OData对象生成强类型

时间:2017-12-12 04:07:12

标签: c# dynamics-crm-online dynamics-crm-365 dynamics-crm-webapi

我尝试使用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 < / p>

解决达里尔在下面的评论;我的决定是直接使用CRM WebAPI(而不是通过SDK)来查找here所显示的信息:

  

如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

1 个答案:

答案 0 :(得分:0)

_primarycontactid_value属性不会映射到对Contact实体的类的引用,因为它表示类型Edm.Guid的结构属性。表示Contact类型的导航属性的属性是Primarycontactid。从以下生成的客户端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来加速编码,并且可能直到运行时才发现拼写错误。