首先定义树的根和节点
在布局里设置根和节点(跟和节点同类型,设置根不可见)以及叶子
先在视图属性里设置节点和叶子表:
在初始化时填充节点表和叶子表并给根节点赋值:
method WDDOINIT .
data:
lr_current_node type ref to if_wd_context_node,
lr_current_element type ref to if_wd_context_element.
* Fill tables with the structure of the tree
fill_foldertable( ).
fill_filetable( ).
lr_current_node = wd_context->get_child_node( 'FOLDER' ).
lr_current_element = lr_current_node->create_element( ).
lr_current_node->bind_element( lr_current_element ).
lr_current_node->set_lead_selection( lr_current_element ).
lr_current_element->set_attribute( name = 'TEXT' value =
'Rootknoten' ).
* Create the root node
create_node(
exporting
cur_element = lr_current_element
parent_key = 'Drives' ).
“设置展开树.先将树节点展开属性绑定到一个布尔类型的属性上
lo_nd_tree = wd_context->get_child_node( name = wd_this->wdctx_tree ).
lo_el_tree = lo_nd_tree->get_element( ).
lv_is_expanded = 'X'.
lo_el_tree->set_attribute(
name = `IS_EXPANDED`
value = lv_is_expanded ).
Endmethod.
先填充节点表:
method FILL_FOLDERTABLE .
DATA: wa_folder TYPE ihttpnvp.
* field NAME corresponds to child key
* field VALUE corresponds to parent key
wa_folder-name = 'C'.”节点名
wa_folder-value = 'Drives'.”上级节点名
APPEND wa_folder to wd_this->mt_folder_struc.
endmethod.
再根据节点来填充叶子:
method FILL_FILETABLE .
DATA: wa_file TYPE ihttpnvp.
* field NAME corresponds to child key
* field VALUE corresponds to parent key
wa_file-name = 'start.bat'.”叶子名
wa_file-value = 'C'.”叶子的上级节点
APPEND wa_file to wd_this->mt_file_struc.
Endmethod.
创建树(根据节点类型来分别创建节点和叶子):需要传入参数(当前节点和上级节点)
method CREATE_NODE .
DATA:
lr_cur_node TYPE REF TO if_wd_context_node,
folder_item TYPE ihttpnvp,
file_item TYPE ihttpnvp.
* create the new node by requesting it as a child node
lr_cur_node = cur_element->get_child_node( 'FILE' ).
* create elements for files
LOOP AT wd_this->mt_file_struc INTO file_item
WHERE value = parent_key.
create_file_element(“调用方法来创建叶子
EXPORTING
file_item = file_item
cur_node = lr_cur_node
).
ENDLOOP.
lr_cur_node = cur_element->get_child_node( 'FOLDER_CONTENT' ).
* Create elements for folders
LOOP AT wd_this->mt_folder_struc INTO folder_item
WHERE value = parent_key.
create_folder_element(“调用方法来创建节点
EXPORTING
folder_item = folder_item
cur_node = lr_cur_node ).
ENDLOOP.
Endmethod.
创建叶子(参数为当前节点和叶子表):
参数
method CREATE_FILE_ELEMENT .
"显示叶子节点
DATA: lr_cur_element TYPE REF TO if_wd_context_element.
lr_cur_element = cur_node->create_element( ).
lr_cur_element->set_attribute( name = 'TEXT' value = file_item-name ).
cur_node->bind_element( new_item = lr_cur_element set_initial_elements
= abap_false ).
Endmethod.
创建节点(参数为根节点和节点表)
method CREATE_FOLDER_ELEMENT .
data: lr_cur_element type ref to if_wd_context_element.
lr_cur_element = cur_node->create_element( ).
lr_cur_element->set_attribute( name = 'TEXT' value = folder_item-name
).
cur_node->bind_element( new_item = lr_cur_element
set_initial_elements = abap_false ).
Endmethod.
在展示树的时候,需要对节点进行展开事件绑定到方法
参数是
method ONACTIONLOAD_CHILDREN .
data parent_key type string.
data children_loaded type wdy_boolean.
* check that the children of the same node weren't loaded a second
* time
context_element->get_attribute( exporting name = 'CHILDREN_LOADED'
importing value = children_loaded ).
check children_loaded = abap_false.
context_element->set_attribute( name = 'CHILDREN_LOADED' value =
abap_true ).
context_element->get_attribute( exporting name = 'TEXT' importing value
= parent_key ).
* create the child nodes
create_node(
exporting
cur_element = context_element
parent_key = parent_key ).
Endmethod.
对叶子进行点击事件绑定
参数:
method onactionselect .”获取的是当前点击的节点名(叶子不在此列)
data:
tree type ihttpnvp,
text type string,
text1 type string,
text2 type string,
children_loaded type boolean.
data node type ref to if_wd_context_node.
data element type ref to if_wd_context_element.
if context_element is initial.
exit.
else.
context_element->get_attribute(
exporting name = 'NAME'
importing value = text ).
node = context_element->get_node( )."获取当前点击节点的信息
data in type i value 0.
clear in.
loop at wd_this->mt_tree_struc into tree.
if tree-name = text.
in = in + 1.
endif.
endloop.
call method node->set_lead_selection_index
exporting
index = in.
data lo_el_context type ref to if_wd_context_element.
data ls_context type wd_this->element_context.
data lv_textofselectionnode2 type wd_this->element_context-textofselectionnode2.
lo_el_context = wd_context->get_element( ).
lv_textofselectionnode2 = text.
lo_el_context->set_attribute(
name = `TEXTOFSELECTIONNODE2`
value = lv_textofselectionnode2 ).
if text = '计划进度管理'.
exit.
else.
element = node->get_parent_element( )."获取单击节点的父节点名
element->get_attribute("获取单击节点父节点的名
exporting name = 'NAME'
importing value = text1 ).
wd_context->set_attribute(
exporting
name = 'TEXTOFSELECTEDNODE'
value = text1 ).
endif.
endif.
Endmethod.
给树上加节点和叶子:
method onactionaddelement .
data: lo_element type ref to if_wd_context_element,
lo_node type ref to if_wd_context_node,
file type ihttpnvp.
"获取当前节点
data lo_el_context type ref to if_wd_context_element.
data ls_context type wd_this->element_context.
data lv_textofselectionnode2 type wd_this->element_context-textofselectionnode2.
lo_el_context = wd_context->get_element( ).
if lo_el_context is initial.
exit.
else.
lo_el_context->get_attribute(
exporting
name = `TEXTOFSELECTIONNODE2`
importing
value = lv_textofselectionnode2 ).
Endif.
“获取输入的叶子名
data lv_changenode type wd_this->element_context-changenode.
lo_el_context = wd_context->get_element( ).
if lo_el_context is initial.
exit.
else.
lo_el_context->get_attribute(
exporting
name = `CHANGENODE`
importing
value = lv_changenode ).
endif.
file-name = lv_changenode.
file-value = lv_textofselectionnode2.
append file to wd_this->mt_node_struc.
file-name = 'TEST'.
file-value = lv_textofselectionnode2.
append file to wd_this->mt_tree_struc.
lo_element = wd_context->get_element( ).
lo_node = wd_context->get_child_node( name = 'TREE' ).
lo_element = lo_node->create_element( ).
lo_node->bind_element( lo_element ).
lo_node->set_lead_selection( lo_element ).
lo_element->set_attribute(
exporting name = 'NAME' value = '计划进度管理' ).
create_node( exporting cur_element = lo_element parent_key = 'Drives' ).
endmethod.
浙公网安备 33010602011771号