Для этого надо создать класс обработчик для обработки событий 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.
Подробнее...
Сюда я буду сохранять всякие куски кода, конфигов, ссылки, чтобы в один прекрасный день когда мне это снова понадобится - не вспоминать судорожно где и когда я это применял.
Показаны сообщения с ярлыком TOOLBAR. Показать все сообщения
Показаны сообщения с ярлыком TOOLBAR. Показать все сообщения
27 апреля 2011 г.
3 ноября 2010 г.
ABAP: добавление кнопок (и не только) в TOOLBAR ALV GRID, созданного через REUSE_ALV_GRID_DISPLAY
REUSE_ALV_GRID_DISPLAY позволяет указать PF-STATUS который будет использоваться при выводе грида, и название формы в которой будет происходить обработка юзер-комманд. Этим и стоит воспользоваться.
PF-STATUS лучше делать не с нуля, а в транзакции SE41 скопировать из программы SAPLSLVC_FULLSCREEN статус STANDARD_FULLSCREEN, чтобы иметь на тулбаре все стандартные кнопки грида.
После того как статус создан можно писать код.
ПРИМЕР:
В скопированный GUI-STATUS добавил кнопку
*--------------------------------------------------------------*
* сохраняем в перемнную имя программы
lv_repid = sy-repid.
* вызывавем ФМ, указываем в нем названия форм которые
* устанавливают pf-status и обрабатывают команды
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = lv_repid
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_GRID_TITLE = 'Отчет по планированию доходов'
IT_FIELDCAT_LVC = lt_fcat
TABLES
T_OUTTAB = it_plantab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
* устанавливаем PF-STATUS
FORM SET_PF_STATUS USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'GUI_ALVGRIDX'.
ENDFORM.
* обрабатываем команды
FORM USER_COMMAND USING p_ucomm LIKE sy-ucomm
ps_selfield TYPE slis_selfield.
CASE p_ucomm.
WHEN 'PXLS'.
" выполняем что-то крайне важное
ENDCASE.
ENDFORM.
*--------------------------------------------------------------*
Подробнее...
PF-STATUS лучше делать не с нуля, а в транзакции SE41 скопировать из программы SAPLSLVC_FULLSCREEN статус STANDARD_FULLSCREEN, чтобы иметь на тулбаре все стандартные кнопки грида.
После того как статус создан можно писать код.
ПРИМЕР:
В скопированный GUI-STATUS добавил кнопку
* сохраняем в перемнную имя программы
lv_repid = sy-repid.
* вызывавем ФМ, указываем в нем названия форм которые
* устанавливают pf-status и обрабатывают команды
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = lv_repid
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_GRID_TITLE = 'Отчет по планированию доходов'
IT_FIELDCAT_LVC = lt_fcat
TABLES
T_OUTTAB = it_plantab
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
* устанавливаем PF-STATUS
FORM SET_PF_STATUS USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'GUI_ALVGRIDX'.
ENDFORM.
* обрабатываем команды
FORM USER_COMMAND USING p_ucomm LIKE sy-ucomm
ps_selfield TYPE slis_selfield.
CASE p_ucomm.
WHEN 'PXLS'.
" выполняем что-то крайне важное
ENDCASE.
ENDFORM.
*--------------------------------------------------------------*
29 октября 2010 г.
ABAP: добавление своей кнопки в TOOLBAR SELECTION-SCREEN
Один из способов добавить свою кнопку в toolbar на SELECTION-SCREEN.
*--------------------------------------------------------------*
* Объявляем специальную системную
* структуру для работы с экраном
TABLES: sscrfields.
* Объявляем структуру которую будем
* использовать для формирования текстов для кнопок
DATA: functxt TYPE smp_dyntxt.
SELECT-OPTIONS...
PARAMETERS...
* Активируем кнопку номер 1
SELECTION-SCREEN FUNCTION KEY 1.
* в этом событии создаем кнопку и записываем
* ее в sscrfields
AT SELECTION-SCREEN OUTPUT.
functxt-icon_id = icon_create.
functxt-quickinfo = 'Создать'.
functxt-icon_text = 'Создать'.
MOVE funcxt TO sscrfields-functxt_01.
* Обрабатываем реакцию на нажатие кнопки
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'FC01'.
"тут происходит что-то важное
"и тут
"и еще немного тут
ENDCASE.
*--------------------------------------------------------------*
В результате получится что-то в этом духе:
Подробнее...
*--------------------------------------------------------------*
* Объявляем специальную системную
* структуру для работы с экраном
TABLES: sscrfields.
* Объявляем структуру которую будем
* использовать для формирования текстов для кнопок
DATA: functxt TYPE smp_dyntxt.
SELECT-OPTIONS...
PARAMETERS...
* Активируем кнопку номер 1
SELECTION-SCREEN FUNCTION KEY 1.
* в этом событии создаем кнопку и записываем
* ее в sscrfields
AT SELECTION-SCREEN OUTPUT.
functxt-icon_id = icon_create.
functxt-quickinfo = 'Создать'.
functxt-icon_text = 'Создать'.
MOVE funcxt TO sscrfields-functxt_01.
* Обрабатываем реакцию на нажатие кнопки
AT SELECTION-SCREEN.
CASE sscrfields-ucomm.
WHEN 'FC01'.
"тут происходит что-то важное
"и тут
"и еще немного тут
ENDCASE.
*--------------------------------------------------------------*
В результате получится что-то в этом духе:
Подписаться на:
Сообщения (Atom)