Sap Tree Control
2014-04-28 12:38
417 查看
*//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*
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
&n
19856
bsp; 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
*//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*
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
&n
19856
bsp; 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
相关文章推荐
- MFC Tree Control对鼠标右击的响应.
- MFC中tree control
- MFC列表控件ListControl和树控件TreeControl
- SAP ABAP 如何在做table control的字段里实现输入负值
- Flex中如何利用树形控件(Tree Control)和SWFLoader控件创建简单图片相册的例子
- flex 树形控件(Tree Control)的使用
- ABAP Tree Control的使用
- SAP ABAP 如何在做table control的字段里实现输入负值
- Flex的树形控件(Tree Control)中如何通过点击行进行展开/缩进的例子
- SAP TableControl 控制单个单元格输入
- 对 ASP.NET 页面进行跟踪(Control Tree)
- 用Ajax技术让IE Web Control Tree View实现大数据量读取
- The SAP Toolbar control
- MFC Tree Control的使用
- SAP ABAP table control中用帮助(F4)实现自动填充另一字段教程
- SAP TREE(转)
- 用Ajax技术让IE Web Control Tree View实现大数据量读取 【原文】
- Flex的树形控件(Tree Control)中如何通过点击行进行展开/缩进的例子
- MFC 查找tree control 的 item
- ABAP--关于SAP Control Framework(入门GUI编程的不错的基础介绍)