2016-05-17 64 views
0

我目前有一些代码使用http补丁通过2016 web api发送Microsoft CRM数据。当我的有效载荷包含一个文本或int数据类型时,它工作得很好,但是当有效载荷包含查找记录时,我无法获得超过400个错误请求的任何响应。使用Microsoft CRM 2016 Web API更新类型查找字段时遇到问题

下面是几个,我试过有效载荷的实例(结构改变sentitive数据)

payload = {"new_lastweblocation": "Midlothian" } 
payload = {"[email protected]" : "https://crmnaorgXXXX.crm.dynamics.com/api/data/v8.0/new_locations(1234578-a588-e511-8105-c4346bace18c)"} 
payload = {"[email protected]" : "https://crmnaorgXXXX.crm.dynamics.com/api/data/v8.0/new_locations(1234578-a588-e511-8105-c4346bace18c)"} 

基本上我已经试过路过明文,一个GUID的记录,一个GUID的关系,通过odata.bind链接的一个guid等。 很明显,我的霰弹枪方法和400错误意味着我从根本上误解了实体在2016 web api中的处理方式。如果您有任何建议,请告诉我。

回答

2

我结束了使用this request。我遇到的主要问题是我不知道单值导航属性是什么。要找到我最终使用this request。我改变了在url中选择要选择=“*”

原始地址

GET [Organization URI]/api/data/v8.1/incidents(39dd0b31-ed8b-e511-80d2-00155d2a68d4)?$select=title,customerid_value&$expand=customerid_contact($select=fullname) 

我的URL

GET [Organization URI]/api/data/v8.1/incidents(39dd0b31-ed8b-e511-80d2-00155d2a68d4)?$select=* 

当使用GET请求,试图找到单值导航物业请务必添加'Prefer':'odata.include-annotations"*"。我无法获取首选项标头,直到将其放在我的授权标头之前。

最后,一旦我从获取请求中得到响应,我查找了我在@Microsoft.Dynamics.CRM.associatednavigationproperty末尾查找的变量,并且使用了与之相关的值。在我的情况下,字段名称是new_lastweblocation,但单值导航属性是new_LastWebLocation

3

更新时,MSDN上列出的associating entities on create的方法也适用。我(分别为其中的GUID已被替换现有客户和联系人的GUID)测试了以下查询在2016演示环境没有问题:

PATCH [Organization URI]/api/data/v8.0/accounts/(00000000-0000-0000-0000-000000000001) HTTP/1.1 
Content-Type: application/json; charset=utf-8 
OData-MaxVersion: 4.0 
OData-Version: 4.0 
Accept: application/json 

{ 
"name":"Sample Account", 
"[email protected]":"/contacts(00000000-0000-0000-0000-000000000001)" 
} 

你能否通过验证开始,这个外的开箱在使用自定义实体查找调试特定问题之前,用例可以正常工作吗?

+0

再次阅读文档后,我尝试了几件事情,最后不得不使用单值导航属性 – mucle6