Steps To Create Tree Control
Steps To Create Tree Control
doc Page 1 of 30
The ALV tree report produces uses OBJECT METHOD functionality in-order to produce
a Tree structured ALV output. The creation of an ALV tree report first requires the
creation of a simple program to build the ALV Details such as the field catalog and to call
a screen which will be used to display the ALV Tree. The screen should be created with a
'custom control' where you wish the ALV tree report to appear.
For the following example it will have the name 'SCREEN_CONTAINER'.
Creation of Main Program code, Data declaration and screen call
Creation of 'INCLUDES' to store ALV tree code
Create Screen along with PBO and PAI modules for screen
Define OK CODE (SY-UCOMM) variable
Add screen control to PAI module (INCLUDE Z......I01)
Create pf-status
Once you have the main program code in place to call the screen which will display the
ALV tree, you now need to setup the actual ALV tree and populate it. As this is screen
Based (dialog) the display coding will be performed within the PBO screen module.
Therefore you need to add the following processes to the PBO (STATUS_0100) module
Of the screen.
Create Custom control
Create Container
Create Object in Container
Build report header
Set ALV tree table for first display
Create ALV Tree Hierarchy
ABAP code listing of PBO (...O01) and FORM (...F01) includes should now look like
this
9171748.doc Page 2 of 30
*&---------------------------------------------------------------------*
*& Report ZDEMO_ALVTREE *
*& *
*&---------------------------------------------------------------------*
*& *
*& Example of a simple ALV Grid Report *
*& ................................... *
*& *
*& The basic requirement for this demo is to display a number of *
9171748.doc Page 3 of 30
*& fields from the EKPO and EKKO table in a tree structure. *
*& *
*&---------------------------------------------------------------------*
* Amendment History *
*----------------------------------------------------------------------*
REPORT zdemo_alvgrid .
*Data Declaration
*----------------
TABLES: ekko.
TYPE-POOLS: slis. "ALV Declarations
************************************************************************
*Includes
*INCLUDE ZDEMO_ALVTREEO01. "Screen PBO Modules
*INCLUDE ZDEMO_ALVTREEI01. "Screen PAI Modules
*INCLUDE ZDEMO_ALVTREEF01. "ABAP Subroutines(FORMS)
************************************************************************
*Start-of-selection.
START-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form DATA_RETRIEVAL
*&---------------------------------------------------------------------*
* Retrieve data into Internal tables
*----------------------------------------------------------------------*
FORM data_retrieval.
SELECT ebeln
UP TO 10 ROWS
FROM ekko
INTO corresponding fields of TABLE it_ekko.
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
FORM build_fieldcatalog.
* Please not there are a number of differences between the structure of
* ALVtree fieldcatalogs and ALVgrid fieldcatalogs.
* For example the field seltext_m is replace by scrtext_m in ALVtree.
fieldcatalog-fieldname = 'EBELP'.
fieldcatalog-scrtext_m = 'PO Iten'.
fieldcatalog-outputlen = 15.
fieldcatalog-col_pos = 1.
APPEND fieldcatalog TO gd_fieldcat..
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'STATU'.
fieldcatalog-scrtext_m = 'Status'.
fieldcatalog-outputlen = 15.
fieldcatalog-col_pos = 2.
APPEND fieldcatalog TO gd_fieldcat..
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'AEDAT'.
fieldcatalog-scrtext_m = 'Item change date'.
fieldcatalog-outputlen = 15.
fieldcatalog-col_pos = 3.
APPEND fieldcatalog TO gd_fieldcat..
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MATNR'.
fieldcatalog-scrtext_m = 'Material Number'.
fieldcatalog-outputlen = 15.
fieldcatalog-col_pos = 4.
APPEND fieldcatalog TO gd_fieldcat..
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MENGE'.
fieldcatalog-scrtext_m = 'PO quantity'.
fieldcatalog-outputlen = 15.
fieldcatalog-col_pos = 5.
APPEND fieldcatalog TO gd_fieldcat..
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MEINS'.
fieldcatalog-scrtext_m = 'Order Unit'.
fieldcatalog-outputlen = 15.
fieldcatalog-col_pos = 6.
APPEND fieldcatalog TO gd_fieldcat..
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'NETPR'.
fieldcatalog-scrtext_m = 'Net Price'.
9171748.doc Page 6 of 30
fieldcatalog-outputlen = 15.
fieldcatalog-col_pos = 7.
fieldcatalog-datatype = 'CURR'.
APPEND fieldcatalog TO gd_fieldcat..
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'PEINH'.
fieldcatalog-scrtext_m = 'Price Unit'.
fieldcatalog-outputlen = 15.
fieldcatalog-col_pos = 8.
APPEND fieldcatalog TO gd_fieldcat..
CLEAR fieldcatalog.
ENDFORM. " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* Build layout for ALV grid report
*----------------------------------------------------------------------*
FORM build_layout.
gd_layout-no_input = 'X'.
gd_layout-colwidth_optimize = 'X'.
gd_layout-totals_text = 'Totals'(201).
* gd_layout-totals_only = 'X'.
* gd_layout-f2code = 'DISP'. "Sets fcode for when double
* "click(press f2)
* gd_layout-zebra = 'X'.
* gd_layout-group_change_edit = 'X'.
* gd_layout-header_text = 'helllllo'.
ENDFORM. " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& Form build_hierarchy_header
*&---------------------------------------------------------------------*
* build hierarchy-header-information
*----------------------------------------------------------------------*
* -->P_L_HIERARCHY_HEADER structure for hierarchy-header
*----------------------------------------------------------------------*
FORM build_hierarchy_header CHANGING
p_hierarchy_header TYPE treev_hhdr.
*&---------------------------------------------------------------------*
*& Form BUILD_REPORT_TITLE
*&---------------------------------------------------------------------*
* Build table for ALVtree header
*----------------------------------------------------------------------*
9171748.doc Page 7 of 30
* Status Line(TYPE S)
ld_date(2) = sy-datum+6(2).
ld_date+2(1) = '/'.
ld_date+3(2) = sy-datum+4(2).
ld_date+5(1) = '/'.
ld_date+6(4) = sy-datum(4).
ls_line-typ = 'S'.
ls_line-key = 'Date'.
ls_line-info = ld_date.
APPEND ls_line TO pt_report_title.
* Action Line(TYPE A)
CLEAR ls_line.
ls_line-typ = 'A'.
CONCATENATE 'Report: ' sy-repid INTO ls_line-info SEPARATED BY space.
APPEND ls_line TO pt_report_title.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form BUILD_VARIANT
*&---------------------------------------------------------------------*
* Build variant
*----------------------------------------------------------------------*
form build_variant.
* Set repid for storing variants
gd_variant-report = sy-repid.
endform. " BUILD_VARIANT
Three includes need to be created in-order to store the ABAP code required for the
ALVtree report.
9171748.doc Page 8 of 30
Typically these will be one for the PBO modules, one for PAI modules and one for the
subroutines(FORMs):
*Includes
include zdemo_alvtreeo01. "Screen PBO Modules
include zdemo_alvtreei01. "Screen PAI Modules
include zdemo_alvtreef01. "ABAP Subroutines (FORMS)
If you are using the code provide within the ALV tree section of this web site simply
create the includes by un-commenting the 'Includes' section within the code (see below)
and double clicking on the name
i.e. 'zdemo_alvtreeo01'. Obviously these can be renamed.
************************************************************************
*Includes
*include zdemo_alvtreeo01. "Screen PBO Modules
*include zdemo_alvtreei01. "Screen PAI Modules
*include zdemo_alvtreef01. "ABAP Subroutines(FORMS)
************************************************************************
*Start-of-selection.
start-of-selection.
Create Screen along with PBO and PAI modules for screen
The next step is to create screen 100, to do this double click on the '100' within the call
screen command (Call screen 100.). Enter short description and select 'Normal' as screen
type.
To create the PBO and PAI modules insert that code below into the screen's flow logic.
Much of this code should automatically have been inserted during screen creation but
with the module lines commented out.
Simple remove the comments and double click the module name(STATUS_0100 and
USER_COMMAND_0100) in-order to create them, this will display the
perform/module creation screen.
The MODULES are usually created within two includes one ending in 'O01' for PBO
modules and One ending in 'I01' for PAI modules (See code below).
Please note in order for these includes to be displayed on the creation screen they need to
have be created along with the following lines of code added to the main prog(see
previous step):
INCLUDE ZDEMO_ALVTREEO01. "Screen PBO Modules
INCLUDE ZDEMO_ALVTREEI01. "Screen PAI Modules
Otherwise use the 'New Include' entry and SAP will add the necessary line for you.
* Screen flow logic code
9171748.doc Page 9 of 30
*-------------------------------------------------------------------*
***INCLUDE Z......O01 .
*-------------------------------------------------------------------*
*&------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&------------------------------------------------------------------*
* PBO Module
*-------------------------------------------------------------------*
module status_0100 output.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
*-------------------------------------------------------------------*
***INCLUDE Z......I01 .
*-------------------------------------------------------------------*
*&------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&------------------------------------------------------------------*
* PAI Module
*-------------------------------------------------------------------*
module user_command_0100 input.
The following code adds simple screen control to the report and whenever the user
presses the cancel, exit or back icon they will exit from the report. It also processes the
ALV tree user interactions within the 'others' case statement
*----------------------------------------------------------------------*
* INCLUDE Z......I01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module user_command_0100 input.
DATA return TYPE REF TO cl_gui_event.
save_ok = ok_code.
case ok_code.
when 'EXIT' or 'BACK' or 'CANC'.
* Exit program
leave to screen 0.
* Process ALVtree user actions
when others.
call method cl_gui_cfw=>get_current_event_object
9171748.doc Page 12 of 30
receiving
event_object = return.
call method cl_gui_cfw=>dispatch.
endcase.
endmodule. " USER_COMMAND_0100 INPUT
In order to created the pf-status for the screen you need to un-comment '* SET PF-
STATUS ‘xxxxxxxx’ and give it a name.
i.e. SET PF-STATUS 'STATUS1'.
Step 1
Now double click on 'STATUS1' in-order to create the pf-status. Enter short text, select
status type as 'Online status' and click save.
Step2
You should now be presented with the status creation screen. Choose 'Adjust template'
from the Extras menu (4.6 onwards only).
Step 3
Now select 'List status' and click the green tick (see below).
Step 4
9171748.doc Page 13 of 30
All the basic menu bars/buttons should now have been entered. Now click save then
activate. The Pf-status has now been completed.
Create Container
exporting
parent = gd_custom_container
node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
item_selection = 'X'
no_html_header = ''
no_toolbar = ''
exceptions
cntl_error =1
cntl_system_error =2
create_error =3
lifetime_error =4
illegal_node_selection_mode = 5
failed =6
illegal_column_name = 7.
if sy-subrc <> 0.
message x208(00) with 'ERROR'.
endif.
ENDFORM.
* Status Line(TYPE S)
ld_date(2) = sy-datum+6(2).
ld_date+2(1) = '/'.
ld_date+3(2) = sy-datum+4(2).
ld_date+5(1) = '/'.
9171748.doc Page 16 of 30
ld_date+6(4) = sy-datum(4).
ls_line-typ = 'S'.
ls_line-key = 'Date'.
ls_line-info = ld_date.
APPEND ls_line TO pt_report_title.
* Action Line(TYPE A)
CLEAR ls_line.
ls_line-typ = 'A'.
CONCATENATE 'Report: ' sy-repid INTO ls_line-info SEPARATED BY space.
APPEND ls_line TO pt_report_title.
ENDFORM. "BUILD_REPORT_TITLE
* calculate totals
call method gd_tree->update_calculations.
ABAP code listing of PBO (...O01) and FORM (...F01) includes should now look like
this
The following code allows the easy creation of the example ALVtree report. Simply copy
and past it into the appropriate includes (PBO and FORM).
*----------------------------------------------------------------------*
9171748.doc Page 18 of 30
***INCLUDE ZDEMO_ALVTREEO01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS1'.
* SET TITLEBAR 'xxx'.
*----------------------------------------------------------------------*
* INCLUDE ZDEMO_ALVTREEF01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form CREATE_ALVTREE_CONTAINER
*&---------------------------------------------------------------------*
* Create container for ALV tree report
*----------------------------------------------------------------------*
form create_alvtree_container.
* Create container for alv-tree
gd_tree_container_name = 'SCREEN_CONTAINER'.
*&---------------------------------------------------------------------*
*& Form CREATE_OBJECT_IN_CONTAINER
*&---------------------------------------------------------------------*
* Create ALV tree object in container
*----------------------------------------------------------------------*
form create_object_in_container.
*&---------------------------------------------------------------------*
*& Form BUILD_REPORT_TITLE
*&---------------------------------------------------------------------*
* Build table for ALVtree header
*----------------------------------------------------------------------*
* <-> p1 Header details
* <-> p2 Logo value
*----------------------------------------------------------------------*
FORM build_report_title CHANGING
pt_report_title TYPE slis_t_listheader
pa_logo TYPE sdydo_value.
* Status Line(TYPE S)
ld_date(2) = sy-datum+6(2).
ld_date+2(1) = '/'.
ld_date+3(2) = sy-datum+4(2).
ld_date+5(1) = '/'.
ld_date+6(4) = sy-datum(4).
ls_line-typ = 'S'.
ls_line-key = 'Date'.
ls_line-info = ld_date.
APPEND ls_line TO pt_report_title.
* Action Line(TYPE A)
CLEAR ls_line.
ls_line-typ = 'A'.
CONCATENATE 'Report: ' sy-repid INTO ls_line-info SEPARATED BY space.
APPEND ls_line TO pt_report_title.
ENDFORM. " BUILD_REPORT_TITLE
*&---------------------------------------------------------------------*
*& Form CREATE_EMPTY_ALVTREE_CONTROL
*&---------------------------------------------------------------------*
* Create empty tree control
*----------------------------------------------------------------------*
FORM create_empty_alvtree_control.
* Create emty tree-control
CLEAR: it_emptytab.
REFRESH: it_emptytab.
CALL METHOD gd_tree->set_table_for_first_display
EXPORTING
is_hierarchy_header = gd_hierarchy_header
it_list_commentary = gd_report_title
i_logo = gd_logo
* i_background_id = 'ALV_BACKGROUND'
i_save = 'A'
is_variant = gd_variant
CHANGING
it_outtab = it_emptytab "Must be empty
it_fieldcatalog = gd_fieldcat.
ENDFORM. " CREATE_EMPTY_ALVTREE_CONTROL
*&---------------------------------------------------------------------*
*& Form CREATE_ALVTREE_HIERARCHY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* Builds ALV tree display, (inserts nodes, subnodes etc)
*----------------------------------------------------------------------*
form create_alvtree_hierarchy.
data: ls_sflight type sflight,
9171748.doc Page 21 of 30
* calculate totals
call method gd_tree->update_calculations.
*&---------------------------------------------------------------------*
*& Form ADD_EKKO_NODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_EKPO text
* -->P_0553 text
* <--P_EBELN_KEY text
*----------------------------------------------------------------------*
form add_ekko_node using ps_ekko like wa_ekko
value(p_relate_key)
changing p_node_key.
* Set item-layout
data: lt_item_layout type lvc_t_layi,
ls_item_layout type lvc_s_layi.
ls_item_layout-t_image = '@3P@'.
ls_item_layout-fieldname = gd_tree->c_hierarchy_column_name.
ls_item_layout-style = cl_gui_column_tree=>style_default.
ld_node_text = ps_ekko-ebeln.
append ls_item_layout to lt_item_layout.
* Add node
call method gd_tree->add_node
exporting
i_relat_node_key = p_relate_key
9171748.doc Page 22 of 30
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = ld_node_text
is_outtab_line = ps_ekko
it_item_layout = lt_item_layout
importing
e_new_node_key = p_node_key.
endform. " ADD_EKKO_NODE
*&---------------------------------------------------------------------*
*& Form ADD_EKPO_LINE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_WA_EKPO text
* -->P_LD_EBELN_KEY text
* <--P_LD_EBELP_KEY text
*----------------------------------------------------------------------*
form add_ekpo_line using ps_ekpo like wa_ekpo
value(p_relate_key)
changing p_node_key.
* Set item-layout
data: lt_item_layout type lvc_t_layi,
ls_item_layout type lvc_s_layi.
ls_item_layout-t_image = '@3P@'.
ls_item_layout-fieldname = gd_tree->c_hierarchy_column_name.
ls_item_layout-style = cl_gui_column_tree=>style_default.
ld_node_text = ps_ekpo-ebelp.
append ls_item_layout to lt_item_layout.
* Add node
call method gd_tree->add_node
exporting
i_relat_node_key = p_relate_key
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = ld_node_text
is_outtab_line = ps_ekpo
it_item_layout = lt_item_layout
importing
e_new_node_key = p_node_key.
endform. " ADD_EKPO_LINE
In order to add additional buttons onto the ALV tree report the following sections of code
need implementing:
Define class to handle user defined ALV tree toolbar buttons. Insert at end of DATA
declaration section but before any ABAP processing.
*----------------------------------------------------------------------*
* INCLUDE ZTEST_TOOLBAR_EVENT_RECEIVER *
*----------------------------------------------------------------------*
data mr_toolbar type ref to cl_gui_toolbar. "Add to top include
PUBLIC SECTION.
METHODS: on_function_selected
FOR EVENT function_selected OF cl_gui_toolbar
IMPORTING fcode,
on_toolbar_dropdown
FOR EVENT dropdown_clicked OF cl_gui_toolbar
IMPORTING fcode
posx
posy.
9171748.doc Page 24 of 30
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS lcl_toolbar_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_toolbar_event_receiver IMPLEMENTATION.
METHOD on_function_selected.
DATA: ls_sflight TYPE sflight.
DATA: lt_list_commentary TYPE slis_t_listheader,
l_logo TYPE sdydo_value.
WHEN 'INSERT_LC'.
* Code for function code INSERT_LC goes here
WHEN 'INSERT_FC'.
* Code for function code INSERT_FC goes here
WHEN 'INSERT_FS'.
* Code for function code INSERT_FS goes here
WHEN 'INSERT_LS'.
* Code for function code INSERT_LS goes here
WHEN 'INSERT_NS'.
* Code for function code INSERT_NS goes here
ENDCASE.
* update frontend
CALL METHOD gd_tree->frontend_update.
ENDMETHOD.
METHOD on_toolbar_dropdown.
* create contextmenu
DATA: l_menu TYPE REF TO cl_ctmenu,
l_fc_handled TYPE as4flag.
CASE fcode.
WHEN 'INSERT_LC'.
l_fc_handled = 'X'.
* insert as last child
CALL METHOD l_menu->add_function
EXPORTING fcode = 'INSERT_LC'
text = 'Insert New Line as Last Child'. "#EC NOTEXT
* insert as first child
CALL METHOD l_menu->add_function
EXPORTING fcode = 'INSERT_FC'
text = 'Insert New Line as First Child'. "#EC NOTEXT
* insert as next sibling
CALL METHOD l_menu->add_function
EXPORTING fcode = 'INSERT_NS'
text = 'Insert New Line as Next Sibling'."#EC NOTEXT
* insert as last sibling
CALL METHOD l_menu->add_function
EXPORTING fcode = 'INSERT_LS'
text = 'Insert New Line as Last Sibling'."#EC NOTEXT
* insert as first sibling
CALL METHOD l_menu->add_function
EXPORTING fcode = 'INSERT_FS'
text = 'Insert New Line as First Sibling'. "#EC NOTEXT
ENDCASE.
* show dropdownbox
IF l_fc_handled = 'X'.
CALL METHOD mr_toolbar->track_context_menu
EXPORTING
context_menu = l_menu
posx = posx
posy = posy.
ENDIF.
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& CHANGE_TOOLBAR
*&---------------------------------------------------------------------*
In order to add additional buttons onto the ALV tree report the following sections of code
need Implementing:
Define class to handle user interaction other than via toolbar buttons. Insert at end of
DATA declaration section but before any ABAP processing
*----------------------------------------------------------------------*
* INCLUDE BCALV_TREE_EVENT_RECEIVER *
*----------------------------------------------------------------------*
CLASS lcl_tree_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS handle_node_ctmenu_request
FOR EVENT node_context_menu_request OF cl_gui_alv_tree
IMPORTING node_key
menu.
METHODS handle_node_ctmenu_selected
FOR EVENT node_context_menu_selected OF cl_gui_alv_tree
IMPORTING node_key
fcode.
METHODS handle_item_ctmenu_request
FOR EVENT item_context_menu_request OF cl_gui_alv_tree
IMPORTING node_key
fieldname
menu.
METHODS handle_item_ctmenu_selected
FOR EVENT item_context_menu_selected OF cl_gui_alv_tree
IMPORTING node_key
fieldname
fcode.
METHODS handle_item_double_click
FOR EVENT item_double_click OF cl_gui_alv_tree
IMPORTING node_key
fieldname.
METHODS handle_button_click
FOR EVENT button_click OF cl_gui_alv_tree
IMPORTING node_key
fieldname.
9171748.doc Page 28 of 30
METHODS handle_link_click
FOR EVENT link_click OF cl_gui_alv_tree
IMPORTING node_key
fieldname.
METHODS handle_header_click
FOR EVENT header_click OF cl_gui_alv_tree
IMPORTING fieldname.
ENDCLASS.
*---------------------------------------------------------------------*
* CLASS lcl_tree_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_tree_event_receiver IMPLEMENTATION.
METHOD handle_node_ctmenu_request.
* append own functions
CALL METHOD menu->add_function
EXPORTING fcode = 'USER1'
text = 'Usercmd 1'. "#EC NOTEXT
CALL METHOD menu->add_function
EXPORTING fcode = 'USER2'
text = 'Usercmd 2'. "#EC NOTEXT
CALL METHOD menu->add_function
EXPORTING fcode = 'USER3'
text = 'Usercmd 3'. "#EC NOTEXT
ENDMETHOD.
METHOD handle_node_ctmenu_selected.
CASE fcode.
WHEN 'USER1' OR 'USER2' OR 'USER3'.
MESSAGE i000(0h) WITH 'Node-Context-Menu on Node ' node_key
'fcode : ' fcode. "#EC NOTEXT
ENDCASE.
ENDMETHOD.
METHOD handle_item_ctmenu_request .
* append own functions
CALL METHOD menu->add_function
EXPORTING fcode = 'USER1'
text = 'Usercmd 1'.
CALL METHOD menu->add_function
EXPORTING fcode = 'USER2'
text = 'Usercmd 2'.
CALL METHOD menu->add_function
EXPORTING fcode = 'USER3'
text = 'Usercmd 3'.
ENDMETHOD.
METHOD handle_item_ctmenu_selected.
CASE fcode.
9171748.doc Page 29 of 30
METHOD handle_item_double_click.
* Processing for when user double clicks on ALVtree
ENDMETHOD.
METHOD handle_button_click.
* Processing when user clicks button
ENDMETHOD.
METHOD handle_link_click.
* ??
ENDMETHOD.
METHOD handle_header_click.
* Processing for when user clicks on ALVtree column headers
ENDMETHOD.
ENDCLASS.
Insert the following code into the PBO of the screen after the ALV tree has been created.
I.e. after 'CALL METHOD gd_tree->set_table_for_first_display' has been executed.
*&---------------------------------------------------------------------*
*& REGISTER_EVENTS
*&---------------------------------------------------------------------*
* set Handler
data: l_event_receiver type ref to lcl_tree_event_receiver.
create object l_event_receiver.
set handler l_event_receiver->handle_node_ctmenu_request
for gd_tree.
set handler l_event_receiver->handle_node_ctmenu_selected
for gd_tree.
set handler l_event_receiver->handle_item_ctmenu_request
for gd_tree.
set handler l_event_receiver->handle_item_ctmenu_selected
for gd_tree.
set handler l_event_receiver->handle_item_double_click
for gd_tree.
set handler l_event_receiver->handle_header_click
for gd_tree.