|
This report shows you how to add a custom button to your ALV grid control.
DATA * Predefine a local class for event handling to allow the * declaration of a reference variable before the class is defined. CLASS lcl_event_receiver DEFINITION DEFERRED. DATA: custom_container1 TYPE REF TO cl_gui_custom_container, cont_on_main TYPE scrfname VALUE 'ALV_GRID', grid1 TYPE REF TO cl_gui_alv_grid, event_receiver TYPE REF TO lcl_event_receiver, okcode LIKE sy-ucomm. DATA: gt_fieldcat TYPE slis_t_fieldcat_alv, gt_fieldcat1 TYPE lvc_t_fcat, gs_layout TYPE slis_layout_alv, gs_layout1 TYPE lvc_s_layo, gs_print TYPE slis_print_alv, gt_sort TYPE slis_t_sortinfo_alv, gt_sp_group TYPE slis_t_sp_group_alv, gt_events TYPE slis_t_event, gt_list_top_of_page TYPE slis_t_listheader. DATA:t_out TYPE TABLE OF zstruct, t_out_wa LIKE zstruct. **************************************************************** * LOCAL CLASSES: Definition **************************************************************** *=============================================================== * class lcl_event_receiver: local class to * define and handle own functions. * Definition: * ~~~~~~~~~~~ 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. **************************************************************** * LOCAL CLASSES: Implementation **************************************************************** *=============================================================== * class lcl_event_receiver (Implementation) CLASS lcl_event_receiver IMPLEMENTATION. METHOD handle_toolbar. * § 2.In event handler method for event TOOLBAR: Append own functions * by using event parameter E_OBJECT. DATA: ls_toolbar TYPE stb_button. *.................................................................... * E_OBJECT of event TOOLBAR is of type REF TO CL_ALV_EVENT_TOOLBAR_SET. * This class has got one attribute, namly MT_TOOLBAR, which * is a table of type TTB_BUTTON. One line of this table is * defined by the Structure STB_BUTTON (see data deklaration above). * * A remark to the flag E_INTERACTIVE: * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * 'e_interactive' is set, if this event is raised due to * the call of 'set_toolbar_interactive' by the user. * You can distinguish this way if the event was raised * by yourself or by ALV * (e.g. in method 'refresh_table_display'). * An application of this feature is still unknown... :-) * append a separator to normal toolbar CLEAR ls_toolbar. MOVE 3 TO ls_toolbar-butn_type. APPEND ls_toolbar TO e_object->mt_toolbar. * append an icon to show booking table CLEAR ls_toolbar. MOVE 'COMMENT' TO ls_toolbar-function. MOVE icon_annotation TO ls_toolbar-icon. MOVE 'Insert Comment'(001) TO ls_toolbar-quickinfo. MOVE 'Notes'(004) TO ls_toolbar-text. MOVE ' ' TO ls_toolbar-disabled. APPEND ls_toolbar TO e_object->mt_toolbar. MOVE 'MATNR' TO ls_toolbar-function. MOVE icon_material TO ls_toolbar-icon. MOVE 'View Material'(002) TO ls_toolbar-quickinfo. MOVE 'Material'(003) TO ls_toolbar-text. MOVE ' ' TO ls_toolbar-disabled. APPEND ls_toolbar TO e_object->mt_toolbar. ENDMETHOD. *------------------------------------------------------------------- METHOD handle_user_command. * § 3.In event handler method for event USER_COMMAND: Query your * function codes defined in step 2 and react accordingly. DATA: lt_rows TYPE lvc_t_row. CASE e_ucomm. WHEN 'COMMENT'. CALL METHOD grid1->get_selected_rows IMPORTING et_index_rows = lt_rows. CALL METHOD cl_gui_cfw=>flush. IF sy-subrc NE 0. * add your handling, for example CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = g_repid txt2 = sy-subrc txt1 = 'Error in Flush'(500). ELSE. PERFORM get_comment TABLES lt_rows. “Perform action ENDIF. WHEN 'MATNR'. CALL METHOD grid1->get_selected_rows IMPORTING et_index_rows = lt_rows. CALL METHOD cl_gui_cfw=>flush. IF sy-subrc NE 0. * add your handling, for example CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = g_repid txt2 = sy-subrc txt1 = 'Error in Flush'(500). ELSE. READ TABLE lt_rows INDEX 1. IF sy-subrc = 0. READ TABLE t_out INTO t_out_wa INDEX lt_rows-index. IF sy-subrc = 0. SET PARAMETER ID 'MAT' FIELD t_out_wa-matnr. CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN. "View Material ELSE. MESSAGE i999(b1) WITH 'Entry not found!'. ENDIF. ELSE. MESSAGE i999(b1) WITH 'Please select a line first!'. ENDIF. ENDIF. ENDCASE. ENDMETHOD. "handle_user_command *----------------------------------------------------------------- ENDCLASS. * * lcl_event_receiver (Implementation) *=================================================================== PBO process before output. MODULE STATUS_2000. module init_data. module create_container. *&---------------------------------------------------------------------* *& Module create_container OUTPUT *&---------------------------------------------------------------------* module create_container output. if custom_container1 is initial. * create a custom container control for our ALV Control create object custom_container1 exporting container_name = cont_on_main exceptions cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5. if sy-subrc ne 0. * add your handling, for example call function 'POPUP_TO_INFORM' exporting titel = g_repid txt2 = sy-subrc txt1 = 'The control could not be created'(001). endif. * create an instance of alv control create object grid1 exporting i_parent = custom_container1. * allow to select single lines - Multilines = A gs_layout1-sel_mode = 'B'. t_out[] = t_out_mat[]. gt_fieldcat1[] = gt_fieldcat[]. * ZSTRUCT needs to be a structure or table in the data dictionary. * The data elements are used for the column headings of your table control. * T_OUT is your table for data. call method grid1->set_table_for_first_display exporting i_structure_name = 'ZSTRUCT' is_layout = gs_layout1 changing it_outtab = t_out. * ->Create Object to receive events and link them to handler methods. * When the ALV Control raises the event for the specified instance * the corresponding method is automatically called. * create object event_receiver. set handler event_receiver->handle_user_command for grid1. set handler event_receiver->handle_toolbar for grid1. * § 4.Call method 'set_toolbar_interactive' to raise event TOOLBAR. call method grid1->set_toolbar_interactive. endif. call method cl_gui_control=>set_focus exporting control = grid1. endmodule. " create_container OUTPUT
Related Items:
|