В предыдущей статье мы рассматривали класс ZCL_GUI_SCREEN для создания экранов из ОО-контекста. В большинстве приложений экраны содержат контейнер с размещенным на нем экземпляром таблицы ALV. Для более удобной работы, библиотека ZCA_GUI содержит уже класс ZCL_GUI_SCREEN_ALV, обернутый в экран ZCL_GUI_SCREEN. Класс содержит в себе все возможности нативного CL_GUI_ALV_GRID.
Сразу приведу пример для быстрого вывода таблицы
1 2 3 4 5 |
SELECT * FROM sbook INTO TABLE @DATA(lt_data). NEW zcl_gui_screen_alv( REF #( lt_data ) )->display( ). |
В данном и в предыдущем примере мы рассматривали создание экрана через наследование. Класс ZCL_GUI_SCREEN_ALV можно также наследовать, а можно его использовать через композицию. Рассмотрим второй вариант. Ниже приведен пример вывода ALV со своей кнопкой в GUI-статусе. А также общими кнопками «Сохранить» и «Обновить». Также реализована обработка события двойного клика по ячейке таблицы.
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
CLASS lcl_app DEFINITION. PUBLIC SECTION. METHODS constructor. METHODS run. PRIVATE SECTION. METHODS on_init FOR EVENT init OF zcl_gui_screen_alv IMPORTING io_grid ir_sets. METHODS on_pai FOR EVENT pai OF zcl_gui_screen_alv IMPORTING iv_command. METHODS on_double_click FOR EVENT double_click OF zcl_gui_screen_alv IMPORTING ir_data iv_column iv_row. DATA mo_screen TYPE REF TO zcl_gui_screen_alv. DATA mt_outtab TYPE TABLE OF spfli. ENDCLASS. CLASS lcl_app IMPLEMENTATION. METHOD constructor. SELECT * FROM spfli INTO TABLE @mt_outtab. mo_screen = NEW #( REF #( mt_outtab ) ). SET HANDLER on_init FOR mo_screen. SET HANDLER on_pai FOR mo_screen. SET HANDLER on_double_click FOR mo_screen. mo_screen->set_title( 'Удобный вывод ALV' ). mo_screen->display( ). ENDMETHOD. METHOD run. ENDMETHOD. METHOD on_init. " IO_GRID - здесь нам доступна созданная инстанция ALV " IR_SETS - здесь доступны настройки отображения ALV " - SAVE " - S_VARIANT " - S_LAYOUT " - T_TOOLBAR_EXCLUDING " - T_FIELDCATALOG " - T_SORT " - T_FILTER " Добавляем возможность сохранения варианта ir_sets->s_variant-report = sy-repid. ir_sets->s_variant-handle = 'MAIN'. " Включаем кнопки сохранения и обновления таблицы mo_screen->enable_function( zif_gui_screen=>mc_button_save ). mo_screen->enable_function( zif_gui_screen=>mc_button_refresh ). " Добавляем новую кнопку mo_screen->create_function( iv_command = 'NEW_BUTTON' iv_icon = icon_abc iv_text = 'Новая кнопка' iv_tooltip = 'Всплывающая подсказка' ). ENDMETHOD. METHOD on_pai. CASE iv_command. WHEN zif_gui_screen=>mc_button_refresh. mo_screen->refresh( ). WHEN OTHERS. MESSAGE |PAI: { iv_command }| TYPE rs_c_success. ENDCASE. ENDMETHOD. METHOD on_double_click. MESSAGE |Double Click: { iv_column }[{ iv_row }]| TYPE rs_c_success. ENDMETHOD. ENDCLASS. START-OF-SELECTION. NEW lcl_app( )->run( ). |
Присоединиться к обсуждению...