You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过API更新MS Dynamics Business Central项时遇冲突错误求助

解决Dynamics Business Central API更新时的"Another user has already changed the record"错误

你的问题核心是ETag的格式处理错误,具体来说是在curl请求的If-Match头中错误地转义了双引号,导致ETag验证失败,触发并发冲突提示。

问题分析

你从GET请求中获取的ETag是:

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

这里的\是JSON格式的转义符,实际有效的ETag值是W/"JzE5OzI1NzMyMzIyMjcyOTQ3OTQ4MzExOzAwOyc="。但你在curl的If-Match头里保留了转义符,导致服务器接收到的ETag和记录当前的ETag不匹配,进而报错。

修正步骤

  1. 提取正确的ETag值:从GET响应中复制@odata.etag的内容时,去掉JSON的外层引号,保留W/"..."的完整内容,不要手动添加任何转义字符。
  2. 更新curl命令:将If-Match头替换为正确的ETag值,示例如下:
curl --location --request PATCH 'https://api.businesscentral.dynamics.com/v2.0/Development/api/v2.0/companies(CompanyNumber)/items(ItemNumber)' \
--header 'If-Match: W/"JzE5OzI1NzMyMzIyMjcyOTQ3OTQ4MzExOzAwOyc="' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--data '{
    "inventory":15
}'

关键注意事项

  • 每次更新前重新获取ETag:每次执行PATCH操作前,必须先发送GET请求获取目标项的最新@odata.etag——记录一旦被修改,ETag就会立即更新,旧的ETag直接失效。
  • 排查并发修改源:确认没有其他用户或系统进程(比如Business Central客户端的编辑操作)同时修改这条记录,外部修改也会导致ETag变化。
  • 代码层面的字符处理:如果是通过程序集成,确保代码在处理ETag字符串时不会自动添加转义符,直接使用响应返回的原始值即可。

内容的提问来源于stack exchange,提问作者Learn AspNet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:25:17