Глава 1. Создание ALV GRID. Часть 8
Создание ALV GRID. Обновление отчета.
§ 8. Обновление отчета
Создадим кнопку REFRESH в ALV отчете. По нажатию данной кнопки реализуем обновление данных в отчете.
Класс ZCL_MVC_001_VIEW – представление данных.
Класс ZCL_MVC_001_MODEL – выборка данных.
Т.к. данные классы не знают о существовании друг друга, взаимодействие между ними будут реализовано через класс контроллер ZCL_MVC_001_CONTR .
В классе ZCL_MVC_001_VIEW создаем событие REFRESH_REPORT.
Рис. 1
Метод BTN_REFRESH запустеем после нажатия кнопки REFRESH. Метод обновления экрана REFRESH_SCREEN будет запускаться контроллером.
Рис. 2
Рис. 3
Код для отображения кнопки REFRESH на экране.
METHOD zif_alv_grid_template~handle_toolbar.
DATA: ls_toolbar TYPE stb_button.
ls_toolbar-function = 'REFRESH'.
ls_toolbar-icon = icon_refresh.
ls_toolbar-text = 'Refresh'.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD.
Метод обработки события USER_COMMAND класса CL_GUI_ALV_GRID.
METHOD zif_alv_grid_template~handle_user_command.
CASE e_ucomm.
WHEN 'REFRESH'.
CALL METHOD me->btn_refresh.
ENDCASE.
ENDMETHOD.
Метод BTN_REFRESH запускает событие
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти
Обсуждения 3
Комментарий от
Олег Башкатов
| 11 апреля 2015, 00:32
в случае, если команд несколько (более 3 с возможностью увеличения), использую динамический вызов метода вместо конструкции типа
CASE e_ucomm.
WHEN 'REFRESH'.
CALL METHOD me->btn_refresh.
ENDCASE.
выглядит так:
Комментарий от
Олег Башкатов
| 11 апреля 2015, 00:36
methods ALV_AFTER_USER_COMMAND
for event AFTER_USER_COMMAND of CL_GUI_ALV_GRID
importing
E_UCOMM
E_SAVED
E_NOT_PROCESSED
""""""""""""""""
method ALV_AFTER_USER_COMMAND.
DATA: lmv_ucomm TYPE syuname
.
lmv_ucomm = E_UCOMM.
data: lv_method_name TYPE C LENGTH 25
, lv_gui_func TYPE C LENGTH 11
.
CONCATENATE 'ALV_FUNC_' lmv_ucomm INTO lv_method_name.
IF lv_method_name is INITIAL.
else.
TRY .
call method me->(lv_method_name).
CATCH CX_SY_DYN_CALL_ILLEGAL_METHOD.
MESSAGE s999 WITH lv_method_name. " Не реализован метод &1
CATCH CX_SY_REF_IS_INITIAL.
MESSAGE s999 WITH lv_method_name. " Не реализован метод &1
ENDTRY.
ENDIF.
endmethod.
Комментарий от
Олег Башкатов
| 11 апреля 2015, 00:40
в случае кнопки CHECK_MOON - метод ALV_FUNC_CHECK_MOON
подход обеспечивает удобное чтение.
Также если одна функция состоит из нескольких, например есть кнопка "отправить фактуру в качестве приложения" и кнопка "Печать", то для реализации кнопки "Отправить и распечатать" нужно вызвать два уже реализованных метода. Опять же это удобно читать.
Кому-то может это странным показаться, но мне удобно :-)