*//1,屏幕中建立container,用以存储cl_gui_custom_container
*//2.建立容器对象cl_gui_custom_container,需要1中屏幕建立的container
*//3.创建树对象cl_gui_simple_tree,需要3中的容器对象
*//4.建立节点结构mtreesnode,并根据节点结构建立节点表,通过树对象方法add_nodes将建立好的节点表放入树对象中
*//5.定义对象树的事件类型放入
cntl_simple_event结构中,再将对应的事件结构放入事件表
cntl_simple_events中。
*//6.调用树对象的方法
set_registered_events,设置树对象的相应事件
*//7.创建事件处理函数,处理节点树的事件,如
node_double_click事件
*//8.注册事件
SET HANDLER
*//树对象常用方法:
get_selected_node(获取当前节点),
delete_node(删除节点),
add_nodes(添加节点),
node_set_text(修改节点),
expand_node(设置树默认展开)
*//树对象常用事件: FOR EVENT node_double_click OF cl_gui_simple_tree IMPORTING node_key. 双击事件
*//
FOR
EVENT
node_context_menu_request
OF
cl_gui_simple_tree
IMPORTING
node_key menu
. 右键事件,通过menu的add_function来添加右键菜单
*// FOR EVENT node_context_menu_select OF cl_gui_simple_tree IMPORTING node_key fcode . 选择按钮事件,获取右键功能键和当前节点
*//事件注册前需调用
set_ctx_menu_select_event_appl,然后调用
set_registered_events
REPORT
ytest001
.
DATA : save_ok TYPE sy - ucomm ,
ok_code TYPE sy - ucomm .
DATA : text01 ( 18 ) TYPE c .
DATA : wa_container TYPE scrfname VALUE 'C_TEXTEDIT' ,
wa_custom_container TYPE REF TO cl_gui_custom_container ,
wa_tree TYPE REF TO cl_gui_simple_tree .
DATA : node_table LIKE TABLE OF mtreesnode , "//TREE内表
anode_table LIKE TABLE OF mtreesnode ,
node1 TYPE mtreesnode . "//TREE工作区
DATA : node2 TYPE mtreesnode .
DATA : wa_spfli TYPE TABLE OF spfli .
DATA : nodekey ( 200 ) VALUE 'NODE' ,
nodetext ( 200 ) VALUE 'NONE' ,
nodekeyold ( 200 ) VALUE 'NONE' ,
renew ( 200 ).
DATA : getkey ( 200 ).
DATA : menustr ( 10 ) VALUE '' .
CLASS lcl_application DEFINITION DEFERRED .
*----------------------------------------------------------------------*
* 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 .
METHODS : handle_node_context_menu_req
FOR EVENT node_context_menu_request OF cl_gui_simple_tree IMPORTING node_key menu .
METHODS : handle_node_context_menu_sel
FOR EVENT node_context_menu_select OF cl_gui_simple_tree IMPORTING node_key fcode .
ENDCLASS . "LCL_APPLICATION DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_application IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_application IMPLEMENTATION .
METHOD handle_node_double_click .
MESSAGE i208 ( 00 ) WITH 'DOUBLE' .
nodekey = node_key .
READ TABLE node_table WITH KEY node_key = node_key INTO node1 .
nodetext = node1 - text .
ENDMETHOD . "handle_node_double_click
METHOD handle_node_context_menu_req . "//右键事件处理方法
CALL METHOD menu -> add_function
EXPORTING
text = '增加本级节点'
fcode = 'CODE1' .
CALL METHOD menu -> add_function
EXPORTING
text = '增加子节点'
fcode = 'CODE2' .
CALL METHOD menu -> add_function
EXPORTING
text = '修改当前节点'
fcode = 'CODE3' .
CALL METHOD menu -> add_function
EXPORTING
text = '删除当前节点'
fcode = 'CODE4' .
ENDMETHOD . "handle_node_context_menu_req
METHOD handle_node_context_menu_sel . "//选择事件处理方法
DATA : str1 TYPE tv_nodekey .
CALL METHOD wa_tree -> get_selected_node
IMPORTING
node_key = str1 .
IF sy - subrc = 0 .
menustr = fcode .
nodekey = str1 .
nodekeyold = str1 .
* nodetext = menustr.
READ TABLE node_table WITH KEY node_key = str1 INTO node1 .
nodetext = node1 - text .
IF fcode = 'CODE4' .
CALL METHOD wa_tree -> delete_node
EXPORTING
node_key = node1 - node_key .
DELETE node_table WHERE node_key = node_key .
ENDIF .
ENDIF .
ENDMETHOD . "handle_node_context_menu_sel
ENDCLASS . "lcl_application IMPLEMENTATION
DATA : g_application TYPE REF TO lcl_application .
START-OF-SELECTION .
CREATE OBJECT g_application .
CALL SCREEN 0100 .
*简单树的建立
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT .
DATA : str1 TYPE tv_nodekey .
save_ok = ok_code .
CLEAR ok_code .
CASE save_ok .
WHEN 'EXIT' .
LEAVE PROGRAM .
WHEN 'TEST' .
text01 = 'TEST' .
WHEN 'BACK' .
* CALL SCREEN 0000.
WHEN 'RENEW' .
* LEAVE PROGRAM.
IF ( menustr = 'CODE1' ) OR ( menustr = 'CODE2' ).
READ TABLE node_table WITH KEY node_key = nodekey INTO node1 .
IF sy - subrc = 0 .
MESSAGE e208 ( 00 ) WITH '键值重复' .
ENDIF .
ENDIF .
CASE menustr .
WHEN : 'CODE1' .
READ TABLE node_table WITH KEY node_key = nodekeyold INTO node2 .
CLEAR node1 .
node1 - node_key = nodekey .
node1 - relatkey = node2 - relatkey .
node1 - isfolder = 'X' .
node1 - text = nodetext .
APPEND node1 TO node_table .
CLEAR anode_table .
APPEND node1 TO anode_table .
CALL METHOD wa_tree -> add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = anode_table .
WHEN : 'CODE2' .
CLEAR : node1 .
node1 - node_key = nodekey .
node1 - relatkey = nodekeyold .
node1 - isfolder = 'X' .
node1 - text = nodetext .
APPEND node1 TO node_table .
CLEAR anode_table .
APPEND node1 TO anode_table .
CALL METHOD wa_tree -> add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = anode_table .
WHEN : 'CODE3' .
node1 - node_key = nodekeyold .
CALL METHOD wa_tree -> node_set_text
EXPORTING
node_key = node1 - node_key
text = nodetext .
ENDCASE .
WHEN 'GETKEY' .
CALL METHOD wa_tree -> get_selected_node
IMPORTING
node_key = str1 .
IF sy - subrc = 0 .
nodekeyold = str1 .
ENDIF .
ENDCASE .
ENDMODULE . " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT .
SET PF-STATUS '0100' .
IF wa_custom_container IS INITIAL .
PERFORM create_tree .
ENDIF .
* SET TITLEBAR 'xxx'.
ENDMODULE . " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit INPUT .
LEAVE PROGRAM .
ENDMODULE . " EXIT INPUT
*&---------------------------------------------------------------------*
*& Form CREATE_TREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_tree .
DATA : events TYPE cntl_simple_events ,
event1 TYPE cntl_simple_event .
CREATE OBJECT wa_custom_container
EXPORTING
container_name = wa_container .
CREATE OBJECT wa_tree
EXPORTING
parent = wa_custom_container
node_selection_mode = cl_gui_simple_tree => node_sel_mode_single .
* 节点的建立
CLEAR node1 .
node1 - node_key = 'COUNTRY' . "//根节点
* CLEAR node1-relatkey.
* CLEAR node1-relatship.
* node1-hidden = ''.
* node1-disabled = ''.
node1 - isfolder = 'X' .
* CLEAR node1-n_image.
* CLEAR node1-exp_image.
* CLEAR node1-expander.
node1 - text = '中国' .
APPEND node1 TO node_table .
CLEAR node1 .
node1 - node_key = 'CITYBEIJING' . "//城市节点北京
node1 - relatkey = 'COUNTRY' .
node1 - isfolder = 'X' .
node1 - text = '北京' .
APPEND node1 TO node_table .
CLEAR node1 .
node1 - node_key = 'CITYSHANGHAI' . "//城市节点上海
node1 - relatkey = 'COUNTRY' .
node1 - isfolder = 'X' .
node1 - text = '上海' .
APPEND node1 TO node_table .
CLEAR node1 .
node1 - node_key = 'KEYCHONGWEN' . "//地区节点 北京--崇文区
node1 - relatkey = 'CITYBEIJING' .
* node1-relatship = CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD.
node1 - isfolder = '' .
node1 - text = '崇文区' .
CLEAR node1 - expander .
APPEND node1 TO node_table .
CALL METHOD wa_tree -> add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = node_table .
event1 - eventid = cl_gui_simple_tree => eventid_node_double_click .
event1 - appl_event = 'X' .
APPEND event1 TO events .
CLEAR event1 .
event1 - eventid = cl_gui_simple_tree => eventid_node_context_menu_req .
event1 - appl_event = '' .
APPEND event1 TO events .
CALL METHOD wa_tree -> set_ctx_menu_select_event_appl
EXPORTING
appl_event = 'X' .
* CLEAR event1.
* event1-eventid = cl_gui_simple_tree=>eventid_node_context_menu_req.
* event1-appl_event = ''.
* APPEND event1 TO events.
CALL METHOD wa_tree -> set_registered_events
EXPORTING
events = events .
SET HANDLER g_application -> handle_node_double_click FOR wa_tree .
SET HANDLER g_application -> handle_node_context_menu_req FOR wa_tree .
SET HANDLER g_application -> handle_node_context_menu_sel FOR wa_tree .
ENDFORM . " CREATE_TREE *
DATA : save_ok TYPE sy - ucomm ,
ok_code TYPE sy - ucomm .
DATA : text01 ( 18 ) TYPE c .
DATA : wa_container TYPE scrfname VALUE 'C_TEXTEDIT' ,
wa_custom_container TYPE REF TO cl_gui_custom_container ,
wa_tree TYPE REF TO cl_gui_simple_tree .
DATA : node_table LIKE TABLE OF mtreesnode , "//TREE内表
anode_table LIKE TABLE OF mtreesnode ,
node1 TYPE mtreesnode . "//TREE工作区
DATA : node2 TYPE mtreesnode .
DATA : wa_spfli TYPE TABLE OF spfli .
DATA : nodekey ( 200 ) VALUE 'NODE' ,
nodetext ( 200 ) VALUE 'NONE' ,
nodekeyold ( 200 ) VALUE 'NONE' ,
renew ( 200 ).
DATA : getkey ( 200 ).
DATA : menustr ( 10 ) VALUE '' .
CLASS lcl_application DEFINITION DEFERRED .
*----------------------------------------------------------------------*
* 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 .
METHODS : handle_node_context_menu_req
FOR EVENT node_context_menu_request OF cl_gui_simple_tree IMPORTING node_key menu .
METHODS : handle_node_context_menu_sel
FOR EVENT node_context_menu_select OF cl_gui_simple_tree IMPORTING node_key fcode .
ENDCLASS . "LCL_APPLICATION DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_application IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_application IMPLEMENTATION .
METHOD handle_node_double_click .
MESSAGE i208 ( 00 ) WITH 'DOUBLE' .
nodekey = node_key .
READ TABLE node_table WITH KEY node_key = node_key INTO node1 .
nodetext = node1 - text .
ENDMETHOD . "handle_node_double_click
METHOD handle_node_context_menu_req . "//右键事件处理方法
CALL METHOD menu -> add_function
EXPORTING
text = '增加本级节点'
fcode = 'CODE1' .
CALL METHOD menu -> add_function
EXPORTING
text = '增加子节点'
fcode = 'CODE2' .
CALL METHOD menu -> add_function
EXPORTING
text = '修改当前节点'
fcode = 'CODE3' .
CALL METHOD menu -> add_function
EXPORTING
text = '删除当前节点'
fcode = 'CODE4' .
ENDMETHOD . "handle_node_context_menu_req
METHOD handle_node_context_menu_sel . "//选择事件处理方法
DATA : str1 TYPE tv_nodekey .
CALL METHOD wa_tree -> get_selected_node
IMPORTING
node_key = str1 .
IF sy - subrc = 0 .
menustr = fcode .
nodekey = str1 .
nodekeyold = str1 .
* nodetext = menustr.
READ TABLE node_table WITH KEY node_key = str1 INTO node1 .
nodetext = node1 - text .
IF fcode = 'CODE4' .
CALL METHOD wa_tree -> delete_node
EXPORTING
node_key = node1 - node_key .
DELETE node_table WHERE node_key = node_key .
ENDIF .
ENDIF .
ENDMETHOD . "handle_node_context_menu_sel
ENDCLASS . "lcl_application IMPLEMENTATION
DATA : g_application TYPE REF TO lcl_application .
START-OF-SELECTION .
CREATE OBJECT g_application .
CALL SCREEN 0100 .
*简单树的建立
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT .
DATA : str1 TYPE tv_nodekey .
save_ok = ok_code .
CLEAR ok_code .
CASE save_ok .
WHEN 'EXIT' .
LEAVE PROGRAM .
WHEN 'TEST' .
text01 = 'TEST' .
WHEN 'BACK' .
* CALL SCREEN 0000.
WHEN 'RENEW' .
* LEAVE PROGRAM.
IF ( menustr = 'CODE1' ) OR ( menustr = 'CODE2' ).
READ TABLE node_table WITH KEY node_key = nodekey INTO node1 .
IF sy - subrc = 0 .
MESSAGE e208 ( 00 ) WITH '键值重复' .
ENDIF .
ENDIF .
CASE menustr .
WHEN : 'CODE1' .
READ TABLE node_table WITH KEY node_key = nodekeyold INTO node2 .
CLEAR node1 .
node1 - node_key = nodekey .
node1 - relatkey = node2 - relatkey .
node1 - isfolder = 'X' .
node1 - text = nodetext .
APPEND node1 TO node_table .
CLEAR anode_table .
APPEND node1 TO anode_table .
CALL METHOD wa_tree -> add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = anode_table .
WHEN : 'CODE2' .
CLEAR : node1 .
node1 - node_key = nodekey .
node1 - relatkey = nodekeyold .
node1 - isfolder = 'X' .
node1 - text = nodetext .
APPEND node1 TO node_table .
CLEAR anode_table .
APPEND node1 TO anode_table .
CALL METHOD wa_tree -> add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = anode_table .
WHEN : 'CODE3' .
node1 - node_key = nodekeyold .
CALL METHOD wa_tree -> node_set_text
EXPORTING
node_key = node1 - node_key
text = nodetext .
ENDCASE .
WHEN 'GETKEY' .
CALL METHOD wa_tree -> get_selected_node
IMPORTING
node_key = str1 .
IF sy - subrc = 0 .
nodekeyold = str1 .
ENDIF .
ENDCASE .
ENDMODULE . " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT .
SET PF-STATUS '0100' .
IF wa_custom_container IS INITIAL .
PERFORM create_tree .
ENDIF .
* SET TITLEBAR 'xxx'.
ENDMODULE . " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit INPUT .
LEAVE PROGRAM .
ENDMODULE . " EXIT INPUT
*&---------------------------------------------------------------------*
*& Form CREATE_TREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_tree .
DATA : events TYPE cntl_simple_events ,
event1 TYPE cntl_simple_event .
CREATE OBJECT wa_custom_container
EXPORTING
container_name = wa_container .
CREATE OBJECT wa_tree
EXPORTING
parent = wa_custom_container
node_selection_mode = cl_gui_simple_tree => node_sel_mode_single .
* 节点的建立
CLEAR node1 .
node1 - node_key = 'COUNTRY' . "//根节点
* CLEAR node1-relatkey.
* CLEAR node1-relatship.
* node1-hidden = ''.
* node1-disabled = ''.
node1 - isfolder = 'X' .
* CLEAR node1-n_image.
* CLEAR node1-exp_image.
* CLEAR node1-expander.
node1 - text = '中国' .
APPEND node1 TO node_table .
CLEAR node1 .
node1 - node_key = 'CITYBEIJING' . "//城市节点北京
node1 - relatkey = 'COUNTRY' .
node1 - isfolder = 'X' .
node1 - text = '北京' .
APPEND node1 TO node_table .
CLEAR node1 .
node1 - node_key = 'CITYSHANGHAI' . "//城市节点上海
node1 - relatkey = 'COUNTRY' .
node1 - isfolder = 'X' .
node1 - text = '上海' .
APPEND node1 TO node_table .
CLEAR node1 .
node1 - node_key = 'KEYCHONGWEN' . "//地区节点 北京--崇文区
node1 - relatkey = 'CITYBEIJING' .
* node1-relatship = CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD.
node1 - isfolder = '' .
node1 - text = '崇文区' .
CLEAR node1 - expander .
APPEND node1 TO node_table .
CALL METHOD wa_tree -> add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = node_table .
event1 - eventid = cl_gui_simple_tree => eventid_node_double_click .
event1 - appl_event = 'X' .
APPEND event1 TO events .
CLEAR event1 .
event1 - eventid = cl_gui_simple_tree => eventid_node_context_menu_req .
event1 - appl_event = '' .
APPEND event1 TO events .
CALL METHOD wa_tree -> set_ctx_menu_select_event_appl
EXPORTING
appl_event = 'X' .
* CLEAR event1.
* event1-eventid = cl_gui_simple_tree=>eventid_node_context_menu_req.
* event1-appl_event = ''.
* APPEND event1 TO events.
CALL METHOD wa_tree -> set_registered_events
EXPORTING
events = events .
SET HANDLER g_application -> handle_node_double_click FOR wa_tree .
SET HANDLER g_application -> handle_node_context_menu_req FOR wa_tree .
SET HANDLER g_application -> handle_node_context_menu_sel FOR wa_tree .
ENDFORM . " CREATE_TREE *
REPORT ytest001 .
DATA : save_ok TYPE sy - ucomm ,
ok_code TYPE sy - ucomm .
DATA : text01 ( 18 ) TYPE c .
DATA : wa_container TYPE scrfname VALUE 'C_TEXTEDIT' ,
wa_custom_container TYPE REF TO cl_gui_custom_container ,
wa_tree TYPE REF TO cl_gui_simple_tree .
DATA : node_table LIKE TABLE OF mtreesnode , "//TREE内表
anode_table LIKE TABLE OF mtreesnode ,
node1 TYPE mtreesnode . "//TREE工作区
DATA : node2 TYPE mtreesnode .
DATA : wa_spfli TYPE TABLE OF spfli .
DATA : nodekey ( 200 ) VALUE 'NODE' ,
nodetext ( 200 ) VALUE 'NONE' ,
nodekeyold ( 200 ) VALUE 'NONE' ,
renew ( 200 ).
DATA : getkey ( 200 ).
DATA : menustr ( 10 ) VALUE '' .
CLASS lcl_application DEFINITION DEFERRED .
*----------------------------------------------------------------------*
* 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 .
METHODS : handle_node_context_menu_req
FOR EVENT node_context_menu_request OF cl_gui_simple_tree IMPORTING node_key menu .
METHODS : handle_node_context_menu_sel
FOR EVENT node_context_menu_select OF cl_gui_simple_tree IMPORTING node_key fcode .
ENDCLASS . "LCL_APPLICATION DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_application IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_application IMPLEMENTATION .
METHOD handle_node_double_click .
MESSAGE i208 ( 00 ) WITH 'DOUBLE' .
nodekey = node_key .
READ TABLE node_table WITH KEY node_key = node_key INTO node1 .
nodetext = node1 - text .
ENDMETHOD . "handle_node_double_click
METHOD handle_node_context_menu_req . "//右键事件处理方法
CALL METHOD menu -> add_function
EXPORTING
text = '增加本级节点'
fcode = 'CODE1' .
CALL METHOD menu -> add_function
EXPORTING
text = '增加子节点'
fcode = 'CODE2' .
CALL METHOD menu -> add_function
EXPORTING
text = '修改当前节点'
fcode = 'CODE3' .
CALL METHOD menu -> add_function
EXPORTING
text = '删除当前节点'
fcode = 'CODE4' .
ENDMETHOD . "handle_node_context_menu_req
METHOD handle_node_context_menu_sel . "//选择事件处理方法
DATA : str1 TYPE tv_nodekey .
CALL METHOD wa_tree -> get_selected_node
IMPORTING
node_key = str1 .
IF sy - subrc = 0 .
menustr = fcode .
nodekey = str1 .
nodekeyold = str1 .
* nodetext = menustr.
READ TABLE node_table WITH KEY node_key = str1 INTO node1 .
nodetext = node1 - text .
IF fcode = 'CODE4' .
CALL METHOD wa_tree -> delete_node
EXPORTING
node_key = node1 - node_key .
DELETE node_table WHERE node_key = node_key .
ENDIF .
ENDIF .
ENDMETHOD . "handle_node_context_menu_sel
ENDCLASS . "lcl_application IMPLEMENTATION
DATA : g_application TYPE REF TO lcl_application .
START-OF-SELECTION .
CREATE OBJECT g_application .
CALL SCREEN 0100 .
*简单树的建立
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT .
DATA : str1 TYPE tv_nodekey .
save_ok = ok_code .
CLEAR ok_code .
CASE save_ok .
WHEN 'EXIT' .
LEAVE PROGRAM .
WHEN 'TEST' .
text01 = 'TEST' .
WHEN 'BACK' .
* CALL SCREEN 0000.
WHEN 'RENEW' .
* LEAVE PROGRAM.
IF ( menustr = 'CODE1' ) OR ( menustr = 'CODE2' ).
READ TABLE node_table WITH KEY node_key = nodekey INTO node1 .
IF sy - subrc = 0 .
MESSAGE e208 ( 00 ) WITH '键值重复' .
ENDIF .
ENDIF .
CASE menustr .
WHEN : 'CODE1' .
READ TABLE node_table WITH KEY node_key = nodekeyold INTO node2 .
CLEAR node1 .
node1 - node_key = nodekey .
node1 - relatkey = node2 - relatkey .
node1 - isfolder = 'X' .
node1 - text = nodetext .
APPEND node1 TO node_table .
CLEAR anode_table .
APPEND node1 TO anode_table .
CALL METHOD wa_tree -> add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = anode_table .
WHEN : 'CODE2' .
CLEAR : node1 .
node1 - node_key = nodekey .
node1 - relatkey = nodekeyold .
node1 - isfolder = 'X' .
node1 - text = nodetext .
APPEND node1 TO node_table .
CLEAR anode_table .
APPEND node1 TO anode_table .
CALL METHOD wa_tree -> add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = anode_table .
WHEN : 'CODE3' .
node1 - node_key = nodekeyold .
CALL METHOD wa_tree -> node_set_text
EXPORTING
node_key = node1 - node_key
text = nodetext .
ENDCASE .
WHEN 'GETKEY' .
CALL METHOD wa_tree -> get_selected_node
IMPORTING
node_key = str1 .
IF sy - subrc = 0 .
nodekeyold = str1 .
ENDIF .
ENDCASE .
ENDMODULE . " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT .
SET PF-STATUS '0100' .
IF wa_custom_container IS INITIAL .
PERFORM create_tree .
ENDIF .
* SET TITLEBAR 'xxx'.
ENDMODULE . " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit INPUT .
LEAVE PROGRAM .
ENDMODULE . " EXIT INPUT
*&---------------------------------------------------------------------*
*& Form CREATE_TREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_tree .
DATA : events TYPE cntl_simple_events ,
event1 TYPE cntl_simple_event .
CREATE OBJECT wa_custom_container
EXPORTING
container_name = wa_container .
CREATE OBJECT wa_tree
EXPORTING
parent = wa_custom_container
node_selection_mode = cl_gui_simple_tree => node_sel_mode_single .
* 节点的建立
CLEAR node1 .
node1 - node_key = 'COUNTRY' . "//根节点
* CLEAR node1-relatkey.
* CLEAR node1-relatship.
* node1-hidden = ''.
* node1-disabled = ''.
node1 - isfolder = 'X' .
* CLEAR node1-n_image.
* CLEAR node1-exp_image.
* CLEAR node1-expander.
node1 - text = '中国' .
APPEND node1 TO node_table .
CLEAR node1 .
node1 - node_key = 'CITYBEIJING' . "//城市节点北京
node1 - relatkey = 'COUNTRY' .
node1 - isfolder = 'X' .
node1 - text = '北京' .
APPEND node1 TO node_table .
CLEAR node1 .
node1 - node_key = 'CITYSHANGHAI' . "//城市节点上海
node1 - relatkey = 'COUNTRY' .
node1 - isfolder = 'X' .
node1 - text = '上海' .
APPEND node1 TO node_table .
CLEAR node1 .
node1 - node_key = 'KEYCHONGWEN' . "//地区节点 北京--崇文区
node1 - relatkey = 'CITYBEIJING' .
* node1-relatship = CL_GUI_SIMPLE_TREE=>RELAT_LAST_CHILD.
node1 - isfolder = '' .
node1 - text = '崇文区' .
CLEAR node1 - expander .
APPEND node1 TO node_table .
CALL METHOD wa_tree -> add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = node_table .
event1 - eventid = cl_gui_simple_tree => eventid_node_double_click .
event1 - appl_event = 'X' .
APPEND event1 TO events .
CLEAR event1 .
event1 - eventid = cl_gui_simple_tree => eventid_node_context_menu_req .
event1 - appl_event = '' .
APPEND event1 TO events .
CALL METHOD wa_tree -> set_ctx_menu_select_event_appl
EXPORTING
appl_event = 'X' .
* CLEAR event1.
* event1-eventid = cl_gui_simple_tree=>eventid_node_context_menu_req.
* event1-appl_event = ''.
* APPEND event1 TO events.
CALL METHOD wa_tree -> set_registered_events
EXPORTING
events = events .
SET HANDLER g_application -> handle_node_double_click FOR wa_tree .
SET HANDLER g_application -> handle_node_context_menu_req FOR wa_tree .
SET HANDLER g_application -> handle_node_context_menu_sel FOR wa_tree .
ENDFORM . " CREATE_TREE