0

我目前有一些代码使用 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)"}

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

4

2 回答 2

3

MSDN 上列出的在创建时关联实体的方法在更新时也适用。我在 2016 演示环境中测试了以下查询,没有出现问题(其中 guid 已分别替换为现有帐户和联系人 guid):

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)"
}

您是否可以先验证这个开箱即用的用例是否有效,然后再通过查找自定义实体来调试您的特定问题?

于 2016-05-18T08:52:14.690 回答
2

我最终使用了这个请求。我遇到的主要问题是我不知道单值导航属性是什么。发现我最终使用了这个请求。我将 url 中的选择更改为 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"*". 直到我把它放在我的授权头之前,我才能让首选项头通过。

@Microsoft.Dynamics.CRM.associatednavigationproperty最后,一旦我从 get 请求中得到响应,我就会在它的末尾寻找我正在寻找的变量,并使用与之关联的值。在我的情况下,字段名称是,new_lastweblocation但单值导航属性是new_LastWebLocation

于 2016-05-19T14:22:51.063 回答