Создание Web приложения с помощью фреймворка SAPUI5 (6)

Создание Web приложения с помощью фреймворка SAPUI5 (6)

Продолжаю серию небольших заметок по теме SAPUI5.

См. заметку Создание Web приложения с помощью фреймворка SAPUI5 (1)
См. заметку Создание Web приложения с помощью фреймворка SAPUI5 (2)
См. заметку Создание Web приложения с помощью фреймворка SAPUI5 (3)
См. заметку Создание Web приложения с помощью фреймворка SAPUI5 (4)
См. заметку Создание Web приложения с помощью фреймворка SAPUI5 (5)

Какой материал будет представлен в этой заметке?

В настоящем материале я рассмотрю последовательность действий, достаточную для того, чтобы был создан OData сервис в ABAP системе, который в последствии может быть использован в SAPUI5 приложении для получения данных из нее же.

Источник данных

Источником данных в рассматриваемом мной примере является прозрачная таблица ZAPP_TABLE вида

Следующего содержания

Создание OData сервиса

Работа с OData сервисом в системе SAP начинается с запуска транзакции SEGW

См. SAP Gateway Service Builder

При разработке модели данных нового OData сервиса мне предстоит работать с сущностями, представляющими из себя разнородные массивы информации.

Моей задачей будет являться их группировка и объединение по логическому принципу, выделение в обособленные(ую) сущности(ть), и присвоение им(ему) осмысленного наименования. Это наименование будет присутствовать в Entity и Entity Set.

См. Entity Types
См. Entity Sets

На следующем видеофрагменте представлена последовательность действий, в результате которой выполняется создание нового OData сервиса

См SAP Gateway Cookbooks
См Getting Started with the Service Builder

Сущность, про которую я писал выше, в моем случае получила название "Person".

Подготовка к чтению данных

При создании OData сервиса прямо "из коробки" доступен набор ABAP классов.

См. ABAP Classes

Для имплементации бизнес-логики необходимо использовать Data Provider Class с расширением *DPC_EXT. Из транзакции SEGW можно быстро перейти в созданный *DPC_EXT класс, раскрыв узел Runtime Artifacts, и выбрав в контекстном меню команду Go to ABAP Workbench

Переопределите методы *SET_GET_ENTITY и *SET_GET_ENTITYSET

Исходный код метода PERSONSET_GET_ENTITYSET

DATA: ls_employee_entity TYPE zapp_table.
 
    SELECT * FROM zapp_table INTO TABLE @DATA(lt_table_empl).
    LOOP AT lt_table_empl ASSIGNING FIELD-SYMBOL(<fs_empl>).
      MOVE-CORRESPONDING <fs_empl> TO ls_employee_entity.
      INSERT ls_employee_entity INTO  TABLE et_entityset.
    ENDLOOP.

Исходный код метода PERSONSET_GET_ENTITY

DATA ls_employee_entity_key TYPE zcl_zdemo_app1_mpc=>ts_person.
 
    io_tech_request_context->get_converted_keys(
    IMPORTING
      es_key_values = ls_employee_entity_key
    ).
 
    SELECT * FROM zapp_table INTO TABLE @DATA(lt_employee) WHERE zz_number = @ls_employee_entity_key-zz_number.
 
    READ TABLE lt_employee  ASSIGNING FIELD-SYMBOL(<fs_empl>) INDEX 1.
    IF sy-subrc EQ 0.
      MOVE-CORRESPONDING <fs_empl> TO er_entity.
    ENDIF.
См. SAP Gateway Cookbooks
См. Code Snippets

Активируйте внесенные изменения.

Регистрация сервиса

Выполните регистрацию сервиса, перейдя на узел Service Maintenance транзакции SEGW. На следующем видеофрагменте представлена последовательность действий в результате которой выполняется регистрация вновь созданного OData сервиса в системе

См. Service Maintenance

Первичный запуск сервиса

Проверяю, что сервис рабочий.

А что там с EntitySet?

См. List of HTTP status codes

200 - OK
Standard response for successful HTTP requests. The actual response will depend on the request method used. In a GET request, the response will contain an entity corresponding to the requested resource. In a POST request, the response will contain an entity describing or containing the result of the action.

А что, если выбрать только одну запись?

Какой метод *DPC_EXT класса отрабатывает при выполнении запроса?

На следующем видеофрагменте я хочу обратить ваше внимание на то, какие методы вызываются при выполнении запроса, обращенного для заполнения всего EntitySet'а, а также по какому-то ключу.