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