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

ALV Display - Tree Structure

Former Member
0 Likes
3,124

Hi guys.....I'am currently trying to understand the ALV Output Display For a Tree Structure, and got stuck. Is there a link I can use to get more information about the functions of ADD_NODE ?? Basically, I have an Internal Table with two fields (CODE, QTY) and I'am trying to feed them into an empty Internal Table (itab2_ZDBTABLE), and basically, the first item in the List should be the parent of the second item in the list and so on.....SO for a table:

Code
QTY
M0112
M0220

M01 is the parent of M02.....and M02 is the parent of M03....and so on.....

ALV Display - Tree Strucuture

REPORT ZHELLOWORLD.

TABLES: ZDBTABLE.

DATA: itab1_ZDBTABLE TYPE STANDARD TABLE OF ZDBTABLE.

DATA: itab2_ZDBTABLE TYPE STANDARD TABLE OF ZDBTABLE.

DATA: itab_ZDBTABLE_wa TYPE ZDBTABLE.

DATA: ref_CL_SALV_TREE TYPE REF TO CL_SALV_TREE.

DATA: ref_CL_SALV_NODES TYPE REF TO CL_SALV_NODES.

DATA: ref_CL_SALV_NODE TYPE REF TO CL_SALV_NODE.

START-OF-SELECTION.

  SELECT * FROM ZDBTABLE INTO CORRESPONDING FIELDS OF TABLE itab1_ZDBTABLE.

  " Create Instance With Empty Table

  CALL METHOD CL_SALV_TREE=>FACTORY

    IMPORTING R_SALV_TREE = ref_CL_SALV_TREE

    CHANGING  T_TABLE = itab2_ZDBTABLE.

  " Add Nodes To Tree

  ref_CL_SALV_NODES = ref_CL_SALV_TREE->GET_NODES( ).

  LOOP AT itab1_ZDBTABLE INTO itab_ZDBTABLE_wa.

    TRY.

      ref_CL_SALV_NODE = ref_CL_SALV_NODES->ADD_NODE( RELATED_NODE = ''

                                                      RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_FIRST_CHILD ).

      ref_CL_SALV_NODE->SET_DATA_ROW( itab_ZDBTABLE_wa ).

      CATCH CX_SALV_MSG.

    ENDTRY.

  ENDLOOP.

  " Display Table

  ref_CL_SALV_TREE->DISPLAY( ).

Any help will be appreciated....and links to more details about the available functions....thanks again!

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
2,319

Hi again....so far I'am working towards:

Header 1

REPORT ZHELLOWORLD.

TABLES: ZDBTABLE.

DATA: itab1_ZDBTABLE TYPE STANDARD TABLE OF ZDBTABLE.

DATA: itab2_ZDBTABLE TYPE STANDARD TABLE OF ZDBTABLE.

DATA: itab_ZDBTABLE_wa TYPE ZDBTABLE.

DATA: ref_CL_SALV_TREE TYPE REF TO CL_SALV_TREE.

DATA: ref_CL_SALV_NODES TYPE REF TO CL_SALV_NODES.

DATA: ref_CL_SALV_NODE TYPE REF TO CL_SALV_NODE.

START-OF-SELECTION.

  SELECT * FROM ZDBTABLE INTO CORRESPONDING FIELDS OF TABLE itab1_ZDBTABLE.

  " Create Instance With Empty Table

  CALL METHOD CL_SALV_TREE=>FACTORY

    IMPORTING R_SALV_TREE = ref_CL_SALV_TREE

    CHANGING  T_TABLE = itab2_ZDBTABLE.

  " Add Nodes To Tree

  ref_CL_SALV_NODES = ref_CL_SALV_TREE->GET_NODES( ).

DATA: i TYPE I VALUE 1.

DATA: j TYPE I.

WHILE i LE LINES( itab1_ZDBTABLE ).

   READ TABLE itab1_ZDBTABLE INDEX i INTO itab_ZDBTABLE_wa.

   TRY.

     IF i EQ '1'.

       ref_CL_SALV_NODE = ref_CL_SALV_NODES->ADD_NODE( RELATED_NODE = ''

                                                     RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_FIRST_CHILD ).

    ELSEIF i EQ '2'.

      ref_CL_SALV_NODE = ref_CL_SALV_NODES->ADD_NODE( RELATED_NODE = 'M01'

                                                     RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_FIRST_CHILD ).

    ENDIF.

    ref_CL_SALV_NODE->SET_DATA_ROW( itab_ZDBTABLE_wa ).

    CATCH CX_SALV_MSG.

   ENDTRY.

   i = i + 1.

ENDWHILE.

" Display Table

ref_CL_SALV_TREE->DISPLAY( ).

So that I can use the index 'i' to set the first elements parent as null. But doesn't work.....any help??

4 REPLIES 4
Read only

Former Member
0 Likes
2,320

Hi again....so far I'am working towards:

Header 1

REPORT ZHELLOWORLD.

TABLES: ZDBTABLE.

DATA: itab1_ZDBTABLE TYPE STANDARD TABLE OF ZDBTABLE.

DATA: itab2_ZDBTABLE TYPE STANDARD TABLE OF ZDBTABLE.

DATA: itab_ZDBTABLE_wa TYPE ZDBTABLE.

DATA: ref_CL_SALV_TREE TYPE REF TO CL_SALV_TREE.

DATA: ref_CL_SALV_NODES TYPE REF TO CL_SALV_NODES.

DATA: ref_CL_SALV_NODE TYPE REF TO CL_SALV_NODE.

START-OF-SELECTION.

  SELECT * FROM ZDBTABLE INTO CORRESPONDING FIELDS OF TABLE itab1_ZDBTABLE.

  " Create Instance With Empty Table

  CALL METHOD CL_SALV_TREE=>FACTORY

    IMPORTING R_SALV_TREE = ref_CL_SALV_TREE

    CHANGING  T_TABLE = itab2_ZDBTABLE.

  " Add Nodes To Tree

  ref_CL_SALV_NODES = ref_CL_SALV_TREE->GET_NODES( ).

DATA: i TYPE I VALUE 1.

DATA: j TYPE I.

WHILE i LE LINES( itab1_ZDBTABLE ).

   READ TABLE itab1_ZDBTABLE INDEX i INTO itab_ZDBTABLE_wa.

   TRY.

     IF i EQ '1'.

       ref_CL_SALV_NODE = ref_CL_SALV_NODES->ADD_NODE( RELATED_NODE = ''

                                                     RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_FIRST_CHILD ).

    ELSEIF i EQ '2'.

      ref_CL_SALV_NODE = ref_CL_SALV_NODES->ADD_NODE( RELATED_NODE = 'M01'

                                                     RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_FIRST_CHILD ).

    ENDIF.

    ref_CL_SALV_NODE->SET_DATA_ROW( itab_ZDBTABLE_wa ).

    CATCH CX_SALV_MSG.

   ENDTRY.

   i = i + 1.

ENDWHILE.

" Display Table

ref_CL_SALV_TREE->DISPLAY( ).

So that I can use the index 'i' to set the first elements parent as null. But doesn't work.....any help??

Read only

0 Likes
2,319

Hi,

Refer to the demo program SALV_DEMO_TREE_SIMPLE, which will be useful.

Hope it helps.

Thanks,

Tooshar Bendale

Read only

0 Likes
2,319

Ok will check this out and let you know!

Read only

0 Likes
2,319

Ok...the code I posted was somewhat correct....I did a little bit of work, and got the correct output! For those that are interested, here it is!

Simple ALV Tree

REPORT ZHELLOWORLD.

TABLES: ZDBTABLE.

DATA: itab1_ZDBTABLE TYPE STANDARD TABLE OF ZDBTABLE.

DATA: itab2_ZDBTABLE TYPE STANDARD TABLE OF ZDBTABLE.

DATA: itab_ZDBTABLE_wa TYPE ZDBTABLE.

DATA: ref_CL_SALV_TREE TYPE REF TO CL_SALV_TREE.

DATA: ref_CL_SALV_TREE_SETTINGS TYPE REF TO CL_SALV_TREE_SETTINGS.

DATA: ref_CL_SALV_NODE TYPE REF TO CL_SALV_NODE.

DATA: ref_CL_SALV_NODES TYPE REF TO CL_SALV_NODES.

DATA: var_LVC_NKEY TYPE LVC_NKEY.

START-OF-SELECTION.

  " Select Data

  SELECT * FROM ZDBTABLE

    INTO CORRESPONDING FIELDS OF TABLE itab1_ZDBTABLE.

  " Create Instance With Empty Table

  CALL METHOD CL_SALV_TREE=>FACTORY

    IMPORTING R_SALV_TREE = ref_CL_SALV_TREE

    CHANGING T_TABLE = itab2_ZDBTABLE.

  " Build Hierarchy Header

  ref_CL_SALV_TREE_SETTINGS = ref_CL_SALV_TREE->GET_TREE_SETTINGS( ).

ref_CL_SALV_TREE_SETTINGS->SET_HIERARCHY_HEADER( 'Hierarchy Of Tree' ).

ref_CL_SALV_TREE_SETTINGS->SET_HIERARCHY_TOOLTIP( 'This is the Hierarchical Order' ).

ref_CL_SALV_TREE_SETTINGS->SET_HIERARCHY_SIZE( 30 ).

  DATA: var_SALV_DE_TREE_TEXT type SALV_DE_TREE_TEXT.

  var_SALV_DE_TREE_TEXT = sy-title.

  ref_CL_SALV_TREE_SETTINGS->SET_HEADER( var_SALV_DE_TREE_TEXT ).

  " Add Nodes To Tree

  ref_CL_SALV_NODES = ref_CL_SALV_TREE->GET_NODES( ).

  DATA: i TYPE I VALUE 1.

  DATA: j TYPE I.

  WHILE i LE LINES( itab1_ZDBTABLE ).

    READ TABLE itab1_ZDBTABLE INDEX i INTO itab_ZDBTABLE_wa.

    TRY.

      IF i EQ 1.

        ref_CL_SALV_NODE = ref_CL_SALV_NODES->ADD_NODE(

          RELATED_NODE = ' '

          DATA_ROW = itab_ZDBTABLE_wa

          RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD ).

      ELSE.

        ref_CL_SALV_NODE = ref_CL_SALV_NODES->ADD_NODE(

          RELATED_NODE = var_LVC_NKEY

          DATA_ROW = itab_ZDBTABLE_wa

          RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD ).

      ENDIF.

     

      i = i + 1.

      var_LVC_NKEY = ref_CL_SALV_NODE->GET_KEY( ).

      CATCH CX_SALV_MSG.

    ENDTRY.

  ENDWHILE.

  " Optimize Column Widths

  DATA: ref_CL_SALV_COLUMNS TYPE REF TO CL_SALV_COLUMNS.

  TRY.

    ref_CL_SALV_COLUMNS = ref_CL_SALV_TREE->GET_COLUMNS( ).

    ref_CL_SALV_COLUMNS->SET_OPTIMIZE(  ).

    CATCH CX_SALV_NOT_FOUND.              "#EC NO_HANDLER

  ENDTRY.

  " Display Table

  ref_CL_SALV_TREE->DISPLAY( ).