В первой части мы формируем файлы Excel на основании трансформации.
Прежде всего создадим структуру, в которой будут данные для формирования файла — год и месяц.

Фронтэнд будет присылать запрос с данными такой структуры для получения файла за указанный месяц/год.
Теперь создадим OData-сервис для возможности формирования файла извне (транзакция SEGW). Модель данных импортируем из созданной структуры



Оба поля отмечаем как ключевые:

После создания отметим Entity Type AVR как Media.

Теперь можно сгенерировать сервис с необходимыми классами.

Также необходимо зарегистрировать сервис


В сформированном классе ZCL_ZODATA_AVR_DPC_EXT необходимо переопределить методы AVRSET_GET_ENTITY и AVRSET_GET_ENTITYSET, но в данном случае их можно оставить пустыми.
Основной метод, в котором будет формироваться файл Excel — это метод /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM. Вот в нем и будет заключён весь функционал.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
METHOD /iwbep/if_mgw_appl_srv_runtime~get_stream. DATA(lv_gjahr) = VALUE gjahr( it_key_tab[ name = 'Gjahr' ]-value OPTIONAL ). DATA(lv_monat) = VALUE monat( it_key_tab[ name = 'Monat' ]-value OPTIONAL ). CHECK lv_gjahr IS NOT INITIAL AND lv_monat IS NOT INITIAL. set_header( is_header = VALUE ihttpnvp( name = 'Content-Disposition' value = |inline; filename={ lv_gjahr }_{ lv_monat }.xls;| ) ). copy_data_to_ref( EXPORTING is_data = VALUE ty_s_media_resource( value = NEW zavr_helper( )->get_content( iv_gjahr = lv_gjahr iv_monat = lv_monat ) mime_type = 'application/xls' ) CHANGING cr_data = er_stream ). ENDMETHOD. |
Таким образом метод будет возвращать XML-файл для открытия в Excel. Для тестирования можно зайти в SAP Gateway Client (транзакция /IWFND/GW_CLIENT) и обратиться к созданному сервису для получения данных


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