*&---------------------------------------------------------------------*
*& Report Y_ABC_12
*&
*&---------------------------------------------------------------------*
*& 屏幕100添加CONTAINER控件'CON_TREE';
*& EXIT_0100 添加 关闭事件代码;
*& USER_COMMAND_0100
*&---------------------------------------------------------------------*
REPORT Y_ABC_12.
CLASS LCL_APPLICATION DEFINITION DEFERRED.
DATA: G_APPLICATION TYPE REF TO LCL_APPLICATION.
DATA: GT_NODE TYPE TABLE OF MTREESNODE.
DATA: G_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.
DATA: G_UCOMM TYPE SY-UCOMM.
DATA: OK_CODE TYPE SY-UCOMM.
*----------------------------------------------------------------------*
* CLASS lcl_application DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_NODE_DOUBLE_CLICK
FOR EVENT NODE_DOUBLE_CLICK OF CL_GUI_SIMPLE_TREE
IMPORTING NODE_KEY.
ENDCLASS. "lcl_application DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_application IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION IMPLEMENTATION.
METHOD HANDLE_NODE_DOUBLE_CLICK.
PERFORM FRM_NODE_DOUBLE_CLICK USING NODE_KEY.
ENDMETHOD. "handle_node_double_click
ENDCLASS. "lcl_application IMPLEMENTATION
START-OF-SELECTION.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MODULE_STATUS_0100 OUTPUT.
SET PF-STATUS '0100'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE EXIT_0100 INPUT.
SET SCREEN 0.
ENDMODULE. " EXIT_0100 INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
G_UCOMM = OK_CODE.
CASE G_UCOMM.
WHEN 'UCOM_YES'.
LEAVE TO SCREEN 0.
* WHEN OTHERS.
* LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module MODULE_INIT_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE MODULE_INIT_0100 OUTPUT.
PERFORM FRM_INIT_100_TREE.
ENDMODULE. " MODULE_INIT_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form FRM_INIT_100_TREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_INIT_100_TREE .
CHECK G_CONTAINER IS INITIAL .
PERFORM FRM_CREATE_CONTAINER USING 'CON_TREE' G_CONTAINER.
CHECK SY-SUBRC = 0.
PERFORM FRM_CREATE_TREE USING G_CONTAINER G_TREE.
CHECK SY-SUBRC = 0.
PERFORM FRM_TREE_SET_ALIGNMENT USING 15 G_TREE.
PERFORM FRM_ADD_TREE_EVENT USING G_TREE G_APPLICATION.
PERFORM FRM_ADD_NODE_TABLE TABLES GT_NODE. " 设置节点数据;
PERFORM FRM_ADD_TREE_NODES TABLES GT_NODE USING 'MTREESNODE' G_TREE.
ENDFORM. " FRM_INIT_100_TREE
*&---------------------------------------------------------------------*
*& Form FRM_ADD_NODE_TABLE
*&---------------------------------------------------------------------*
* 设置节点表数据
*----------------------------------------------------------------------*
FORM FRM_ADD_NODE_TABLE TABLES P_GT_NODE STRUCTURE MTREESNODE.
DATA: LS_NODE TYPE MTREESNODE.
REFRESH P_GT_NODE.
CLEAR LS_NODE.
"第1层节点'
LS_NODE-NODE_KEY = 'ROOT'.
LS_NODE-RELATKEY = ''.
LS_NODE-TEXT = '分类'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
"第2层节点'
LS_NODE-NODE_KEY = 'a1'.
LS_NODE-RELATKEY = 'ROOT'.
LS_NODE-TEXT = '分类1'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
LS_NODE-NODE_KEY = 'a2'.
LS_NODE-RELATKEY = 'ROOT'.
LS_NODE-TEXT = '分类2'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
"第3层节点'
LS_NODE-NODE_KEY = 'b1'.
LS_NODE-RELATKEY = 'a2'.
LS_NODE-TEXT = '分类3'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
CLEAR: LS_NODE.
ENDFORM. " FRM_NODE_TABLE
*&---------------------------------------------------------------------*
*& Form FRM_NODE_DOUBLE_CLICK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_NODE_KEY text
*----------------------------------------------------------------------*
FORM FRM_NODE_DOUBLE_CLICK USING P_NODE_KEY.
BREAK-POINT.
ENDFORM. " FRM_NODE_DOUBLE_CLICK
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_CONTAINER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_G_CONTAINER text
*----------------------------------------------------------------------*
FORM FRM_CREATE_CONTAINER
USING PV_CON_TREE
PV_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
CREATE OBJECT PV_CONTAINER
EXPORTING
CONTAINER_NAME = PV_CON_TREE " 100屏幕CONTAINER控件
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5.
ENDFORM. " FRM_CREATE_CONTAINER
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_TREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_G_CONTAINER text
* <--P_G_TREE text
*----------------------------------------------------------------------*
FORM FRM_CREATE_TREE
USING P_G_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER
P_G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.
CREATE OBJECT P_G_TREE
EXPORTING
* lifetime =
PARENT = P_G_CONTAINER
* shellstyle =
NODE_SELECTION_MODE = P_G_TREE->NODE_SEL_MODE_SINGLE
* hide_selection =
* name =
EXCEPTIONS
LIFETIME_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
FAILED = 4
ILLEGAL_NODE_SELECTION_MODE = 5
OTHERS = 6.
ENDFORM. " FRM_CREATE_TREE
*&---------------------------------------------------------------------*
*& Form FRM_TREE_SET_ALIGNMENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_15 text
* <--P_G_TREE text
*----------------------------------------------------------------------*
FORM FRM_TREE_SET_ALIGNMENT USING P_ALIGNMENT
P_G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.
CALL METHOD P_G_TREE->SET_ALIGNMENT
EXPORTING
ALIGNMENT = P_ALIGNMENT. """ 不能大于15;
ENDFORM. " FRM_TREE_SET_ALIGNMENT
*&---------------------------------------------------------------------*
*& Form FRM_ADD_TREE_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_G_TREE text
* <--P_G_APPLICATION text
*----------------------------------------------------------------------*
FORM FRM_ADD_TREE_EVENT
USING P_G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE
P_G_APPLICATION TYPE REF TO LCL_APPLICATION.
DATA: LT_EVENTS TYPE CNTL_SIMPLE_EVENTS,
LS_EVENT TYPE CNTL_SIMPLE_EVENT.
" node double click
LS_EVENT-EVENTID = CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK.
LS_EVENT-APPL_EVENT = 'X'. " process PAI if event occurs
APPEND LS_EVENT TO LT_EVENTS.
CALL METHOD P_G_TREE->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = LT_EVENTS
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
ILLEGAL_EVENT_COMBINATION = 3.
CHECK SY-SUBRC = 0.
CREATE OBJECT P_G_APPLICATION.
SET HANDLER P_G_APPLICATION->HANDLE_NODE_DOUBLE_CLICK FOR P_G_TREE.
ENDFORM. " FRM_ADD_TREE_EVENT
*&---------------------------------------------------------------------*
*& Form FRM_ADD_TREE_NODES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_NODE text
* -->PV_STRUS text
* <--P_G_TREE text
*----------------------------------------------------------------------*
FORM FRM_ADD_TREE_NODES
TABLES P_GT_NODE STRUCTURE MTREESNODE
USING PV_STRUS
P_G_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.
CALL METHOD P_G_TREE->ADD_NODES
EXPORTING
TABLE_STRUCTURE_NAME = PV_STRUS
NODE_TABLE = P_GT_NODE[]
EXCEPTIONS
FAILED = 1
ERROR_IN_NODE_TABLE = 2
DP_ERROR = 3
TABLE_STRUCTURE_NAME_NOT_FOUND = 4
OTHERS = 5.
ENDFORM. " FRM_ADD_TREE_NODES
ABAP-TREE-CL_GUI_SIMPLE_TREE
于 2019-06-10 17:30:42 首次发布