Объектная модель 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 элемента
Подскажите пожалуйста а как можно отследить событие нажатие на кнопку в ячейке грида?
Событие LINK_CLICK
Проблема в том что
если объявлять кнопку так
* 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.
то событие не отлавливается
Вы правы для полноэкранного режима можно определить тип ячейки — «кнопка», но нельзя обработать событие.
Если так нужны кнопки, можно использовать Double_click
А как Double_click спасет?
Он будет отлавливаться