Здравствуйте. У меня такой вопрос. Мне нужно добавить кнопку к toolbar алв. Работаю я с АЛВ при помощи REUSE_ALV_GRID_DISPLAY.
В форуме вычитал что это можно зделать так:
Code:
*&---------------------------------------------------------------------*
*& Form USER_COMMAND
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = lf_programm
IS_LAYOUT = ls_layout
I_CALLBACK_PF_STATUS_SET = 'SET_MY_PF_STATUS'
I_SAVE = 'A'
IS_VARIANT = ls_variant
IT_EVENTS = lt_events
IT_FIELDCAT = lt_fieldcat
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_GRID_TITLE = lf_title
TABLES
T_OUTTAB = pt_output.
*&---------------------------------------------------------------------*
*& Form set_my_pf_status
*&---------------------------------------------------------------------*
* Установка статуса
*----------------------------------------------------------------------*
FORM SET_MY_PF_STATUS USING PF_TAB TYPE SLIS_T_EXTAB.
SET PF-STATUS 'ZSTANDARD' OF PROGRAM sy-repid.
ENDFORM.
*&---------------------------------------------------------------------*
* Обработка команд пользователя
*----------------------------------------------------------------------*
* --> R_UCOMM - команда пользователя
* --> RS_SELFIELD - выбранное поле
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA: ls_output TYPE TS_OUTPUT_ALV.
CASE r_ucomm.
WHEN 'ZPRN'. " Команда указанная вами на вашу кнопку в тулбаре
*Вызов вашейго функционального модуля
ENDCASE.
ENDFORM.
Но оно затерает весь статус(кнопки) как АЛВ, так и программы.
Меня интересует просто как добавить кнопку не теряя остальных кнопок и их обработок.
Втрой вариант:
Code:
class lcl_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.
private section.
endclass.
Потом отимплементим: Код:
class lcl_event_receiver implementation.
method handle_toolbar.
data:
ls_toolbar type stb_button.
read table e_object->mt_toolbar into ls_toolbar
with key function = 'SELECTED_LINES'.
IF sy-subrc <> 0.
clear ls_toolbar.
ls_toolbar-butn_type = 3. "separator
append ls_toolbar to e_object->mt_toolbar.
clear ls_toolbar.
ls_toolbar-function = 'FORM_SHOW'.
ls_toolbar-icon = ICON_XLS.
ls_toolbar-quickinfo = ''. "All lines
ls_toolbar-butn_type = 0. "push button
ls_toolbar-disabled = ''.
ls_toolbar-text = ''.
append ls_toolbar to e_object->mt_toolbar.
ENDIF.
endmethod.
method handle_user_command.
case e_ucomm.
when 'FORM_SHOW'.
perform smartform_main. "тут выводим нашу смартформу
endcase.
endmethod.
endclass.
В основной программе: Код:
DATA: my_event_receiver TYPE REF TO lcl_event_receiver,
alv_grid TYPE REF TO cl_gui_alv_grid.
...
create object my_event_receiver.
set handler my_event_receiver->handle_toolbar for alv_grid.
set handler my_event_receiver->handle_user_command for alv_grid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
...
Вылетает в дамп на строке:
set handler my_event_receiver->handle_toolbar for alv_grid.
Может кто-то подскажет, или направит на путь истинный
