我尝试使用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
答案 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来加速编码,并且可能直到运行时才发现拼写错误。