问题描述
我有一个使用商务中心API创建的销售订单。销售订单只有一个订单项。我想更新订单项的数量。以下是我到目前为止所尝试的。
端点: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
如document中所述,当发出PATCH
请求时,出现以下异常:
')'或','预期在第9位 “(sale-order-line-item-id)”。
当我只是尝试获取订单项时,也会发生上述异常,但是当我更改URL并采用以下格式时,该异常已得到解决:
端点:
https://api.businesscentral.dynamics.com/v1.0/rante.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}
它引发异常:
对EdmType'Collection'的'salesOrderLines'的'PATCH'请求不是 可以在Dynamics 365商业中心OData Web服务中使用。
我还指定了if-Match
标头以及包含该订单项的etag值但无济于事的请求,并且发生了相同的异常。我想念什么吗?任何帮助将不胜感激。
解决方法
对于那些以后可能会问这个问题的人,经过邮递员的多次尝试之后,我终于找到了问题所在。在我的情况下,基本上是if-Match
的{{1}}标头对于该订单项来说就可以了。问题出在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')
您会注意到,我们没有在单引号中指定Etag
和company_id
,原因是这两个参数a的类型均为sales_order_id
,而GUID
的类型根据元数据文档sales_order_line_id
。