Для этого надо создать класс обработчик для обработки событий toolbar и user_command для ALV GRID.
Пример:
CLASS cl_trans_g_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive,
handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
CLASS cl_trans_g_event_receiver IMPLEMENTATION.
METHOD handle_toolbar.
PERFORM method_trans_toolbar USING e_object.
ENDMETHOD.
METHOD handle_user_command.
PERFORM method_trans_user_command USING e_ucomm.
ENDMETHOD.
ENDCLASS.
* Добавление кнопки в тулбар
FORM METHOD_TRANS_TOOLBAR USING P_E_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET.
DATA: ty_toolbar TYPE stb_button.
* разделитель
CLEAR ty_toolbar.
ty_toolbar-butn_type = 3.
APPEND ty_toolbar TO p_e_object->mt_toolbar.
* кнопка
CLEAR ty_toolbar.
ty_toolbar-function = 'MYBUTT'.
ty_toolbar-icon = ICON_HISTORY.
ty_toolbar-butn_type = 0.
ty_toolbar-text = 'Моя кнопка'.
APPEND ty_toolbar TO p_e_object->mt_toolbar.
ENDFORM.
* Обработка команд
FORM METHOD_TRANS_USER_COMMAND USING P_E_UCOMM TYPE SY-UCOMM.
CASE p_e_ucomm.
WHEN 'MYBUTT'.
* ЧТО-ТО ДЕЛАЕМ
ENDCASE.
ENDFORM.
Ну и надо незабыть инициализировать все это после создания грида:
DATA: trans_g_event_receiver TYPE REF TO cl_trans_g_event_receiver.
CREATE OBJECT trans_g_event_receiver.
SET HANDLER trans_g_event_receiver->handle_toolbar FOR trans_grid.
SET HANDLER trans_g_event_receiver->handle_user_command FOR trans_grid.
Сюда я буду сохранять всякие куски кода, конфигов, ссылки, чтобы в один прекрасный день когда мне это снова понадобится - не вспоминать судорожно где и когда я это применял.
27 апреля 2011 г.
ABAP: добавление своей кнопки в TOOLBAR ALV GRID
Подписаться на:
Комментарии к сообщению (Atom)
а я повадился общую подпрограмму с case-ом писать:
ОтветитьУдалитьFORM ON_USER_COMMAND USING comm type SYUCOMM scr TYPE i.
и вызывать его и из ПБО и из alv-кнопок и из прочих обработчиков событий у которых другие параметры не нужны.
что такое trans_grid ?
ОтветитьУдалитьalv grid, в который добавляем кнопки в тулбар. тип его cl_gui_alv_grid.
ОтветитьУдалитьЕсли уж переименовываете исходный класс lcl_event_handler, то хоть ссылку на оригинал BCALV_GRID_05 оставляли бы:)
ОтветитьУдалитьВо-первых, а с чего это Вы взяли, что именно он оригинал? Как бы далеко не всегда заготовка берётся из стандартных примеров. Иногда можно подсмотреть в каком-то другом месте или вообще можно посмотреть события алв-грида и написать руками, не подсматривая.
ОтветитьУдалитьВо-вторых, как бы такое наименование вполне подойдёт для програмки-примера: в таблицу "table" добавить кнопку "button" с помощью хэндлера событий "event_handler". Но в реальных задачах обычно дают осмысленные названия классам и переменным (хотя бы глобальным).