2

我有一个使用 API for business Central 创建的销售订单。销售订单有一个单行项目。我想更新订单项的数量。以下是我到目前为止所尝试的。

端点:https://api.businesscentral.dynamics.com/v1.0/domain.com/api/v1.0/companies(company_id)/salesOrders(sales_order_ide)/salesOrderLines(sales_order_line_id)

其中销售订单行 ID 采用e86d3aa1-f2f8-ea11-aa61-0022481e3b8c-10000文档中所述的形式提出请求时PATCH,我收到以下异常:

')' 或 ',' 应位于 '(sale-order-line-item-id)' 中的第 9 位。

当我只是尝试获取订单项时,也会发生上述异常,但是当我更改 URL 并采用以下形式时,该异常已修复:

端点:

https://api.businesscentral.dynamics.com/v1.0/domain.com/api/v1.0/companies(b4a4beb2-2d42-40dc-9229-5b5c371be4e3)/salesOrders(e86d3aa1-f2f8-ea11-aa61-0022481e3b8c)/salesOrderLines?filter=sequence eq 10000

当我尝试通过发出 GET请求获取行项目时,此端点正在返回正确的响应。但是,当我PATCH使用相同的端点发出请求时,使用简单的请求正文,例如

{"quantity" : 2.0}

它抛出异常:

在 Dynamics 365 Business Central OData Web 服务中不允许对 EdmType 'Collection' 的 'salesOrderLines' 的 'PATCH' 请求。

我还指定了if-Match标题以及包含订单项的 etag 值但无济于事的请求,并且正在发生相同的异常。我错过了什么吗?任何帮助将不胜感激。

4

1 回答 1

2

对于以后可能会访问此问题的人,经过邮递员的多次打击和尝试,我终于弄清楚了问题所在。在我的情况下if-Match,基本上是 Etag用于行项目的标题都很好。问题在于 API URL,特别是我们指定行项目 ID 的方式。我们必须在单引号中指定它,以便 API 调用的 URL 变为: https ://api.businesscentral.dynamics.com/v1.0/domain.com/api/v1.0/companies(company_id)/salesOrders(sales_order_ide )/salesOrderLines('sales_order_line_id')

您会注意到,我们没有在单引号中指定company_idsales_order_id原因是这两个参数都属于类型GUID,而sales_order_line_id属于string元数据文档的类型。

于 2020-09-29T09:21:11.000 回答