Sunday 2 August 2015

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.





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

No comments:

Comments system

Disqus Shortname