在Business Central AL Extension中的Odata v4中进行深度插入

时间:2019-05-20 19:39:51

标签: dynamics-nav dynamics-business-central microsoft-dynamics-business-central

我们正在AL中创建一个扩展名以导入订单。 对于这个问题,我们简化了扩展程序,以解释我们面临的挑战。

我们要做的是在Dynamics 365商业中心中导入标题和行。

要实现这一点,我们有: -创建了一个表(标题) -创建了一个表格(行) -创建了Type API(Doc)页面 -创建了一个listPart(SalesLine)

场景1

我们已经发布了DOC页,并正在尝试对此odata url进行发布请求。

POST https://api.businesscentral.dynamics.com/v1.0/{tennant}/Sandbox/ODataV4/Company('CRONUS%20NL')/Doc/ HTTP/1.1
Content-Type: application/json
Authorization: Basic {{username}} {{password}}

{
  "name": "Description",
  "SalesLines" : [{"lineno" : 1000}]
}

响应:

{
  "error": {
    "code": "BadRequest",
    "message": "Does not support untyped value in non-open type."
  }
}

场景2

发布时:

POST https://api.businesscentral.dynamics.com/v1.0/3{tennant}/Sandbox/ODataV4/Company('CRONUS%20NL')/Doc/ HTTP/1.1
Content-Type: application/json
Authorization: Basic {{username}} {{password}}

{
  "name": "Description"
}

我们收到以下答复:

{
  "@odata.context": "https://api.businesscentral.dynamics.com/v1.0/3ddcca3d-d343-4a06-95f9-f32dbf645199/Sandbox/ODataV4/$metadata#Company('CRONUS%20NL')/Doc/$entity",
  "@odata.etag": "W/\"JzQ0O3BKUzExSUMrQUl4UXFQc2R6V1J1ellvZEttRTJoa2xhanNtV0M0K3Ezajg9MTswMDsn\"",
  "id": 4,
  "name": "Description",
  "DateTime": "2019-05-20T19:33:13.73Z"
}

我已在GitHub上发布了扩展程序 需要帮助。

1 个答案:

答案 0 :(得分:1)

我已经研究了类似的解决方案,发现要使其正常工作需要以下条件:

  1. 包含行的part必须放在标题repeater的{​​{1}}内。
  2. 您必须将Page上的EntityNameEntitySetName设置为与实际页面上相同的值。
  3. 调用API时,必须附加参数part,例如$expand=[EntitySetName of your lines part]
  4. 在JSON主体中,包含行的数组的属性名称必须与$expand=orderLines行中的EntitySetName相匹配。

如果上面的说明不足够,我可以提供一些示例。