Создание 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'а, а также по какому-то ключу.