Posted: Sat Sep 08, 2007 12:04 am Post subject: Toolbar & User command in ALV(OOPS)
Author: J.Jayanthi
Description:
This document describes how to use
toolbar
user command
in ALV using OOPS method.
This document describes the how to use the events for toolbar and user command in OOPS ALV.
Procedure
Step 1: Create object for event. Data o_event type ref to lcl_event_receiver.
Since the normal practice is to define declarations, we need to mention that lcl_event_receiver class is defined somewhere in the program. So before writing the declaration of o_event, this statement should be written.
CLASS lcl_event_receiver DEFINITION DEFERRED.
Data o_event type ref to lcl_event_receiver.
In PBO, create the object for event.
* Create the event reciever
CREATE OBJECT o_event.
Step 2: Define the class for events toolbar and user_command. Go to tcode SE24 and check the parameters tab for the events toolbar and user_command of class cl_gui_alv_grid.
CLASS lcl_event_receiver DEFINITION.
* event receiver definitions for ALV actions
PUBLIC SECTION.
METHODS:
* Tool bar
handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object
e_interactive,
* Status bar
handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
Step 3: Write the implementation part for the defined method.
CLASS lcl_event_receiver IMPLEMENTATION.
* create the relevant buttons on the toolbars
METHOD handle_toolbar.
* This method handles the user interaction with the tool bar.
perform toolbar.
APPEND w_toolbar TO e_object->mt_toolbar.
ENDMETHOD.
METHOD handle_user_command.
* In event handler method for event USER_COMMAND: Query your
* function codes defined in step 2 and react accordingly.
perform user_command using e_ucomm.
ENDMETHOD.
ENDCLASS.
For a button to appear in the toolbar, we need to pass the function code and other details as below.
form toolbar.
CLEAR w_toolbar.
MOVE : 'COUNT' TO w_toolbar-function,"Function code
'' TO w_toolbar-icon,"Name of an Icon
'' TO w_toolbar-quickinfo,"Quickinfo for an icon
'' TO w_toolbar-butn_type,"Toolbar button type
'' TO w_toolbar-disabled,"Disabled
'COUNT' TO w_toolbar-text."Text
endform. " toolbar
This user command event is handled in a such a way that once the user selects the required records and then presses the new button COUNT, the user_command will be triggered to find out the no. of rows selected.
form user_command using p_e_ucomm.
DATA :li_rows TYPE STANDARD TABLE OF lvc_s_row,
"Internal table for getting selected rows
lv_ln TYPE i."No. of rows selected
CALL METHOD o_grid->get_selected_rows
IMPORTING
et_index_rows = li_rows.
CASE p_e_ucomm.
WHEN 'COUNT'.
DESCRIBE TABLE li_rows LINES lv_ln.
MESSAGE s001(zalv) WITH 'No. of rows selected' lv_ln.
ENDCASE.
endform. " user_command
Step 4: These events should be handled in PBO.
* Handling Events
SET HANDLER o_event->handle_toolbar FOR o_grid.
SET HANDLER o_event->handle_user_command FOR o_grid.
Complete Code
Screen 9000, GUI Status ZSTATUS and GUI Title ZTITLE should be created and in Flow logic of the screen, PBO and PAI should be uncommented.
Code:
* 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 Declaration
data : itab type standard table of MARA,"Output Internal table
i_fieldcat type standard table of lvc_s_fcat,"Field catalog
wa type MARA,
w_variant type disvariant,
o_docking type ref to cl_gui_docking_container,"Docking Container
o_grid type ref to cl_gui_alv_grid,"Grid
o_event type ref to lcl_event_receiver,"Events
w_toolbar type stb_button,"For toolbar
w_layout TYPE lvc_s_layo."Layout structure
select * from mara into corresponding fields of table itab up to 10 rows.
call screen 9000.
CLASS lcl_event_receiver DEFINITION.
* event receiver definitions for ALV actions
PUBLIC SECTION.
METHODS:
* Tool bar
handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object
e_interactive,
* Status bar
handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
* create the relevant buttons on the toolbars
METHOD handle_toolbar.
* This method handles the user interaction with the tool bar.
perform toolbar.
APPEND w_toolbar TO e_object->mt_toolbar.
ENDMETHOD.
METHOD handle_user_command.
* In event handler method for event USER_COMMAND: Query your
* function codes defined in step 2 and react accordingly.
perform user_command using e_ucomm.
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
* PBO
*----------------------------------------------------------------------*
module STATUS_9000 output.
if o_docking is initial.
SET PF-STATUS 'ZSTATUS'. "GUI Status
SET TITLEBAR 'ZTITLE'. "Title
* Creating Objects
perform create_objects.
* Handling Events
perform handle_events.
* Filling the fieldcatalog table
perform build_fieldcat.
* Displaying the output
perform display_output.
endif.
endmodule. " STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
* PAI
*----------------------------------------------------------------------*
module USER_COMMAND_9000 input.
data lv_ucomm type sy-ucomm.
lv_ucomm = sy-ucomm.
CASE lv_ucomm.
WHEN 'CANCEl' OR 'EXIT'.
perform free_objects.
LEAVE PROGRAM.
when 'BACK'.
perform free_objects.
set screen '0'.
leave screen.
ENDCASE.
endmodule. " USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*& Form create_objects
*&---------------------------------------------------------------------*
* Creating Container,Grid and Event receiver
*----------------------------------------------------------------------*
form create_objects .
* Creating Docking Container
CREATE OBJECT o_docking
EXPORTING
RATIO = '95'.
IF sy-subrc eq 0.
* Creating Grid
CREATE OBJECT o_grid
EXPORTING
i_parent = o_docking.
ENDIF.
* Create the event receiver
CREATE OBJECT o_event.
endform. " create_objects
*&---------------------------------------------------------------------*
*& Form handle_events
*&---------------------------------------------------------------------*
* Handling Events
*----------------------------------------------------------------------*
form handle_events.
* Handling Events
SET HANDLER o_event->handle_toolbar FOR o_grid.
SET HANDLER o_event->handle_user_command FOR o_grid.
endform. " handle_events
*&---------------------------------------------------------------------*
*& Form toolbar
*&---------------------------------------------------------------------*
* Creating a button in Toolbar
*----------------------------------------------------------------------*
form toolbar.
CLEAR w_toolbar.
MOVE : 'COUNT' TO w_toolbar-function,"Function code
'' TO w_toolbar-icon,"Name of an Icon
'' TO w_toolbar-quickinfo,"Quickinfo for an icon
'' TO w_toolbar-butn_type,"Toolbar button type
'' TO w_toolbar-disabled,"Disabled
'COUNT' TO w_toolbar-text."Text
endform. " toolbar
*&---------------------------------------------------------------------*
*& Form build_fieldcat
*&---------------------------------------------------------------------*
* Creating Field catalog
*----------------------------------------------------------------------*
form build_fieldcat .
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'MARA'
CHANGING
ct_fieldcat = i_fieldcat
EXCEPTIONS
INCONSISTENT_INTERFACE = 1
PROGRAM_ERROR = 2
OTHERS = 3.
endform. " build_fieldcat
*&---------------------------------------------------------------------*
*& Form display_output
*&---------------------------------------------------------------------*
* Displaying the Output
*----------------------------------------------------------------------*
form display_output .
w_variant-report = sy-repid.
w_layout-sel_mode = 'A'.
CALL METHOD o_grid->set_table_for_first_display
EXPORTING
IS_VARIANT = w_variant
I_SAVE = 'A'
is_layout = w_layout
CHANGING
it_outtab = itab
IT_FIELDCATALOG = i_fieldcat
EXCEPTIONS
INVALID_PARAMETER_COMBINATION = 1
PROGRAM_ERROR = 2
TOO_MANY_LINES = 3
others = 4.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endform. " display_output
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* Handling User command
*----------------------------------------------------------------------*
form user_command using p_e_ucomm.
DATA :li_rows TYPE STANDARD TABLE OF lvc_s_row,
"Internal table for getting selected rows
lv_ln TYPE i."No. of rows selected
CALL METHOD o_grid->get_selected_rows
IMPORTING
et_index_rows = li_rows.
CASE p_e_ucomm.
WHEN 'COUNT'.
DESCRIBE TABLE li_rows LINES lv_ln.
MESSAGE s001(zalv) WITH 'No. of rows selected' lv_ln.
ENDCASE.
endform. " user_command
*&---------------------------------------------------------------------*
*& Form free_objects
*&---------------------------------------------------------------------*
* Free Objects
*----------------------------------------------------------------------*
form free_objects .
CALL METHOD o_grid->free
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
others = 3.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD o_docking->free
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
others = 3.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
endform. " free_objects
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.