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