Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Report using a tree structure

Former Member
0 Likes
550

I have found function modules RS_TREE_CONSTRUCT and rs_tree_list_display

but they enable me in having only 1 line at one level of the heirarchy , my requirement is to have multiple lines at one level of the tree.

I have found a function module TREEV_CREATE_LIST_TREE which i can not figure out how to use . Any help from the experts ?

3 REPLIES 3
Read only

Former Member
0 Likes
477

Hi,

You need to Use the below 2 function modules,

call function 'G_SET_TREE_IMPORT'

exporting

no_descriptions = ' '

no_rw_info = 'X'

setid = p_setid1

tables

set_hierarchy = lt_hier1

set_values = lt_val1.


After getting all the data in to the internal table we need to add the pointers to that internal table to set the hierarchies


call function 'G_SET_TREE_ADD_POINTERS'

tables

set_hierarchy = lt_hier1

set_values = lt_val1

set_hier_ptr = lt_hier_ptr1

set_val_ptr = lt_val_ptr1

set_hier_sort = lt_hier_sort1

set_val_sort = lt_val_sort1.

Regards

Sudheer

Read only

Former Member
0 Likes
477

i need a collapsable tree structure on the display, would the above function modules g_set_tree_import and the next one help me get that ?

Read only

Former Member
0 Likes
477

hi,

check the below example of a list tree which is expandable and collapsable,

CLASS LCL_EVT_HDLR DEFINITION DEFERRED. " definition is given later

CLASS CL_GUI_CFW DEFINITION LOAD. " global class to be loaded

DATA:G_EVENT(50), " to hold the event

G_NODE_KEY TYPE TV_NODEKEY, "holds the node key

G_ITEM_NAME TYPE TV_ITMNAME,

G_KEY TYPE TV_ITMNAME,

G_CHECK TYPE AS4FLAG.

DATA:G_EVT_HDLR TYPE REF TO LCL_EVT_HDLR, "reference variable to the

"class implemented

G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,

G_TREE TYPE REF TO CL_GUI_LIST_TREE,

G_OK_CODE TYPE SY-UCOMM.

TYPES:ITEM_TABLE_TYPE LIKE STANDARD TABLE OF MTREEITM

WITH DEFAULT KEY.

TABLES:MARA.

SELECTION-SCREEN BEGIN OF SCREEN 123.

SELECT-OPTIONS:S_MATNR FOR MARA-MATNR.

SELECTION-SCREEN END OF SCREEN 123.

SELECTION-SCREEN BEGIN OF SCREEN 200.

SELECT-OPTIONS:S_ERNAM FOR MARA-ERNAM.

SELECTION-SCREEN END OF SCREEN 200.

----


  • CLASS lcl_evt_hdlr DEFINITION

----


*

----


CLASS LCL_EVT_HDLR DEFINITION.

PUBLIC SECTION.

METHODS:

*---- methods for action handling for nodes

NODE_DBL_CLK

FOR EVENT NODE_DOUBLE_CLICK

OF CL_GUI_LIST_TREE

IMPORTING NODE_KEY,

HANDLE_NODE_KEY_PRESS

FOR EVENT NODE_KEYPRESS

OF CL_GUI_LIST_TREE

IMPORTING NODE_KEY KEY,

*---- methods for action handling for Items

ITEM_DBL_CLK

FOR EVENT ITEM_DOUBLE_CLICK

OF CL_GUI_LIST_TREE

IMPORTING NODE_KEY ITEM_NAME,

HANDLE_ITEM_KEY_PRESS

FOR EVENT ITEM_KEYPRESS

OF CL_GUI_LIST_TREE

IMPORTING NODE_KEY ITEM_NAME KEY,

*---- other methods for action handling

HANDLE_EXPAND_NO_CHILDREN

FOR EVENT EXPAND_NO_CHILDREN

OF CL_GUI_LIST_TREE

IMPORTING NODE_KEY.

  • HANDLE_CHECKBOX

  • FOR EVENT CHECKBOX_CHANGE

  • OF CL_GUI_LIST_TREE

  • IMPORTING NODE_KEY ITEM_NAME CHECKED.

ENDCLASS. "lcl_evt_hdlr DEFINITION

----


  • CLASS lcl_evt_hdlr IMPLEMENTATION

----


*

----


CLASS LCL_EVT_HDLR IMPLEMENTATION.

METHOD NODE_DBL_CLK.

  • this method handles the node double click event of the tree control

  • and shows the key of the double clicked node in a dynpro field

  • G_EVENT = 'NODE_DOUBLE_CLICK'.

  • G_NODE_KEY = NODE_KEY.

  • G_ITEM_NAME = ' '.

CASE NODE_KEY.

WHEN 'Root'.

*call transaction 'VA03'.

*CALL FUNCTION 'ZFUNC_SCREEN'

  • EXPORTING

  • PRG_NAME = 'ybasic3'.

CALL METHOD G_CUSTOM_CONTAINER->LINK

EXPORTING

REPID = SY-REPID

DYNNR = '0123'.

CALL SELECTION-SCREEN 123.

  • case sy-ucomm.

  • when 'BACK'.

LEAVE PROGRAM.

  • endcase.

WHEN 'Child1'.

CALL METHOD G_CUSTOM_CONTAINER->LINK

EXPORTING

REPID = SY-REPID

DYNNR = '0200'.

CALL SELECTION-SCREEN 200.

LEAVE PROGRAM.

ENDCASE.

ENDMETHOD. "node_dbl_clk

METHOD ITEM_DBL_CLK.

G_EVENT = 'ITEM_DOUBLE_CLICK'.

G_NODE_KEY = NODE_KEY.

G_ITEM_NAME = ITEM_NAME.

ENDMETHOD. "ITEM_DBL_CLK

METHOD HANDLE_NODE_KEY_PRESS.

G_EVENT = 'NODE_KEYPRESS'.

G_NODE_KEY = NODE_KEY.

G_ITEM_NAME = ' '.

G_KEY = KEY.

ENDMETHOD. "HANDLE_NODE_KEY_PRESS

METHOD HANDLE_ITEM_KEY_PRESS.

G_EVENT = 'ITEM_KEYPRESS'.

G_NODE_KEY = NODE_KEY.

G_ITEM_NAME = ITEM_NAME.

G_KEY = KEY.

ENDMETHOD. "HANDLE_ITEM_KEY_PRESS

METHOD HANDLE_EXPAND_NO_CHILDREN.

G_EVENT = 'EXPAND_NO_CHILDREN'.

G_NODE_KEY = NODE_KEY.

ENDMETHOD. "handle_EXPAND_NO_CHILDREN

  • METHOD HANDLE_CHECKBOX.

  • G_EVENT = 'CHECKBOX_HANDLING'.

  • G_NODE_KEY = NODE_KEY.

  • G_ITEM_NAME = ITEM_NAME.

  • G_CHECK = CHECKED.

  • ENDMETHOD. "HANDLE_CHECKBOX

ENDCLASS. "lcl_evt_hdlr IMPLEMENTATION

*------ start-of-selection.

START-OF-SELECTION.

CREATE OBJECT G_EVT_HDLR. "create an object for the class

*lcl_evt_hdlr

SET SCREEN 100.

----


  • MODULE pbo_100 OUTPUT

----


*

----


MODULE PBO_100 OUTPUT.

SET PF-STATUS 'BUT'.

IF G_TREE IS INITIAL.

  • the tree control has not yet been created

  • create a tree control and insert nodes into it.

PERFORM CREATE_AND_INIT_TREE.

ENDIF.

ENDMODULE. "pbo_100 OUTPUT

----


  • MODULE pai_100 INPUT

----


*

----


MODULE PAI_100 INPUT.

DATA:RETURN_CODE TYPE I.

  • CL_GUI_CFW=>DISPATCH must be called if events are registered

  • that trigger PAI

  • this method calls the event handler method of an event

CALL METHOD CL_GUI_CFW=>DISPATCH

IMPORTING

RETURN_CODE = RETURN_CODE.

IF RETURN_CODE <> CL_GUI_CFW=>RC_NOEVENT.

" a control event occured => exit PAI

CLEAR G_OK_CODE.

EXIT.

ENDIF.

*at user-command.

G_OK_CODE = SY-UCOMM.

CASE G_OK_CODE.

WHEN 'BACK'. " Finish program

IF NOT G_CUSTOM_CONTAINER IS INITIAL.

" destroy tree container (detroys contained tree control, too)

CALL METHOD G_CUSTOM_CONTAINER->FREE

EXCEPTIONS

CNTL_SYSTEM_ERROR = 1

CNTL_ERROR = 2.

IF SY-SUBRC <> 0.

MESSAGE A000.

ENDIF.

CLEAR G_CUSTOM_CONTAINER.

CLEAR G_TREE.

ENDIF.

LEAVE PROGRAM.

ENDCASE.

  • CAUTION: clear ok code!

CLEAR G_OK_CODE.

ENDMODULE. "pai_100 INPUT

*&----


*

*& Form create_and_init_tree

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM CREATE_AND_INIT_TREE .

DATA:NODE_TABLE TYPE TREEV_NTAB,

ITEM_TABLE TYPE ITEM_TABLE_TYPE,

EVENTS TYPE CNTL_SIMPLE_EVENTS,

EVENT TYPE CNTL_SIMPLE_EVENT.

  • create a container for the tree control.

CREATE OBJECT G_CUSTOM_CONTAINER

EXPORTING

  • the container is linked to the custom control with the

  • name 'TREE_CONTAINER' on the dynpro

CONTAINER_NAME = 'TREE_CONTAINER'

EXCEPTIONS

CNTL_ERROR = 1

CNTL_SYSTEM_ERROR = 2

CREATE_ERROR = 3

LIFETIME_ERROR = 4

LIFETIME_DYNPRO_DYNPRO_LINK = 5.

IF SY-SUBRC <> 0.

MESSAGE A000.

ENDIF.

  • create a list tree control

CREATE OBJECT G_TREE

EXPORTING

PARENT = G_CUSTOM_CONTAINER

NODE_SELECTION_MODE = CL_GUI_LIST_TREE=>NODE_SEL_MODE_SINGLE

ITEM_SELECTION = 'X'

WITH_HEADERS = ' '

EXCEPTIONS

CNTL_SYSTEM_ERROR = 1

CREATE_ERROR = 2

FAILED = 3

ILLEGAL_NODE_SELECTION_MODE = 4

LIFETIME_ERROR = 5.

IF SY-SUBRC <> 0.

MESSAGE A000.

ENDIF.

*------- KEY = enter

CALL METHOD G_TREE->ADD_KEY_STROKE

EXPORTING

KEY = CL_TREE_CONTROL_BASE=>KEY_ENTER

EXCEPTIONS

FAILED = 1

ILLEGAL_KEY = 2

CNTL_SYSTEM_ERROR = 3.

IF SY-SUBRC <> 0.

MESSAGE W006 WITH 'ADD_KEY_STROKE'.

ENDIF.

  • define the events which will be passed to the backend

  • node double click

EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_NODE_DOUBLE_CLICK.

EVENT-APPL_EVENT = 'X'.

APPEND EVENT TO EVENTS.

EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_ITEM_DOUBLE_CLICK.

EVENT-APPL_EVENT = 'X'.

APPEND EVENT TO EVENTS.

EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_NODE_KEYPRESS.

EVENT-APPL_EVENT = 'X'.

APPEND EVENT TO EVENTS.

EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_ITEM_KEYPRESS.

EVENT-APPL_EVENT = 'X'.

APPEND EVENT TO EVENTS.

EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_EXPAND_NO_CHILDREN.

EVENT-APPL_EVENT = 'X'.

APPEND EVENT TO EVENTS.

  • EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_CHECKBOX_CHANGE.

  • EVENT-APPL_EVENT = 'X'.

  • APPEND EVENT TO EVENTS.

*------ register the events

CALL METHOD G_TREE->SET_REGISTERED_EVENTS

EXPORTING

EVENTS = EVENTS

EXCEPTIONS

CNTL_ERROR = 1

CNTL_SYSTEM_ERROR = 2

ILLEGAL_EVENT_COMBINATION = 3.

IF SY-SUBRC <> 0.

MESSAGE A000.

ENDIF.

  • assign event handlers in the application class to each desired events

SET HANDLER G_EVT_HDLR->NODE_DBL_CLK FOR G_TREE.

SET HANDLER G_EVT_HDLR->ITEM_DBL_CLK FOR G_TREE.

SET HANDLER G_EVT_HDLR->HANDLE_NODE_KEY_PRESS FOR G_TREE.

SET HANDLER G_EVT_HDLR->HANDLE_ITEM_KEY_PRESS FOR G_TREE.

SET HANDLER G_EVT_HDLR->HANDLE_EXPAND_NO_CHILDREN FOR G_TREE.

  • SET HANDLER G_EVT_HDLR->HANDLE_CHECKBOX FOR G_TREE.

  • add some nodes to the tree control

PERFORM BUILD_NODE_AND_ITEM_TABLE USING NODE_TABLE ITEM_TABLE.

CALL METHOD G_TREE->ADD_NODES_AND_ITEMS

EXPORTING

NODE_TABLE = NODE_TABLE

ITEM_TABLE = ITEM_TABLE

ITEM_TABLE_STRUCTURE_NAME = 'mtreeitm'

EXCEPTIONS

FAILED = 1

CNTL_SYSTEM_ERROR = 3

ERROR_IN_TABLES = 4

DP_ERROR = 5

TABLE_STRUCTURE_NAME_NOT_FOUND = 6.

IF SY-SUBRC <> 0.

MESSAGE A000.

ENDIF.

ENDFORM. " create_and_init_tree

*&----


*

*& Form build_node_and_item_table

*&----


*

  • text

*----


*

  • -->P_NODE_TABLE text

  • -->P_ITEM_TABLE text

*----


*

FORM BUILD_NODE_AND_ITEM_TABLE USING

NODE_TABLE TYPE TREEV_NTAB

ITEM_TABLE TYPE ITEM_TABLE_TYPE.

DATA:NODE TYPE TREEV_NODE,

ITEM TYPE MTREEITM.

  • build the node table

  • node with key 'root'.

CLEAR NODE.

NODE-NODE_KEY = 'Root'. " key of the node

CLEAR NODE-RELATKEY. " root node has no parent node

CLEAR NODE-RELATSHIP.

NODE-HIDDEN = ' '. " the node is visible

NODE-DISABLED = ' '. " selectable

NODE-ISFOLDER = 'X'. " a folder

CLEAR NODE-N_IMAGE. " folder-/ leaf symbol in state "closed"

"use default.

CLEAR NODE-EXP_IMAGE. " folder-/ leaf symbol in state "open"

"use default.

CLEAR NODE-EXPANDER. " the width of the item is adjusted to its "

" content (text)

APPEND NODE TO NODE_TABLE.

  • node with key 'child1'.

CLEAR NODE.

NODE-NODE_KEY = 'Child1'. "key of the node

NODE-RELATKEY = 'Root'.

NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.

NODE-ISFOLDER = 'X'.

APPEND NODE TO NODE_TABLE.

  • node with key 'Subchild1' for child1.

CLEAR NODE.

NODE-NODE_KEY = 'SubChild1'.

NODE-RELATKEY = 'Child1'.

NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.

NODE-ISFOLDER = 'X'.

APPEND NODE TO NODE_TABLE.

  • node with key 'subchild2' for child1.

CLEAR NODE.

NODE-NODE_KEY = 'SubChild2'.

NODE-RELATKEY = 'Child1'.

NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.

APPEND NODE TO NODE_TABLE.

  • node with key 'subchild3' for child1.

CLEAR NODE.

NODE-NODE_KEY = 'SubChild3'.

NODE-RELATKEY = 'Child1'.

NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.

APPEND NODE TO NODE_TABLE.

  • node with key 'subchild4' for child1.

CLEAR NODE.

NODE-NODE_KEY = 'SubChild4'.

NODE-RELATKEY = 'Child1'.

NODE-DISABLED = ' '.

NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.

APPEND NODE TO NODE_TABLE.

  • node with key 'child2'.

CLEAR NODE.

NODE-NODE_KEY = 'Child2'. "key of the node

NODE-RELATKEY = 'Root'.

NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.

NODE-ISFOLDER = 'X'.

NODE-EXPANDER = 'X'. " The node is marked with a '+', although

" it has no children. When the user clicks on the

" + to open the node, the event expand_nc is

" fired. The programmerr can

" add the children of the

" node within the event handler of the expand_nc

" event (see callback handle_expand_nc).

APPEND NODE TO NODE_TABLE.

  • items of the nodes

  • item with key 'root'.

CLEAR ITEM.

ITEM-NODE_KEY = 'Root'.

ITEM-ITEM_NAME = '1'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT. " text item

ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO. "the width of the item

"is adjusted to its content

ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP. "use proportional font

" for the item

ITEM-TEXT = 'object'.

APPEND ITEM TO ITEM_TABLE.

  • item with key 'child1'.

CLEAR ITEM.

ITEM-NODE_KEY = 'Child1'.

ITEM-ITEM_NAME = '11'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.

ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.

ITEM-TEXT = 'dynpros'.

APPEND ITEM TO ITEM_TABLE.

  • item with key 'child2'.

CLEAR ITEM.

ITEM-NODE_KEY = 'Child2'.

ITEM-ITEM_NAME = '12'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.

ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.

ITEM-TEXT = 'programme'.

APPEND ITEM TO ITEM_TABLE.

  • items of node with key 'Subchild1'.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild1'.

ITEM-ITEM_NAME = '111'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-LENGTH = 11.

ITEM-TEXT = 'include'.

APPEND ITEM TO ITEM_TABLE.

  • items of node with key 'SubChild2'.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild2'.

ITEM-ITEM_NAME = '112'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-LENGTH = 4. " the width of the item is 4 chars

ITEM-IGNOREIMAG = 'X'. " see documentation of structure treev_item

ITEM-USEBGCOLOR = 'X'.

ITEM-T_IMAGE = '@01@'.

APPEND ITEM TO ITEM_TABLE.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild2'.

ITEM-ITEM_NAME = '113'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-LENGTH = 4. " the width of the item is 4 chars

ITEM-USEBGCOLOR = 'X'.

ITEM-TEXT = '0100'.

APPEND ITEM TO ITEM_TABLE.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild2'.

ITEM-ITEM_NAME = '114'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-LENGTH = 11.

ITEM-USEBGCOLOR = 'X'.

ITEM-TEXT = ' mueller'.

APPEND ITEM TO ITEM_TABLE.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild2'.

ITEM-ITEM_NAME = '115'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.

ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.

ITEM-TEXT = ' comment to dynpro 100'.

APPEND ITEM TO ITEM_TABLE.

  • items of node with key 'SubChild3'.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild3'.

ITEM-ITEM_NAME = '121'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-LENGTH = 20.

ITEM-IGNOREIMAG = 'X'.

ITEM-USEBGCOLOR = 'X'.

ITEM-T_IMAGE = '@02@'.

ITEM-TEXT = ' 0200 harryhirsch'.

  • ITEM-CHOSEN = 'X'.

APPEND ITEM TO ITEM_TABLE.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild3'.

ITEM-ITEM_NAME = '122'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.

ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.

ITEM-TEXT = ' comment to dynpro 200'.

APPEND ITEM TO ITEM_TABLE.

CLEAR ITEM.

ITEM-NODE_KEY = 'SubChild4'.

ITEM-ITEM_NAME = '144'.

ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.

ITEM-LENGTH = 20.

ITEM-IGNOREIMAG = 'X'.

ITEM-USEBGCOLOR = 'X'.

ITEM-TEXT = ' select'.

ITEM-CHOSEN = 'X'.

ITEM-DISABLED = ' '.

APPEND ITEM TO ITEM_TABLE.

ENDFORM. " build_node_and_item_table

Hope it helps you,

Regards,