Business Central: custom api getById не работает

Моя проблема в том, что я не могу вызвать свой собственный API для определенного itemId однако, когда я вызываю обычный API, он работает должным образом.

В настоящее время я могу успешно вызвать обычный API для определенного элемента, например:

myBcServer:Port/bc/api/v1.0/companies(666e508d-9abb-ea11-bbac-000d3a492c82)/items(a5dc88b9-9abb-ea11-bbac-000d3a492c82)

Но когда я пытаюсь сделать то же самое со своим пользовательским API:

myBcServer:Port/bc/api/contoso/app1/v2.0/companies(666e508d-9abb-ea11-bbac-000d3a492c82)/items(a5dc88b9-9abb-ea11-bbac-000d3a492c82)

Я получаю сообщение об ошибке:

"error": {
        "code": "BadRequest_NotFound",
        "message": "Bad Request - Error in query syntax.  CorrelationId:  f7bc0b59-45ac-4293-9f94-108d6436272c."
    }

Я могу успешно вызвать обе версии API по адресу /items. Где я получаю список всех предметов.

Созданная мной страница пользовательского API выглядит так:

page 50101 ItemsCustomApi
{
    PageType = API;
    Caption = 'API: Items';
    APIPublisher = 'contoso';
    APIGroup = 'app1';
    APIVersion = 'v2.0';
    EntityName = 'item';
    EntitySetName = 'items';
    SourceTable = Item;
    DelayedInsert = true;
    Editable = false;

    layout
    {
        area(Content)
        {
            field(id; SystemId)
            {
                Caption = 'ID';
            }
            field("No"; "No.")
            {
                Caption = 'No.';
            }
            field("UnitPrice"; "Unit Price")
            {
                Caption = 'Unit Price';
            }
            field("VendorNo"; "Vendor No.")
            {
                Caption = 'Vendor No.';
            }
        }
    }
}

Я подозреваю, что мне нужно добавить свойство на страницу, например CanGetById = true. Однако я не знаю.

Версия BC запускается в докере: mcr.microsoft.com/businesscentral/sandbox:dk Версия докера: V19.03.12

1 ответ

Решение

Вам необходимо установить свойство страницы ODataKeyFields чтобы иметь возможность выбирать по id:

ODataKeyFields = SystemId;
Другие вопросы по тегам