В процессе изучения Fiori решил создать небольшое приложение, которое будет формировать файл Excel.
Когда-то я описывал способ создания файла Excel в фоновом режиме с дальнейшей его отправкой на почту. Такой способ подходит только для формирования простых таблиц. В случае необходимости более сложных файлов по определенному шаблону необходимо использовать различные библиотеки. Но бывают ситуации, когда их в системе нет и тогда можно воспользоваться самым простым способом создания «файла Excel».
Прежде всего создадим файл с шаблоном, в котором сразу укажем изменяемые переменные по шаблону ROOT.<имя переменной>

В системе SAP создадим структуру ZSAVR для передачи данных в трансформацию

Сохраним файл в формате «Таблица XML 2003».

В системе SAP создаем трансформацию (транзакция STRANS)

В тег <tt:template> вставляем содержимое файла с шаблоном без первого тега xml, укажем структуру данных и изменим переменные ROOT.<имя переменной> на указание заменять на значение переменной. Например ROOT.CUSTOMER заменяем на
1 2 3 |
<Data ss:Type="String"> <tt:value ref="ROOT.CUSTOMER"/> </Data> |
Таким образом трансформация примет вид:


Весь файл трансформации можно скачать по этой ссылке.
Для теста формирования файла Excel необходимо заполнить структуру типа ZSAVR нужными данными, вызвать трансформацию и сохранить результат в виде файла с расширением XLS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
DATA(ls_avr) = VALUE zsavr( customer = 'Заказчик, Республика Казахстан, г. Алматы' customer_bin = '123456789012' ). DATA lv_content type xstring. CALL TRANSFORMATION zavr SOURCE root = ls_avr RESULT XML lv_content. DATA lt_file TYPE sdokcntbins. DATA lv_len TYPE i. CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' EXPORTING buffer = lv_content IMPORTING output_length = lv_len TABLES binary_tab = lt_file. cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_len filename = 'zavr.xls' filetype = 'BIN' CHANGING data_tab = lt_file EXCEPTIONS OTHERS = 1 ). IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'I'. RETURN. ENDIF. |
Теперь можно создать helper-класс, который будет создавать файл в виде XSTRING. Например ZAVR_HELPER с методом GET_CONTENT, на вход которому приходит месяц и год формирования документа.
В следующих частях создадим OData-сервис и простенькое Fiori-приложение, позволяющее получить нужный Excel-файл.