Глубокая вставка в 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 ответов
Я работал над подобным решением и обнаружил, что для его работы необходимы следующие вещи:
- В
part
содержащие ваши строки должны быть помещены внутриrepeater
в вашем заголовкеPage
. - Вы должны установить
EntityName
а такжеEntitySetName
на вашеpart
к тем же значениям, что и на реальной странице. - При вызове API необходимо добавить параметр
$expand=[EntitySetName of your lines part]
например$expand=orderLines
. - В теле JSON имя свойства массива, содержащего строки, должно соответствовать
EntitySetName
линийpart
.
Я могу привести несколько примеров, если приведенных выше инструкций недостаточно.