*&---------------------------------------------------------------------**& 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.