Глубокая вставка в Odata v4 в расширении Business Central AL

Мы создаем расширение в AL для импорта заказов. По этому вопросу мы упростили наше расширение, чтобы объяснить проблемы, с которыми мы сталкиваемся.

Мы хотели бы импортировать заголовки и строки в Dynamics 365 Business Central.

Для этого у нас есть: - Создана таблица (Заголовок) - Создана таблица (Строки) - Создана страница API типа (Doc) - Создан listPart (SalesLine)

Сценарий 1

Мы опубликовали страницу DOC и пытаемся отправить запрос на этот 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.

0 ответов

Я работал над подобным решением и обнаружил, что для его работы необходимы следующие вещи:

  1. В part содержащие ваши строки должны быть помещены внутри repeater в вашем заголовке Page.
  2. Вы должны установить EntityName а также EntitySetName на ваше part к тем же значениям, что и на реальной странице.
  3. При вызове API необходимо добавить параметр $expand=[EntitySetName of your lines part] например $expand=orderLines.
  4. В теле JSON имя свойства массива, содержащего строки, должно соответствовать EntitySetName линий part.

Я могу привести несколько примеров, если приведенных выше инструкций недостаточно.

Другие вопросы по тегам