abap tree control


*&---------------------------------------------------------------------*
*& Report ZHAIM_TREE_CONTROL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZPCYTREE.
* 功能码
DATA: OK_CODE TYPE SY-UCOMM,
SAVE_OK TYPE SY-UCOMM.
* key text
DATA: NODEKEY(20) TYPE C,
NODETXT(20) TYPE C.
* 定制控制对象
DATA: WA_CONTAINER TYPE SCRFNAME VALUE 'TREE',
* 客户对象
WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
* 实例化对象
WA_TREE TYPE REF TO CL_GUI_SIMPLE_TREE.
* 节点信息表
DATA: IT_NODETABLE LIKE TABLE OF MTREESNODE,
IW_NODETABLE TYPE MTREESNODE.
DATA WA_SPFLI TYPE TABLE OF SPFLI.
*创建一个类,实现一个双击方法
CLASS LCL_APPLICATION DEFINITION DEFERRED.
*&---------------------------------------------------------------------*
*& Class (DEFINITION) LCL_APPLICATION
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
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
*&---------------------------------------------------------------------*
*& Class (Implementation) LCL_APPLICATION
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION IMPLEMENTATION.
METHOD HANDLE_NODE_DOUBLE_CLICK.
NODEKEY = NODE_KEY.
READ TABLE IT_NODETABLE WITH KEY NODE_KEY = NODE_KEY INTO IW_NODETABLE.
NODETXT = IW_NODETABLE-TEXT.
ENDMETHOD.
ENDCLASS. "LCL_APPLICATION
* 双击方法的类的实例化对象 准备在PBO中分配给TREE对象
DATA: G_APPLICATION TYPE REF TO LCL_APPLICATION.
START-OF-SELECTION.
CREATE OBJECT G_APPLICATION.
CALL SCREEN 9911.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9911 INPUT.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN 'BACK'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9911 OUTPUT.
SET PF-STATUS 'TREECTRL_GUIS'.
SET TITLEBAR 'TREE CONTROL'.
IF WA_CUSTOM_CONTAINER IS INITIAL.
PERFORM FRM_CREATE_TREE.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_TREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CREATE_TREE .
DATA: EVENTS TYPE CNTL_SIMPLE_EVENTS,
EVENT1 TYPE CNTL_SIMPLE_EVENT.
* 定制控制对象,指定tree control的容器
CREATE OBJECT WA_CUSTOM_CONTAINER
EXPORTING
* PARENT =
CONTAINER_NAME = WA_CONTAINER " 定制对象名:TREE
* STYLE =
* LIFETIME = lifetime_default
* REPID =
* DYNNR =
* NO_AUTODEF_PROGID_DYNNR =
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5
others = 6
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* 定义树对象
CREATE OBJECT WA_TREE
EXPORTING
* LIFETIME =
PARENT = WA_CUSTOM_CONTAINER
* SHELLSTYLE =
NODE_SELECTION_MODE = CL_GUI_SIMPLE_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
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* 通过宏定义树 节点
DEFINE CREATE_TREE.
CLEAR IW_NODETABLE.
IW_NODETABLE-NODE_KEY = &1. "节点KEY值
IW_NODETABLE-RELATKEY = &2. "相关联的节点KEY值
IW_NODETABLE-RELATSHIP = &3. "关联关系
IW_NODETABLE-HIDDEN = &4.
IW_NODETABLE-DISABLED = &5.
IW_NODETABLE-ISFOLDER = &6. "文件夹形式
* 图标,可以运行程序 SHOWICON 查阅
IW_NODETABLE-N_IMAGE = &7. "图标
IW_NODETABLE-EXP_IMAGE = &7. "图标
* IW_NODETABLE-EXPANDER.
IW_NODETABLE-TEXT = &8. "节点文本
APPEND IW_NODETABLE TO IT_NODETABLE.
END-OF-DEFINITION.
CREATE_TREE 'CN' '' ''
'' '' 'X' '' '中国'.
CREATE_TREE 'gd' 'CN' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' 'X' '' '广东'.
CREATE_TREE 'guangzhou' 'gd' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '广州市'.
CREATE_TREE 'shenzhen' 'gd' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '深圳市'.
CREATE_TREE 'gz' 'CN' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' 'X' '' '广州'.
CREATE_TREE 'FENGTAI' 'gz' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '天河区'.
CREATE_TREE 'HAIDIAN' 'gz' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '南沙区'.
CREATE_TREE 'CHAOYANG' 'gz' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '海珠区'.
CREATE_TREE 'DONGCHENG' 'gz' CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD '' '' '' '@6G@' '黄埔区'.
* 为TREE对象添加节点
CALL METHOD WA_TREE->ADD_NODES
EXPORTING
TABLE_STRUCTURE_NAME = 'MTREESNODE'
NODE_TABLE = IT_NODETABLE
* EXCEPTIONS
* ERROR_IN_IT_NODETABLE = 1
* FAILED = 2
* DP_ERROR = 3
* TABLE_STRUCTURE_NAME_NOT_FOUND = 4
* others = 5
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*定义双击事件
EVENT1-EVENTID = CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK.
EVENT1-APPL_EVENT = 'X'.
APPEND EVENT1 TO EVENTS.
* 添加事件内表
CALL METHOD WA_TREE->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = EVENTS
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
ILLEGAL_EVENT_COMBINATION = 3
others = 4
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* 将已定义的双击事件分配到树对象
SET HANDLER G_APPLICATION->HANDLE_NODE_DOUBLE_CLICK FOR WA_TREE.
ENDFORM. " FRM_CREATE_TREE
浙公网安备 33010602011771号