You are on page 1of 4

*&---------------------------------------------------------------------*

*& Report BCALV_TEST_USER_COMMANDS


*
*&
*
*&---------------------------------------------------------------------*
*&
*
*&
*
*&---------------------------------------------------------------------*
REPORT bcalv_test_user_commands.
INCLUDE <icon>.
CLASS lcl_event_receiver DEFINITION DEFERRED.
* data declaration
DATA: ok_code LIKE sy-ucomm,
m TYPE i,
code_ok LIKE ok_code,
carrid TYPE alv_s_edit-carrid,
connid TYPE alv_s_edit-connid,
fieldcat TYPE lvc_t_fcat, " WITH HEADER LINE,
ls_fieldcat LIKE LINE OF fieldcat,
g_custom_container TYPE REF TO cl_gui_custom_container,
gt_outtab TYPE TABLE OF alv_t_t2,
gs_outtab LIKE LINE OF gt_outtab,
gt_outtab_2 LIKE gt_outtab,
gs_outtab_2 LIKE LINE OF gt_outtab_2,
g_container TYPE scrfname VALUE 'G_CONTAINER',
grid TYPE REF TO cl_gui_alv_grid,
*
custom_container TYPE REF TO cl_gui_custom_container,
event_receiver TYPE REF TO lcl_event_receiver.
* parameters for the selection screen
PARAMETERS: pa_car LIKE carrid DEFAULT 'LH',
pa_con LIKE connid DEFAULT '402'.
SELECTION-SCREEN SKIP.
PARAMETERS: pa_rows TYPE i DEFAULT '200'.
PARAMETERS: pa_del TYPE char1 DEFAULT 'X'.

"#EC NOTEXT
"#EC NOTEXT
"#EC NOTEXT
"#EC NOTEXT

*---------------------------------------------------------------------*
*
CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
"#EC *
PUBLIC SECTION.
* define methods for event-handling
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,
handle_after_user_command
FOR EVENT after_user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.

"#EC NEEDED

ENDCLASS.

"lcl_event_receiver DEFINITION

*---------------------------------------------------------------------*
*
CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
"#EC *
* implementation of the event-handling methods
* add one more icon to the toolbar
METHOD handle_toolbar.
DATA: ls_toolbar TYPE stb_button.
CLEAR ls_toolbar.
MOVE 0 TO ls_toolbar-butn_type.
MOVE 'CHANGE' TO ls_toolbar-function.
MOVE icon_sap TO ls_toolbar-icon.
MOVE 'Change Data'(111) TO ls_toolbar-quickinfo.
MOVE ' ' TO ls_toolbar-disabled.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD.

"handle_toolbar

* what is the user command


METHOD handle_user_command.
DATA: lt_rows TYPE lvc_t_row,
ls_rows TYPE lvc_s_row.
CASE e_ucomm.
WHEN 'CHANGE'.
MESSAGE i322(0k).
CALL METHOD grid->get_selected_rows
IMPORTING
et_index_rows = lt_rows.
CLEAR e_ucomm.
ENDCASE.
DO 1 TIMES.
LOOP AT lt_rows INTO ls_rows.
m = ls_rows-index.
HIDE: m.
ENDLOOP.
ENDDO.
ENDMETHOD.

"handle_user_command

* what should happen after the user command


METHOD handle_after_user_command.
DATA: ls_cells TYPE lvc_s_pos,
lt_cells TYPE lvc_t_pos.
CASE e_ucomm.
WHEN 'CHANGE'.
MESSAGE i321(0k).

"#EC NOTEXT

READ TABLE gt_outtab_2 INTO gs_outtab_2 INDEX m.


gs_outtab_2-seatsmax = gs_outtab_2-seatsmax + m.
MODIFY gt_outtab_2 FROM gs_outtab_2 INDEX m.
ls_cells-fieldname = 'SEATSMAX'.
ls_cells-row_id = m.
APPEND ls_cells TO lt_cells.
CALL METHOD grid->change_data_from_inside
EXPORTING
it_cells = lt_cells.
ENDCASE.
ENDMETHOD.
ENDCLASS.

"handle_after_user_command
"lcl_event_receiver IMPLEMENTATION

START-OF-SELECTION.
* selection of the data
SELECT * FROM alv_t_t2 INTO CORRESPONDING FIELDS OF TABLE gt_outtab
UP TO pa_rows ROWS ORDER BY PRIMARY KEY. "#EC CI_NOWHERE
IF pa_car IS INITIAL.
LOOP AT gt_outtab INTO gs_outtab.
MOVE-CORRESPONDING gs_outtab TO gs_outtab_2.
APPEND gs_outtab_2 TO gt_outtab_2.
ENDLOOP.
ELSEIF pa_con IS INITIAL.
LOOP AT gt_outtab INTO gs_outtab WHERE carrid = pa_car.
MOVE-CORRESPONDING gs_outtab TO gs_outtab_2.
APPEND gs_outtab_2 TO gt_outtab_2.
ENDLOOP.
ELSE.
LOOP AT gt_outtab INTO gs_outtab WHERE carrid = pa_car AND connid =
pa_con.
MOVE-CORRESPONDING gs_outtab TO gs_outtab_2.
APPEND gs_outtab_2 TO gt_outtab_2.
ENDLOOP.
ENDIF.
CALL SCREEN 100.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&
Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET TITLEBAR 'D100'.
SET PF-STATUS 'D100'.
* creation of the ALV Grid Control
IF g_custom_container IS INITIAL.
CREATE OBJECT g_custom_container
EXPORTING
container_name = g_container.

"#EC NOTEXT
"#EC NOTEXT

CREATE OBJECT grid


EXPORTING
i_parent = g_custom_container.
* merge the fieldcatalog
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'ALV_T_T2'
CHANGING
ct_fieldcat
= fieldcat[].

"#EC *
"#EC NOTEXT

CLEAR ls_fieldcat.
LOOP AT fieldcat INTO ls_fieldcat WHERE fieldname = 'SEATSMAX'."#EC NOTEXT
ls_fieldcat-emphasize = 'X'.
"#EC NOTEXT
MODIFY fieldcat FROM ls_fieldcat.
ENDLOOP.
* set table for first display
CALL METHOD grid->set_table_for_first_display
EXPORTING
i_structure_name = 'ALV_T_T2'
CHANGING
it_fieldcatalog = fieldcat
it_outtab
= gt_outtab_2.

"#EC NOTEXT

CREATE OBJECT event_receiver.


SET HANDLER event_receiver->handle_user_command FOR grid.
SET HANDLER event_receiver->handle_after_user_command FOR grid.
SET HANDLER event_receiver->handle_toolbar FOR grid.
CALL METHOD grid->set_toolbar_interactive.
ENDIF.
ENDMODULE.

"IF grid IS INITIAL


" STATUS_0100 OUTPUT

*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
* action according to the function codes
code_ok = ok_code.
CLEAR ok_code.
CASE code_ok.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.

"#EC NOTEXT

" USER_COMMAND_0100 INPUT

You might also like