无法使用Microsoft CRM 2016 Web API更新类型查找字段

时间:2016-05-17 22:00:31

标签: dynamics-crm-2016 http-patch

我目前有一些代码使用http补丁通过2016 web api发送Microsoft CRM数据。当我的有效负载包含text或int数据类型时,它工作正常,但当有效负载包含查找记录时,我无法获得超过400个错误请求的任何响应。

以下是我尝试过的一些有效负载实例(已更改了传输数据)

payload = {"new_lastweblocation": "Midlothian" }
payload = {"new_location_transaction_LastWebLocationid@odata.bind" : "https://crmnaorgXXXX.crm.dynamics.com/api/data/v8.0/new_locations(1234578-a588-e511-8105-c4346bace18c)"}
payload = {"new_lastweblocation@odata.bind" : "https://crmnaorgXXXX.crm.dynamics.com/api/data/v8.0/new_locations(1234578-a588-e511-8105-c4346bace18c)"}

基本上我已经尝试过明文,指导记录,对关系的指导,通过odata.bind链接的guid ......等等。 显然,我的霰弹枪方法以及400错误意味着我从根本上误解了2016年网络API中实体的处理方式。如果您有任何建议,请告诉我。

2 个答案:

答案 0 :(得分:3)

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

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",
"primarycontactid@odata.bind":"/contacts(00000000-0000-0000-0000-000000000001)"
}

您是否可以在通过查找自定义实体调试特定问题之前验证这个开箱即用的用例是否有效?

答案 1 :(得分:2)

我最终使用this request。我遇到的主要问题是我不知道单值导航属性是什么。要找到我最终使用this request。我将网址中的选项更改为select =" *"

原始网址

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

我的网址

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

使用GET请求尝试查找单值导航属性时,请务必添加'Prefer':'odata.include-annotations"*"。我无法通过首选项标题直到我将它放在我的授权标题之前。

最后,当我从get请求得到响应时,我查找了我在其末尾用@Microsoft.Dynamics.CRM.associatednavigationproperty查找的变量,并使用了与之关联的值。就我而言,字段名称为new_lastweblocation,但单值导航属性为new_LastWebLocation