Меню

Глава 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

5 копеек:
в случае, если команд несколько (более 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

тогда в случае функции REFRESH, будет вызываться метод ALV_FUNC_REFRESH
 
в случае кнопки CHECK_MOON - метод ALV_FUNC_CHECK_MOON
 
подход обеспечивает удобное чтение.
Также если одна функция состоит из нескольких, например есть кнопка "отправить фактуру в качестве приложения" и кнопка "Печать", то для реализации кнопки "Отправить и распечатать" нужно вызвать два уже реализованных метода. Опять же это удобно читать.
 
Кому-то может это странным показаться, но мне удобно :-)