The following code allows the easy creation of the example ALVtree report. Simply copy and past it into the appropriate includes(PBO and FORM).
*--------------------------------------------------------------* ***INCLUDE ZDEMO_ALVTREEO01 . *--------------------------------------------------------------* *&-------------------------------------------------------------* *& Module STATUS_0100 OUTPUT *&-------------------------------------------------------------* * text *--------------------------------------------------------------* MODULE status_0100 OUTPUT. SET PF-STATUS 'STATUS1'. * SET TITLEBAR 'xxx'. * If ALVtree already exists then it mush not be re-created as this * will cause a runtime error. IF gd_tree IS INITIAL. * Create ALVtree (must be performed within screen PBO module) PERFORM create_alvtree_container. PERFORM create_object_in_container. PERFORM create_empty_alvtree_control. PERFORM create_alvtree_hierarchy. ENDIF. CALL METHOD cl_gui_cfw=>flush. ENDMODULE. " STATUS_0100 OUTPUT
*--------------------------------------------------------------* * INCLUDE ZDEMO_ALVTREEF01 * *--------------------------------------------------------------* *&-------------------------------------------------------------* *& Form CREATE_ALVTREE_CONTAINER *&-------------------------------------------------------------* * Create container for ALVtree report *--------------------------------------------------------------* form create_alvtree_container. * Create container for alv-tree gd_tree_container_name = 'SCREEN_CONTAINER'. create object gd_custom_container exporting container_name = gd_tree_container_name exceptions cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5. if sy-subrc <> 0. message x208(00) with 'ERROR'. endif. endform. " CREATE_ALVTREE_CONTAINER *&---------------------------------------------------------------------* *& Form CREATE_OBJECT_IN_CONTAINER *&---------------------------------------------------------------------* * Create ALVtree object in container *----------------------------------------------------------------------* form create_object_in_container. * Create tree control create object gd_tree 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. " 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. DATA: ls_line TYPE slis_listheader, ld_date(10) TYPE c. * List Heading Line(TYPE H) CLEAR ls_line. ls_line-typ = 'H'. * ls_line-key "Not Used For This Type(H) ls_line-info = 'PO ALVTree Display'. APPEND ls_line TO pt_report_title. * 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, lt_sflight type sflight occurs 0. data: ld_ebeln_key type lvc_nkey, ld_ebelp_key type lvc_nkey. loop at it_ekko into wa_ekko. perform add_ekko_node using wa_ekko '' changing ld_ebeln_key. loop at it_ekpo into wa_ekpo where ebeln eq wa_ekko-ebeln. perform add_ekpo_line using wa_ekpo ld_ebeln_key changing ld_ebelp_key. endloop. endloop. * calculate totals call method gd_tree->update_calculations. * this method must be called to send the data to the frontend call method gd_tree->frontend_update. endform. " CREATE_ALVTREE_HIERARCHY *&---------------------------------------------------------------------* *& 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. data: ld_node_text type lvc_value, ls_sflight type sflight. * 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 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. data: ld_node_text type lvc_value, ls_sflight type sflight. * 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