您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息