ALV TREE 用作导航栏的实例
一、实现效果
二、相关类:CL_GUI_SIMPLE_TREE, CL_GUI_CUSTOM_CONTAINER
三、实现步骤以及code
1.数据定义(TOP):
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.
2.实现类(CLS):
*----------------------------------------------------------------------*
* 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.
3.屏幕初始化(output)
FORM FRM_INIT_100_TREE ." 初始化ALV TREE
CHECK G_CONTAINER IS INITIAL .
PERFORM FRM_CREATE_CONTAINER USING '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
*&----------
4.有关form
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.
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.
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.
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.
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.
CLEAR LS_NODE.
"第1层节点'
LS_NODE-N_IMAGE = ICON_HEADER.
LS_NODE-NODE_KEY = 'ROOT_POJ'.
LS_NODE-RELATKEY = 'ROOT'.
LS_NODE-TEXT = '项目管理'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
CLEAR LS_NODE.
"第1层节点'
LS_NODE-N_IMAGE = ICON_CUSTOMER.
LS_NODE-NODE_KEY = 'ROOT_ST'.
LS_NODE-RELATKEY = 'ROOT'.
LS_NODE-TEXT = '职员管理'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
"第2层节点'
LS_NODE-NODE_KEY = 'TREE1'.
LS_NODE-RELATKEY = 'ROOT_POJ'.
LS_NODE-TEXT = '项目信息'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
LS_NODE-N_IMAGE = ICON_INSERT_ROW.
LS_NODE-NODE_KEY = 'INSERT'.
LS_NODE-RELATKEY = 'ROOT_ST'.
LS_NODE-TEXT = '职员信息录入'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
LS_NODE-N_IMAGE = ICON_CHANGE.
LS_NODE-NODE_KEY = 'MODIY'.
LS_NODE-RELATKEY = 'ROOT_ST'.
LS_NODE-TEXT = '职员信息修改'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
CLEAR: LS_NODE.
LS_NODE-N_IMAGE = ICON_agent.
LS_NODE-NODE_KEY = 'APLI'.
LS_NODE-RELATKEY = 'ROOT_ST'.
LS_NODE-TEXT = '审批'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
CLEAR: LS_NODE.
LS_NODE-N_IMAGE = ICON_agent.
LS_NODE-NODE_KEY = 'A_ST'.
LS_NODE-RELATKEY = 'APLI'.
LS_NODE-TEXT = '职员入职审批'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
ENDFORM. " FRM_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.
CLEAR LS_NODE.
"第1层节点'
LS_NODE-N_IMAGE = ICON_HEADER.
LS_NODE-NODE_KEY = 'ROOT_POJ'.
LS_NODE-RELATKEY = 'ROOT'.
LS_NODE-TEXT = '项目管理'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
CLEAR LS_NODE.
"第1层节点'
LS_NODE-N_IMAGE = ICON_CUSTOMER.
LS_NODE-NODE_KEY = 'ROOT_ST'.
LS_NODE-RELATKEY = 'ROOT'.
LS_NODE-TEXT = '职员管理'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
"第2层节点'
LS_NODE-NODE_KEY = 'TREE1'.
LS_NODE-RELATKEY = 'ROOT_POJ'.
LS_NODE-TEXT = '项目信息'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
LS_NODE-N_IMAGE = ICON_INSERT_ROW.
LS_NODE-NODE_KEY = 'INSERT'.
LS_NODE-RELATKEY = 'ROOT_ST'.
LS_NODE-TEXT = '职员信息录入'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
LS_NODE-N_IMAGE = ICON_CHANGE.
LS_NODE-NODE_KEY = 'MODIY'.
LS_NODE-RELATKEY = 'ROOT_ST'.
LS_NODE-TEXT = '职员信息修改'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
CLEAR: LS_NODE.
LS_NODE-N_IMAGE = ICON_agent.
LS_NODE-NODE_KEY = 'APLI'.
LS_NODE-RELATKEY = 'ROOT_ST'.
LS_NODE-TEXT = '审批'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
CLEAR: LS_NODE.
LS_NODE-N_IMAGE = ICON_agent.
LS_NODE-NODE_KEY = 'A_ST'.
LS_NODE-RELATKEY = 'APLI'.
LS_NODE-TEXT = '职员入职审批'.
LS_NODE-ISFOLDER = 'X'.
APPEND LS_NODE TO P_GT_NODE.
ENDFORM. " FRM_NODE_TABLE