Использование Function Import в oData сервисе

Использование Function Import в oData сервисе

В инструментарии разработки oData сервиса в системе SAP есть интересная опция, с которой мне, к сожалению, практически не приходилось работать. Наименование такой опции – Function Import, и о ней далее пойдет речь в этой заметке.

Мат. часть

Function Import представляет собой сервисную операцию (по сути запрос), выполняемый на стороне backend системы. Использование импортируемой функции (Function Import), вместо привычного запроса вашего oData сервиса может быть оправдано в тех случаях, когда цель запуска такого запроса не представляет возможности быть описанной терминами модели, компактно умещающихся в знакомой всем аббревиатуре CRUD. Примеры операций, которые могут быть задействованы при работе с Function Import, представлены ниже:

  • Запуск/остановка потока операций;
  • Уточнение/запрос данных в какой-то пользовательской таблице/смежной системе;
  • Запрос дополнительной информации, отсутствующей в настоящий момент в модели данных приложения
  • etc.
См. Function Imports

The Open Data Protocol (OData) includes standard CRUD (Create, Retrieve, Update, and Delete) operations that map to the HTTP methods POST, GET, PUT/MERGE, and DELETE. In addition, OData supports further service operations (function imports) that can be invoked by the HTTP methods GET or POST for anything that cannot be mapped to the standard CRUD operations. You can implement such additional service operations in the Service Builder by creating function imports within your data model.

Создание Function Import для oData сервиса

В структуре вашего oData сервиса (транзакция SEGW), кликните правой кнопкой мыши по узлу Data Model, и выберите в контекстном меню команду Create -> Function Import

Введите наименование вновь создаваемой функции

Определитесь с типом данных, который должен быть возвращен в результате запуска данного импорта, с указанием подходящего типа HTTP метода

См. Function Imports

In the Return Type column, enter the name of the complex type or entity type you want the function import to return. You can use the input help to select an existing complex or entity type from your project. If the input help is empty, you must first create the relevant complex type or entity type in your project. If you selected No Return this field is non-editable

Определите входящие параметры вновь создаваемого Function Import

Вносим изменения в *_DPC_EXT класс oData сервиса

В DPC_EXT классе вашего oData сервиса необходимо переопределить метод EXECUTE_ACTION, который доступен из интерфейса /IWBEP/IF_MGW_APPL_SRV_RUNTIME.

Как обратиться к Function Import?

Обращение к импортируемой функции на уровне oData сервиса возможно по ее наименованию, с обязательным перечислением параметров, которые были определены в процессе создания

/sap/opu/odata/SAP/наименование_вашего_oData_сервиса/наименование_FunctionImport?параметр_импорта='значение'

Исходя из моего примера, обращение в Function Import будет иметь следующий внешний вид

/sap/opu/odata/SAP/ZREACT_APP_SRV/fnImportDemo3?userName='developer'

Пример. Постановка задачи

Создать импортируемую функцию (Function Import) для определения наличия у пользователя соответствующих полномочий. В результате запуска такого импорта необходимо заполнить entitySet в соответствии с его структурой.

См. заметку Как создать пользовательский объект полномочий?

Пример. Реализация задачи (1)

Создана импортируемая функция с одним входным параметром

Пример. Реализация задачи (2)

Структура entitySet, который должен быть заполнен в результате обращения к Function Import

Пример. Реализация задачи (3)

Исходный код Function Import

Пример. Обращение к Function Import (4)

На следующем видеофрагменте представлена последовательность действий, в результате которой выполняется обращение к импортируемой функции, а также корректировка значения, принимаемого в качестве аргумента пользовательским объектом полномочий.

Пример. Обращение к Function Import в SAPUI5 приложении (5)

На следующем видеофрагменте представлен пример запуска SAPUI5 приложения, в котором выполняется обращение к импортируемой функции oData сервиса. Результат обращения к Function Import отображается в MessageToast

См. callFunction

Read more