通过 API 更新 MS Dynamics 中的项目

问题描述 投票:0回答:1

我是 MS Dynamics Business Central 的新用户,我正在构建自定义构建电子商务网站与 MS Dynamics 的集成,以进行库存管理和其他运营工作。

我可以运行多个 API 来获取公司信息、获取项目,但每当我尝试更新项目时,我总是收到“另一个用户已更改记录”的错误。我按照要求使用了 If-Match 标签,但可能我的电子标签不正确。您能检查一下问题出在哪里吗?

Etag 值为

"@odata.etag": "W/\"JzE5OzI1NzMyMzIyMjcyOTQ3OTQ4MzExOzAwOyc=\"",

更新项目的curl语句是

curl --location --request PATCH 'https://api.businesscentral.dynamics.com/v2.0/Development/api/v2.0/companies(CompanyNumber)/items(ItemNumber)' \
--header 'If-Match: W/"JzE5OzY1NDk0OTA1NDg2NTk1MDUwODExOzAwOyc="' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer ' \
--data '{
    "inventory":15
}'

我不断收到错误消息 "message": "另一用户已更改记录。CorrelationId: 081aa824-be35-4284-9c69-1ea39f8a8ce1。"

我觉得问题出在 ETag 值上,我删除了一些字符。有人可以帮忙并告诉我吗

dynamics-crm microsoft-dynamics dynamics-business-central
1个回答
0
投票

您好,欢迎来到 MSDyn365BC 的精彩社区!

据我所知,乍一看你做的一切都是正确的。您删除了 ETag 中的反斜杠,并将 If-Match 键添加到 HTTP 请求的标头中,并使用稍微修改过的 ETag 作为其值。这是正确的。

要开始进行原型设计,您可以使用: " If-Match: * "

如果 ETag 与您请求使用的资源的当前 ETag 不匹配,您将不断收到 HTTP 状态代码 409。

无需赘述,每次有人使用(POST/PUT)此记录时,资源的状态都会发生变化,ETag 也会发生变化。因此,您需要为针对特定资源发送的每个新 HTTP 请求提供新的 ETag。

例如:

  1. 获取资源A并保存ETag“123”
  2. PUT 资源 A 并提供 ETag“123”。成功:在响应中,您注意到 ETag 更改为“987”。
  3. PUT 资源 A 并提供 ETag“123”。失败:导致 HTTP 409 Request_EntityChanged“另一个用户已更改记录。”
  4. 放入资源A并提供ETag“987”。成功:在资源中,您注意到 ETag 更改为“456”。

希望这有助于解决问题。

其他链接:

© www.soinside.com 2019 - 2024. All rights reserved.