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

Trouble updating a field of type lookup with Microsoft CRM 2016 Web API

我目前有一些代码使用 http 补丁通过 2016 网络发送 Microsoft CRM 数据 api。当我的有效载荷包含文本或 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 等等。 显然,我的 shotgun 方法和 400 错误意味着我从根本上误解了实体在 2016 年网络中的处理方式 api。如果您有任何建议,请告诉我。

MSDN 上针对 associating entities on create 列出的方法在更新时也适用。我在 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)"
}

在调试自定义实体查找的特定问题之前,您能否首先验证这个开箱即用的用例是否有效?

我最终使用了 this request. The main issue that I was having is that I didn't know what the single-valued navigation property was. To find that I ended up using this request。我将 url 中的 select 更改为 select="*"

原版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 请求尝试查找 single-valued 导航 属性 时,确保添加 'Prefer':'odata.include-annotations"*"。在我将其置于授权 header.

之前,我无法让偏好 header 通过

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