Sunday, 2 August 2015

Creating Tree ALV with Class CL_GUI_ALV_TREE

---------------------------------------------------------------------------------------------------------

DATA :   lr_cust TYPE REF TO cl_gui_custom_container,
              lr_tree TYPE REF TO cl_gui_alv_tree,
              lt_scarr TYPE TABLE OF scarr,
              gt_scarr TYPE TABLE OF scarr,
              ls_scarr TYPE scarr,
              ls_header TYPE treev_hhdr,
              lv_node_key1 TYPE lvc_nkey,
              lv_node_key2 TYPE lvc_nkey,
              lv_node_text TYPE lvc_value.

START-OF-SELECTION.
  CALL SCREEN 0001.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0001  OUTPUT
*&---------------------------------------------------------------------*

MODULE status_0001 OUTPUT.
  SET PF-STATUS 'STATUS'.
*  SET TITLEBAR 'xxx'.
ENDMODULE.                 " STATUS_0001  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  GET_DATA  OUTPUT
*&---------------------------------------------------------------------*
MODULE get_data OUTPUT.
  IF lt_scarr IS INITIAL.
    SELECT FROM scarr INTO TABLE lt_scarr.
  ENDIF.
ENDMODULE.                 " GET_DATA  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  BUILD_TREE  OUTPUT
*&---------------------------------------------------------------------*
MODULE build_tree OUTPUT.


  IF lr_cust IS NOT BOUND.


    CREATE OBJECT lr_cust
      EXPORTING
        container_name              'ALV_TREE'
        repid                       sy-repid
        dynnr                       sy-dynnr
      EXCEPTIONS
        cntl_error                  1
        cntl_system_error           2
        create_error                3
        lifetime_error              4
        lifetime_dynpro_dynpro_link 5
        OTHERS                      6.

  ENDIF.


  IF lr_tree IS NOT BOUND.


    CREATE OBJECT lr_tree
      EXPORTING
        parent                      lr_cust
        node_selection_mode         cl_gui_column_tree=>node_sel_mode_single
        item_selection              'X'    " Can Individual Items be Selected?
        no_toolbar                  ' '    " NO_TOOLBAR
        no_html_header              'X'    " NO_HTML_HEADER
      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
        OTHERS                      8.

  ENDIF.


* Prepairing Header
  ls_header-heading 'FLight Information'.
  ls_header-tooltip 'Flight Data'.
  ls_header-width 40.
  ls_header-width_pix ' '.


  CALL METHOD lr_tree->set_table_for_first_display
    EXPORTING
      i_structure_name    'SCARR'
      is_hierarchy_header ls_header
    CHANGING
      it_outtab           gt_scarr" table must be initial

* Prepairing Root node


  lv_node_text 'Flight Code'.
  CALL METHOD lr_tree->add_node
    EXPORTING
      i_relat_node_key     ' '
      i_relationship       cl_gui_column_tree=>relat_last_child
      i_node_text          lv_node_text
    IMPORTING
      e_new_node_key       lv_node_key1  " get the root node key
    EXCEPTIONS
      relat_node_not_found 1
      node_not_found       2
      OTHERS               3.

* Create Hierarchy ( nodes )
  LOOP AT lt_scarr INTO ls_scarr.

    lv_node_text ls_scarr-carrname.


    CALL METHOD lr_tree->add_node
      EXPORTING
        i_relat_node_key     lv_node_key1  " pass the root node key
        i_relationship       cl_gui_column_tree=>relat_last_child    " How to Insert Node
*        is_outtab_line       = ls_scarr    " Attributes of Inserted Node
        i_node_text          lv_node_text   " Hierarchy Node Text
      IMPORTING
        e_new_node_key       lv_node_key2   " Key of New Node Key
      EXCEPTIONS
        relat_node_not_found 1
        node_not_found       2
        OTHERS               3.

  ENDLOOP.

* Must Call this method to display nodes on the container
  CALL METHOD lr_tree->frontend_update.


ENDMODULE.                 " BUILD_TREE  OUTPUT


*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0001  INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0001 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0001  INPUT


---------------------------------------------------------------------------------------------------------

Screen flow Logic.
Screen  Layout.



Execute the program.

Here we have the tree.

Now remove the comment line so that we can display all the columns. Execute the program.


 Here is how the Tree ALV is displayed.




---------------------------------------------------------------------------------------------------------

Creating Multi Level Tree ALV with CL_GUI_SIMPLE_TREE

----------------------------------------------------------------------------------------------------


DATA :   lr_cust TYPE REF TO cl_gui_custom_container,
              lr_tree TYPE REF TO cl_gui_simple_tree,
              lt_scarr TYPE TABLE OF scarr,
              ls_scarr TYPE scarr,
              lt_spfli TYPE TABLE OF spfli,
              ls_spfli TYPE spfli,
              lt_node TYPE TABLE OF mtreesnode,
              ls_node TYPE mtreesnode.

START-OF-SELECTION.
  CALL SCREEN 0001.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0001  OUTPUT
*&---------------------------------------------------------------------*

MODULE status_0001 OUTPUT.
  SET PF-STATUS 'STATUS'.
*  SET TITLEBAR 'xxx'.
ENDMODULE.                 " STATUS_0001  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  GET_DATA  OUTPUT
*&---------------------------------------------------------------------*
MODULE get_data OUTPUT.
  IF lt_scarr IS INITIAL.
    SELECT FROM scarr INTO TABLE lt_scarr.
    IF lt_scarr IS NOT INITIAL.
      SELECT FROM spfli INTO TABLE lt_spfli FOR ALL ENTRIES IN lt_scarr WHERE carrid lt_scarr-carrid.
    ENDIF.
  ENDIF.
ENDMODULE.                 " GET_DATA  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  BUILD_TREE  OUTPUT
*&---------------------------------------------------------------------*
MODULE build_tree OUTPUT.
  IF lr_cust IS NOT BOUND.
    CREATE OBJECT lr_cust
      EXPORTING
        container_name              'SIMPLE_TREE'
        repid                       sy-repid
        dynnr                       sy-dynnr
      EXCEPTIONS
        cntl_error                  1
        cntl_system_error           2
        create_error                3
        lifetime_error              4
        lifetime_dynpro_dynpro_link 5
        OTHERS                      6.

  ENDIF.
  IF lr_tree IS NOT BOUND.
    CREATE OBJECT lr_tree
      EXPORTING
        parent                      lr_cust
        node_selection_mode         cl_gui_simple_tree=>node_sel_mode_single
      EXCEPTIONS
        lifetime_error              1
        cntl_system_error           2
        create_error                3
        failed                      4
        illegal_node_selection_mode 5
        OTHERS                      6.
  ENDIF.

  IF lr_tree IS BOUND.
    CLEAR ls_node.
    ls_node-node_key 'ROOT'.
    ls_node-isfolder 'X'.
    ls_node-text 'Flight Info'.
    APPEND ls_node TO lt_node.
    LOOP AT lt_scarr INTO ls_scarr.
      CLEAR ls_node.
      ls_node-node_key ls_scarr-carrid.
      ls_node-relatkey 'ROOT'.
      ls_node-relatship cl_gui_simple_tree=>relat_last_child.
      ls_node-isfolder 'X'.
      ls_node-n_image '@7T@'"ICON_WS_PLANE
      ls_node-text ls_scarr-carrname.
      APPEND ls_node TO lt_node.


      LOOP AT lt_spfli INTO ls_spfli WHERE carrid ls_scarr-carrid.
        CLEAR ls_node.
        ls_node-node_key ls_spfli-connid.
        ls_node-relatkey ls_scarr-carrid.
        ls_node-relatship cl_gui_simple_tree=>relat_last_child.
        ls_node-isfolder ' '.
        ls_node-n_image '@7T@'"ICON_WS_PLANE
        CONCATENATE ls_spfli-countryfr
                    ' - ' ls_spfli-cityfrom
                    ' - ' ls_spfli-countryto
                    ' - ' ls_spfli-cityto INTO ls_node-text SEPARATED BY space.
        APPEND ls_node TO lt_node.
      ENDLOOP.
    ENDLOOP.

    CALL METHOD lr_tree->add_nodes
      EXPORTING
        table_structure_name           'SCARR'
        node_table                     lt_node
      EXCEPTIONS
        error_in_node_table            1
        failed                         2
        dp_error                       3
        table_structure_name_not_found 4
        OTHERS                         5.
  ENDIF.

ENDMODULE.                 " BUILD_TREE  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0001  INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0001 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0001  INPUT

----------------------------------------------------------------------------------------------------
Screen flow logic.





 Execute the program.





----------------------------------------------------------------------------------------------------

Creating Tree ALV with CL_GUI_SIMPLE_TREE

------------------------------------------------------------------------------------------------------------

DATA :   lr_cust TYPE REF TO cl_gui_custom_container,
              lr_tree TYPE REF TO cl_gui_simple_tree,
              lt_scarr TYPE TABLE OF scarr,
              ls_scarr TYPE scarr,
              lt_node TYPE TABLE OF mtreesnode,
              ls_node TYPE mtreesnode.

START-OF-SELECTION.
  CALL SCREEN 0001.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0001  OUTPUT
*&---------------------------------------------------------------------*

MODULE status_0001 OUTPUT.
  SET PF-STATUS 'STATUS'.
*  SET TITLEBAR 'xxx'.
ENDMODULE.                 " STATUS_0001  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  GET_DATA  OUTPUT
*&---------------------------------------------------------------------*
MODULE get_data OUTPUT.
  IF lt_scarr IS INITIAL.
    SELECT FROM scarr INTO TABLE lt_scarr.
  ENDIF.
ENDMODULE.                 " GET_DATA  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  BUILD_TREE  OUTPUT
*&---------------------------------------------------------------------*
MODULE build_tree OUTPUT.
  IF lr_cust IS NOT BOUND.
    CREATE OBJECT lr_cust
      EXPORTING
        container_name              'SIMPLE_TREE'
        repid                       sy-repid
        dynnr                       sy-dynnr
      EXCEPTIONS
        cntl_error                  1
        cntl_system_error           2
        create_error                3
        lifetime_error              4
        lifetime_dynpro_dynpro_link 5
        OTHERS                      6.

  ENDIF.
  IF lr_tree IS NOT BOUND.
    CREATE OBJECT lr_tree
      EXPORTING
        parent                      lr_cust
        node_selection_mode         cl_gui_simple_tree=>node_sel_mode_single
      EXCEPTIONS
        lifetime_error              1
        cntl_system_error           2
        create_error                3
        failed                      4
        illegal_node_selection_mode 5
        OTHERS                      6.
  ENDIF.

  IF lr_tree IS BOUND.
    CLEAR ls_node.
    ls_node-node_key 'ROOT'.
    ls_node-isfolder 'X'.
    ls_node-text 'Flight Info'.
    APPEND ls_node TO lt_node.
    LOOP AT lt_scarr INTO ls_scarr.
      CLEAR ls_node.
      ls_node-node_key ls_scarr-carrid.
      ls_node-relatkey 'ROOT'.
      ls_node-relatship cl_gui_simple_tree=>relat_last_child.
      ls_node-isfolder ' '.
      ls_node-n_image '@7T@'"ICON_WS_PLANE
      ls_node-text ls_scarr-carrname.
      APPEND ls_node TO lt_node.
    ENDLOOP.

    CALL METHOD lr_tree->add_nodes
      EXPORTING
        table_structure_name           'SCARR'
        node_table                     lt_node
      EXCEPTIONS
        error_in_node_table            1
        failed                         2
        dp_error                       3
        table_structure_name_not_found 4
        OTHERS                         5.
  ENDIF.

ENDMODULE.                 " BUILD_TREE  OUTPUT
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0001  INPUT
*&---------------------------------------------------------------------*
MODULE user_command_0001 INPUT.
  CASE sy-ucomm.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.                 " USER_COMMAND_0001  INPUT


------------------------------------------------------------------------------------------------------------

Screen flow logic.
Layout Design.



Execute the program.






------------------------------------------------------------------------------------------------------------

Comments system

Disqus Shortname