Обработка событий в SALV модели

Объектная модель SALV не позволяет редактировать данные (нормальным способом), однако Вы можете обрабатывать множество других событий: нажатие на кнопки, hotspot элементы, ссылки, checkbox’ы, добавлять свои собственные функции, обрабатывать щелчки (двойные щелчки), нажатие специальных клавиш (F1,F2).

Обработка событий полностью основана на событийной модели ABAP Objects. В первую очередь необходимо получить ссылку на класс вызывающий событие (с помощью метода get_events — sALV объекта), затем зарегистрировать обработчик. Классы вызывающие события:

  • CL_SALV_EVENTS — общие события для всех sALV объектов
  • CL_SALV_EVENTS_HIERSEQ — для иерархического списка
  • CL_SALV_EVENTS_LIST — для ALV в виде списка
  • CL_SALV_EVENTS_TABLE — для ALV таблицы
  • CL_SALV_EVENTS_TREE — для древовидного ALV
 
В качестве примера рассмотрим обработку стандартных для всех sALV объектов событий:

Таким же образом, Вы можете назначить свои обработчики для событий sALV объектов. Описание основных событий:

  • TOP_OF_PAGE — позволяет создать свой заголовок для sALV объекьа
  • END_OF_PAGE — позволяет создать подвал
  • BEFORE_SALV_FUNCTION — вызывает обработчик до непосредственно обработки стандартной функции
  • AFTER_SALV_FUNCTION — вызывается после обработки стандартной функции
  • ADDED_FUNCTION — обработка собственных функций
  • DOUBLE_CLICK — двойной щелчок по sALV объекту
  • LINK_CLICK — щелчок по hotspot элементы (кнопке, ссылке, checkbox’у, hotspot ячейке)
  • KEYPRESS (для дерева) — обработка специальных клавиш (F1,F2)
  • CHECKBOX_CHANGE (для дерева) — обработка изменения состояния checkbox элемента

7 комментариев

  1. Подскажите пожалуйста а как можно отследить событие нажатие на кнопку в ячейке грида?

  2. Проблема в том что
    если объявлять кнопку так
    * TRY.
    * go_column ?= go_columns->get_column( ‘PTPZ’ ).
    * go_column->set_cell_type( if_salv_c_cell_type=>BUTTON ).
    * go_column->set_icon( if_salv_c_bool_sap=>true ).
    * go_column->set_long_text( ‘BUTTON’ ).
    * CATCH cx_salv_not_found. «#EC NO_HANDLER
    * ENDTRY.
    то вылетает дамп при полноэкранном режиме,
    а если так
    LOOP AT gt_data ASSIGNING .
    gs_type-columnname = ‘PTPZ’.
    gs_type-value = if_salv_c_cell_type=>BUTTON .
    APPEND gs_type TO -t_cell_type.
    ENDLOOP.
    то событие не отлавливается

    1. Вы правы для полноэкранного режима можно определить тип ячейки — «кнопка», но нельзя обработать событие.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *