ALV_TREE_JAMES

*&---------------------------------------------------------------------*
*& Report  Z_ALV_TREE_JAMES
* Project     : N/A
* Author      : James.Zong
* Description : Template of Program for Alv Tree
*&---------------------------------------------------------------------*
REPORT Z_ALV_TREE_JAMES.
TABLES:SFLIGHT.
*&---------------------------------------------------------------------*
*&  DATA DEFINE
*&---------------------------------------------------------------------*
DATA:
  G_ALV_TREE           TYPE REF TO CL_GUI_ALV_TREE,
  G_CUSTOMER_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

DATA:
  GT_SFLIGHT TYPE TABLE OF SFLIGHT,
  OK_CODE    LIKE SY-UCOMM,
  SAVE_OK    LIKE SY-UCOMM.
*&---------------------------------------------------------------------*
*&  INITIALIZATION
*&---------------------------------------------------------------------*
INITIALIZATION.
CLEAR:
  G_ALV_TREE,
  G_CUSTOMER_CONTAINER,
  GT_SFLIGHT,
  OK_CODE,
  SAVE_OK.
*&---------------------------------------------------------------------*
*&  START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION.
SET SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
*  SET PF-STATUS '0100'.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
  SET TITLEBAR  'Title is N/A'.

  IF G_ALV_TREE IS INITIAL.
    PERFORM INIT_TREE.
  ENDIF.
  CALL METHOD CL_GUI_CFW=>FLUSH.

ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  INIT_TREE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM INIT_TREE .
  DATA:G_TREE_HEADER TYPE TREEV_HHDR.

  CREATE OBJECT G_CUSTOMER_CONTAINER
    EXPORTING
      CONTAINER_NAME      = 'JAMES'.

  CREATE OBJECT G_ALV_TREE
    EXPORTING
      PARENT              = G_CUSTOMER_CONTAINER
      NODE_SELECTION_MODE = CL_GUI_COLUMN_TREE=>NODE_SEL_MODE_SINGLE
      ITEM_SELECTION      = ABAP_TRUE
      NO_HTML_HEADER      = ABAP_TRUE.

* Set layout
  G_TREE_HEADER-HEADING   = 'heading 是什么意思?'.
  G_TREE_HEADER-TOOLTIP   = 'Tooltip 是什么意思?'.
  G_TREE_HEADER-WIDTH     = 40.


  CALL METHOD G_ALV_TREE->SET_TABLE_FOR_FIRST_DISPLAY
  EXPORTING
    I_STRUCTURE_NAME      = 'SFLIGHT'
    IS_HIERARCHY_HEADER   = G_TREE_HEADER
  CHANGING
    IT_OUTTAB             = GT_SFLIGHT.

* Create node
  PERFORM CREATE_HIERARCHY.
  CALL METHOD G_ALV_TREE->FRONTEND_UPDATE.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CREATE_HIERARCHY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CREATE_HIERARCHY .
  DATA:
    LS_SFLIGHT      TYPE SFLIGHT,
    LT_SFLIGHT      TYPE TABLE OF SFLIGHT,

    LV_YYYY_MM      TYPE CHAR6,
    LV_YYYY_MM_LAST TYPE CHAR6,

    LV_CARRID       LIKE SFLIGHT-CARRID,
    LV_CARRID_LAST  LIKE SFLIGHT-CARRID,

    K_MONTH         TYPE LVC_NKEY,
    K_CARRID        TYPE LVC_NKEY,
    K_LAST          TYPE LVC_NKEY.

  SELECT * FROM SFLIGHT INTO CORRESPONDING FIELDS OF TABLE LT_SFLIGHT.
  SORT LT_SFLIGHT BY FLDATE+0(6) CARRID FLDATE+6(2).

  LOOP AT LT_SFLIGHT INTO LS_SFLIGHT.
*   Node for Time
    LV_YYYY_MM+0(6) = LS_SFLIGHT-FLDATE.
    LV_CARRID       = LS_SFLIGHT-CARRID.

    IF LV_YYYY_MM <> LV_YYYY_MM_LAST.

      LV_YYYY_MM_LAST = LV_YYYY_MM.
      PERFORM ADD_NODE_TIME
        USING    LV_YYYY_MM
        CHANGING K_MONTH.

    ENDIF.

*   Node for Carrid
    IF LV_CARRID <> LV_CARRID_LAST.

      LV_CARRID_LAST = LV_CARRID.
      PERFORM ADD_NODE_CARRID
        USING    LV_CARRID K_MONTH
        CHANGING K_CARRID.
    ENDIF.

*   Add line
    PERFORM Addline
      USING    LS_SFLIGHT k_CARRID
      CHANGING K_LAST.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ADD_NODE_TIME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LV_YYYY_MM  text
*      <--P_K_MONTH  text
*----------------------------------------------------------------------*
FORM ADD_NODE_TIME
  USING    P_LV_YYYY_MM
  CHANGING P_K_MONTH.

  DATA:
    LS_SFLIGHT   TYPE SFLIGHT,
    LV_NODE_TEXT TYPE LVC_VALUE.

  CLEAR:
    LS_SFLIGHT,
    LV_NODE_TEXT.

  LV_NODE_TEXT = P_LV_YYYY_MM.

  CALL METHOD G_ALV_TREE->ADD_NODE
    EXPORTING
      I_RELAT_NODE_KEY = ' '
      I_RELATIONSHIP   = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
      IS_OUTTAB_LINE   = LS_SFLIGHT
      I_NODE_TEXT      = LV_NODE_TEXT.
  IF SY-SUBRC <> 0.
    MESSAGE 'Create Time Node failed' TYPE 'E'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ADD_NODE_CARRID
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LV_CARRID  text
*      -->P_K_MONTH  text
*      <--P_K_CARRID  text
*----------------------------------------------------------------------*
FORM ADD_NODE_CARRID  USING    P_LV_CARRID
                               P_K_MONTH
                      CHANGING P_K_CARRID.
  DATA:
    LS_SFLIGHT   TYPE SFLIGHT,
    LV_NODE_TEXT TYPE LVC_VALUE.

  CLEAR:
    LS_SFLIGHT,
    LV_NODE_TEXT.

  LV_NODE_TEXT = P_LV_CARRID.
  CALL METHOD G_ALV_TREE->ADD_NODE
    EXPORTING
      I_RELAT_NODE_KEY = P_K_MONTH
      I_RELATIONSHIP   = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
      IS_OUTTAB_LINE   = LS_SFLIGHT
      I_NODE_TEXT      = LV_NODE_TEXT
    IMPORTING
      E_NEW_NODE_KEY   = P_K_CARRID.

  IF SY-SUBRC <> 0.
   MESSAGE 'Create Carrid Node failed' TYPE 'E'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ADDLINE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LS_SFLIGHT  text
*      -->P_K_CARRID  text
*      <--P_K_LAST  text
*----------------------------------------------------------------------*
FORM ADDLINE
  USING    P_LS_SFLIGHT TYPE sflight
           P_K_CARRID
  CHANGING P_K_LAST.

  DATA:
    LV_NODE_TEXT TYPE LVC_VALUE.

  LV_NODE_TEXT = P_LS_SFLIGHT-FLDATE.
  CALL METHOD G_ALV_TREE->ADD_NODE
    EXPORTING
      I_RELAT_NODE_KEY = P_K_CARRID
      I_RELATIONSHIP   = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
      IS_OUTTAB_LINE   = P_LS_SFLIGHT
      I_NODE_TEXT      = LV_NODE_TEXT
    IMPORTING
      E_NEW_NODE_KEY   = P_K_LAST.

  IF SY-SUBRC <> 0.
    MESSAGE 'Add line failed' TYPE 'E'.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  save_ok = ok_code .
  CLEAR ok_code.
  CASE save_ok .
    WHEN '&F03'.
      LEAVE PROGRAM.
    WHEN '&F15'.
      CALL METHOD g_alv_tree->FREE.
      leave program.
  ENDCASE.
ENDMODULE.
原文地址:https://www.cnblogs.com/HARU/p/9442483.html