SAP List Tree

效果

源代码

*&---------------------------------------------------------------------*
*& Modulpool SAPSIMPLE_TREE_CONTROL_DEMO *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------* INCLUDE TLIST_TREE_CONTROL_DEMOTOP.
INCLUDE TLIST_TREE_CONTROL_DEMOCL1.
INCLUDE TLIST_TREE_CONTROL_DEMOO01.
INCLUDE TLIST_TREE_CONTROL_DEMOI01.
INCLUDE TLIST_TREE_CONTROL_DEMOF01. START-OF-SELECTION.
* create the application object
* this object is needed to handle the ABAP Objects Events of
* Controls
CREATE OBJECT G_APPLICATION. SET SCREEN 100.
*&---------------------------------------------------------------------*
*& Include TLIST_TREE_CONTROL_DEMOTOP *
*& *
*&---------------------------------------------------------------------* REPORT SAPTLIST_TREE_CONTROL_DEMO MESSAGE-ID TREE_CONTROL_MSG. CLASS LCL_APPLICATION DEFINITION DEFERRED.
CLASS CL_GUI_CFW DEFINITION LOAD. * CAUTION: MTREEITM is the name of the item structure which must
* be defined by the programmer. DO NOT USE MTREEITM!
TYPES: ITEM_TABLE_TYPE LIKE STANDARD TABLE OF MTREEITM
WITH DEFAULT KEY. DATA: G_APPLICATION TYPE REF TO LCL_APPLICATION,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
G_TREE TYPE REF TO CL_GUI_LIST_TREE,
G_OK_CODE TYPE SY-UCOMM. * Fields on Dynpro 100
DATA: G_EVENT(30),
G_NODE_KEY TYPE TV_NODEKEY,
G_ITEM_NAME TYPE TV_ITMNAME. CONSTANTS:
BEGIN OF c_nodekey,
root TYPE tv_nodekey VALUE 'Root', "#EC NOTEXT
child1 TYPE tv_nodekey VALUE 'Child1', "#EC NOTEXT
child2 TYPE tv_nodekey VALUE 'Child2', "#EC NOTEXT
new1 TYPE tv_nodekey VALUE 'New1', "#EC NOTEXT
new2 TYPE tv_nodekey VALUE 'New2', "#EC NOTEXT
new3 TYPE tv_nodekey VALUE 'New3', "#EC NOTEXT
new4 TYPE tv_nodekey VALUE 'New4', "#EC NOTEXT
END OF c_nodekey. *** INCLUDE TLIST_TREE_CONTROL_DEMOTOP
*----------------------------------------------------------------------*
* INCLUDE TLIST_TREE_CONTROL_DEMOCL1 *
*----------------------------------------------------------------------* CLASS LCL_APPLICATION DEFINITION.
PUBLIC SECTION.
METHODS:
HANDLE_NODE_DOUBLE_CLICK
FOR EVENT NODE_DOUBLE_CLICK
OF CL_GUI_LIST_TREE
IMPORTING NODE_KEY,
HANDLE_EXPAND_NO_CHILDREN
FOR EVENT EXPAND_NO_CHILDREN
OF CL_GUI_LIST_TREE
IMPORTING NODE_KEY,
HANDLE_ITEM_DOUBLE_CLICK
FOR EVENT ITEM_DOUBLE_CLICK
OF CL_GUI_LIST_TREE
IMPORTING NODE_KEY ITEM_NAME,
HANDLE_BUTTON_CLICK
FOR EVENT BUTTON_CLICK
OF CL_GUI_LIST_TREE
IMPORTING NODE_KEY ITEM_NAME,
HANDLE_LINK_CLICK
FOR EVENT LINK_CLICK
OF CL_GUI_LIST_TREE
IMPORTING NODE_KEY ITEM_NAME,
HANDLE_CHECKBOX_CHANGE
FOR EVENT CHECKBOX_CHANGE
OF CL_GUI_LIST_TREE
IMPORTING NODE_KEY ITEM_NAME CHECKED.
ENDCLASS. "LCL_APPLICATION DEFINITION *----------------------------------------------------------------------*
* CLASS LCL_APPLICATION IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION IMPLEMENTATION. METHOD HANDLE_NODE_DOUBLE_CLICK.
" this method handles the node double click event of the tree
" control instance " show the key of the double clicked node in a dynpro field
G_EVENT = 'NODE_DOUBLE_CLICK'.
G_NODE_KEY = NODE_KEY.
clear g_item_name.
ENDMETHOD. "HANDLE_NODE_DOUBLE_CLICK METHOD HANDLE_ITEM_DOUBLE_CLICK.
" this method handles the item double click event of the tree
" control instance " show the key of the node and the name of the item
" of the double clicked item in a dynpro field
G_EVENT = 'ITEM_DOUBLE_CLICK'.
G_NODE_KEY = NODE_KEY.
G_ITEM_NAME = ITEM_NAME.
ENDMETHOD. "HANDLE_ITEM_DOUBLE_CLICK METHOD HANDLE_LINK_CLICK.
" this method handles the link click event of the tree
" control instance " show the key of the node and the name of the item
" of the clicked link in a dynpro field
G_EVENT = 'LINK_CLICK'.
G_NODE_KEY = NODE_KEY.
G_ITEM_NAME = ITEM_NAME.
ENDMETHOD. "HANDLE_LINK_CLICK METHOD HANDLE_BUTTON_CLICK.
" this method handles the button click event of the tree
" control instance " show the key of the node and the name of the item
" of the clicked button in a dynpro field
G_EVENT = 'BUTTON_CLICK'.
G_NODE_KEY = NODE_KEY.
G_ITEM_NAME = ITEM_NAME.
ENDMETHOD. "HANDLE_BUTTON_CLICK METHOD HANDLE_CHECKBOX_CHANGE.
" this method handles the checkbox_change event of the tree
" control instance " show the key of the node and the name of the item
" of the clicked checkbox in a dynpro field
G_EVENT = 'CHECKBOX_CHANGE'.
G_NODE_KEY = NODE_KEY.
G_ITEM_NAME = ITEM_NAME.
ENDMETHOD. "HANDLE_CHECKBOX_CHANGE METHOD HANDLE_EXPAND_NO_CHILDREN.
DATA: NODE_TABLE TYPE TREEV_NTAB,
NODE TYPE TREEV_NODE,
ITEM_TABLE TYPE ITEM_TABLE_TYPE,
ITEM TYPE MTREEITM. * show the key of the expanded node in a dynpro field
G_EVENT = 'EXPAND_NO_CHILDREN'.
G_NODE_KEY = NODE_KEY. IF node_key = c_nodekey-child2.
* add the children for node with key 'Child2'
* Node with key 'New3'
CLEAR NODE.
node-node_key = c_nodekey-new3.
node-relatkey = c_nodekey-child2.
NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.
APPEND NODE TO NODE_TABLE. * Node with key 'New4'
CLEAR NODE.
node-node_key = c_nodekey-new4.
node-relatkey = c_nodekey-child2.
NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.
APPEND NODE TO NODE_TABLE. * Items of node with key 'New3'
CLEAR ITEM.
item-node_key = c_nodekey-new3.
ITEM-ITEM_NAME = '1'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-LENGTH = 11.
ITEM-USEBGCOLOR = 'X'. "
ITEM-TEXT = 'SAPTROX1'.
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-new3.
ITEM-ITEM_NAME = '2'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.
ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.
item-text = 'Kommentar zu SAPTROX1'(001).
APPEND ITEM TO ITEM_TABLE. * Items of node with key 'New4'
CLEAR ITEM.
item-node_key = c_nodekey-new4.
ITEM-ITEM_NAME = '1'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-LENGTH = 11.
ITEM-USEBGCOLOR = 'X'. "
ITEM-TEXT = 'SAPTRIXTROX'.
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-new4.
ITEM-ITEM_NAME = '2'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.
ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.
item-text = 'Kommentar zu SAPTRIXTROX'(002).
APPEND ITEM TO ITEM_TABLE.
ENDIF. CALL METHOD G_TREE->ADD_NODES_AND_ITEMS
EXPORTING
NODE_TABLE = NODE_TABLE
ITEM_TABLE = ITEM_TABLE
ITEM_TABLE_STRUCTURE_NAME = 'MTREEITM'
EXCEPTIONS
FAILED = 1
CNTL_SYSTEM_ERROR = 3
ERROR_IN_TABLES = 4
DP_ERROR = 5
TABLE_STRUCTURE_NAME_NOT_FOUND = 6.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF.
ENDMETHOD. "HANDLE_EXPAND_NO_CHILDREN ENDCLASS. "LCL_APPLICATION IMPLEMENTATION
*-------------------------------------------------------------------
***INCLUDE list_tree_control_demoO01 .
*-------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Module PBO_0400 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PBO_100 OUTPUT.
SET PF-STATUS 'MAIN'.
IF G_TREE IS INITIAL.
" The Tree Control has not been created yet.
" Create a Tree Control and insert nodes into it.
PERFORM CREATE_AND_INIT_TREE.
ENDIF.
ENDMODULE. " PBO_0100 OUTPUT
*** INCLUDE list_tree_control_demoO01
*-------------------------------------------------------------------
***INCLUDE list_tree_control_demoI01 .
*-------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Module PAI_0400 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PAI_100 INPUT.
data: return_code type i.
* CL_GUI_CFW=>DISPATCH must be called if events are registered
* that trigger PAI
* this method calls the event handler method of an event
CALL METHOD CL_GUI_CFW=>DISPATCH
importing return_code = return_code.
if return_code <> cl_gui_cfw=>rc_noevent.
" a control event occured => exit PAI
clear g_ok_code.
exit.
endif. CASE G_OK_CODE.
WHEN 'BACK'. " Finish program
IF NOT G_CUSTOM_CONTAINER IS INITIAL.
" destroy tree container (detroys contained tree control, too)
CALL METHOD G_CUSTOM_CONTAINER->FREE
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF.
CLEAR G_CUSTOM_CONTAINER.
CLEAR G_TREE.
ENDIF.
LEAVE PROGRAM.
ENDCASE. * CAUTION: clear ok code!
CLEAR G_OK_CODE.
ENDMODULE. " PAI_0100 INPUT
*** INCLUDE list_tree_control_demoI01
*-------------------------------------------------------------------
***INCLUDE list_tree_control_demoF01 .
*------------------------------------------------------------------- *&---------------------------------------------------------------------*
*& Form CREATE_AND_INIT_TREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATE_AND_INIT_TREE.
DATA: NODE_TABLE TYPE TREEV_NTAB,
ITEM_TABLE TYPE ITEM_TABLE_TYPE,
EVENTS TYPE CNTL_SIMPLE_EVENTS,
event type cntl_simple_event. * create a container for the tree control
CREATE OBJECT G_CUSTOM_CONTAINER
EXPORTING " the container is linked to the custom control with the
" name 'TREE_CONTAINER' on the dynpro CONTAINER_NAME = 'TREE_CONTAINER'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF.
* create a list tree
CREATE OBJECT g_tree
EXPORTING
PARENT = G_CUSTOM_CONTAINER
NODE_SELECTION_MODE = CL_GUI_LIST_TREE=>NODE_SEL_MODE_SINGLE
ITEM_SELECTION = 'X'
WITH_HEADERS = ' '
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CREATE_ERROR = 2
FAILED = 3
ILLEGAL_NODE_SELECTION_MODE = 4
LIFETIME_ERROR = 5.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF. * define the events which will be passed to the backend
" node double click
event-eventid = CL_GUI_list_TREE=>EVENTID_NODE_DOUBLE_CLICK.
event-appl_event = 'X'. "
append event to events. " item double click
EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_ITEM_DOUBLE_CLICK.
event-appl_event = 'X'.
append event to events. " expand no children
EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_EXPAND_NO_CHILDREN.
event-appl_event = 'X'.
append event to events. " link click
EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_LINK_CLICK.
event-appl_event = 'X'.
append event to events. " button click
EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_BUTTON_CLICK.
event-appl_event = 'X'.
append event to events. " checkbox change
EVENT-EVENTID = CL_GUI_LIST_TREE=>EVENTID_CHECKBOX_CHANGE.
event-appl_event = 'X'.
append event to events. CALL METHOD G_TREE->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = EVENTS
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
ILLEGAL_EVENT_COMBINATION = 3.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF. * assign event handlers in the application class to each desired event
SET HANDLER G_APPLICATION->HANDLE_NODE_DOUBLE_CLICK FOR G_TREE.
SET HANDLER G_APPLICATION->HANDLE_ITEM_DOUBLE_CLICK FOR G_TREE.
SET HANDLER G_APPLICATION->HANDLE_EXPAND_NO_CHILDREN FOR G_TREE.
SET HANDLER G_APPLICATION->HANDLE_LINK_CLICK FOR G_TREE.
SET HANDLER G_APPLICATION->HANDLE_BUTTON_CLICK FOR G_TREE.
SET HANDLER G_APPLICATION->HANDLE_CHECKBOX_CHANGE FOR G_TREE. * add some nodes to the tree control
* NOTE: the tree control does not store data at the backend. If an
* application wants to access tree data later, it must store the
* tree data itself. PERFORM BUILD_NODE_AND_ITEM_TABLE USING NODE_TABLE ITEM_TABLE. CALL METHOD G_TREE->ADD_NODES_AND_ITEMS
EXPORTING
NODE_TABLE = NODE_TABLE
ITEM_TABLE = ITEM_TABLE
ITEM_TABLE_STRUCTURE_NAME = 'MTREEITM'
EXCEPTIONS
FAILED = 1
CNTL_SYSTEM_ERROR = 3
ERROR_IN_TABLES = 4
DP_ERROR = 5
TABLE_STRUCTURE_NAME_NOT_FOUND = 6.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF. ENDFORM. " CREATE_AND_INIT_TREE *&---------------------------------------------------------------------*
*& Form build_node_and_item_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------* FORM BUILD_NODE_AND_ITEM_TABLE
USING
NODE_TABLE TYPE TREEV_NTAB
ITEM_TABLE TYPE ITEM_TABLE_TYPE. DATA: NODE TYPE TREEV_NODE,
ITEM TYPE MTREEITM. * Build the node table. * Caution: The nodes are inserted into the tree according to the order
* in which they occur in the table. In consequence, a node must not
* must not occur in the node table before its parent node. * Node with key 'Root'
node-node_key = c_nodekey-root.
" Key of the node
CLEAR NODE-RELATKEY. " Special case: A root node has no parent
CLEAR NODE-RELATSHIP. " node. NODE-HIDDEN = ' '. " The node is visible,
NODE-DISABLED = ' '. " selectable,
NODE-ISFOLDER = 'X'. " a folder.
CLEAR NODE-N_IMAGE. " Folder-/ Leaf-Symbol in state "closed":
" use default.
CLEAR NODE-EXP_IMAGE. " Folder-/ Leaf-Symbol in state "open":
" use default
CLEAR NODE-EXPANDER. " see below.
" the width of the item is adjusted to its content (text)
APPEND NODE TO NODE_TABLE. * Node with key 'Child1'
CLEAR NODE.
node-node_key = c_nodekey-child1.
" Key of the node
" Node is inserted as child of the node with key 'Root'.
node-relatkey = c_nodekey-root.
NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.
NODE-ISFOLDER = 'X'.
APPEND NODE TO NODE_TABLE. * Node with key 'New1'
CLEAR NODE.
node-node_key = c_nodekey-new1.
node-relatkey = c_nodekey-child1.
NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.
APPEND NODE TO NODE_TABLE. * Node with key 'New2'
CLEAR NODE.
node-node_key = c_nodekey-new2.
node-relatkey = c_nodekey-child1.
NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.
APPEND NODE TO NODE_TABLE. * Node with key 'Child2'
CLEAR NODE.
node-node_key = c_nodekey-child2.
node-relatkey = c_nodekey-root.
NODE-RELATSHIP = CL_GUI_LIST_TREE=>RELAT_LAST_CHILD.
NODE-ISFOLDER = 'X'.
NODE-EXPANDER = 'X'. " The node is marked with a '+', although
" it has no children. When the user clicks on the
" + to open the node, the event expand_nc is
" fired. The programmerr can
" add the children of the
" node within the event handler of the expand_nc
" event (see callback handle_expand_nc).
APPEND NODE TO NODE_TABLE. * The items of the nodes: * Node with key 'Root'
CLEAR ITEM.
item-node_key = c_nodekey-root.
ITEM-ITEM_NAME = '1'. " Item with name '1'
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT. " Text Item
" the with of the item is adjusted to its content (text)
ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.
" use proportional font for the item
ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.
item-text = 'Objekte'(003).
APPEND ITEM TO ITEM_TABLE. * Node with key 'Child1'
CLEAR ITEM.
item-node_key = c_nodekey-child1.
ITEM-ITEM_NAME = '1'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.
ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.
item-text = 'Dynpros'(004).
APPEND ITEM TO ITEM_TABLE. * Node with key 'Child2'
CLEAR ITEM.
item-node_key = c_nodekey-child2.
ITEM-ITEM_NAME = '1'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.
ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.
item-text = 'Programme'(005).
APPEND ITEM TO ITEM_TABLE. * Items of node with key 'New1'
CLEAR ITEM.
item-node_key = c_nodekey-new1.
ITEM-ITEM_NAME = '1'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-LENGTH = 4. " the width of the item is 4 characters
ITEM-IGNOREIMAG = 'X'. " see documentation of Structure
" TREEV_ITEM
ITEM-USEBGCOLOR = 'X'. " item has light grey background
ITEM-T_IMAGE = '@01@'. " icon of the item
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-new1.
ITEM-ITEM_NAME = '2'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-LENGTH = 4.
ITEM-USEBGCOLOR = 'X'.
ITEM-TEXT = '0100'.
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-new1.
ITEM-ITEM_NAME = '3'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-LENGTH = 11.
ITEM-USEBGCOLOR = 'X'. "
ITEM-TEXT = 'MUELLER'.
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-new1.
ITEM-ITEM_NAME = '4'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.
ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.
item-text = 'Kommentar zu Dynpro 100'(006).
APPEND ITEM TO ITEM_TABLE. * Items of node with key 'New2'
CLEAR ITEM.
item-node_key = c_nodekey-new2.
ITEM-ITEM_NAME = '1'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-LENGTH = 4. " the width of the item is 2 characters
ITEM-IGNOREIMAG = 'X'. " see documentation of Structure
" TREEV_ITEM
ITEM-USEBGCOLOR = 'X'. " item has light grey background
ITEM-T_IMAGE = '@02@'. " icon of the item
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-new2.
ITEM-ITEM_NAME = '2'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-LENGTH = 4.
ITEM-USEBGCOLOR = 'X'.
ITEM-TEXT = '0200'.
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-new2.
ITEM-ITEM_NAME = '3'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-LENGTH = 11.
ITEM-USEBGCOLOR = 'X'. "
ITEM-TEXT = 'HARRYHIRSCH'.
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-new2.
ITEM-ITEM_NAME = '4'.
ITEM-CLASS = CL_GUI_LIST_TREE=>ITEM_CLASS_TEXT.
ITEM-ALIGNMENT = CL_GUI_LIST_TREE=>ALIGN_AUTO.
ITEM-FONT = CL_GUI_LIST_TREE=>ITEM_FONT_PROP.
item-text = 'Kommentar zu Dynpro 200'(007).
APPEND ITEM TO ITEM_TABLE. ENDFORM. " build_node_and_item_table *** INCLUDE tlist_tree_control_demoF01

*&---------------------------------------------------------------------*
*& Report RSDEMO_DRAG_DROP_EDIT_TREE *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------* REPORT rsdemo_drag_drop_edit_tree .
DATA ok_code TYPE sy-ucomm.
DATA node_itab LIKE node_str OCCURS 0.
DATA node LIKE node_str. DATA container TYPE REF TO cl_gui_custom_container.
DATA splitter TYPE REF TO cl_gui_easy_splitter_container.
DATA right TYPE REF TO cl_gui_container.
DATA left TYPE REF TO cl_gui_container. DATA editor TYPE REF TO cl_gui_textedit.
DATA tree TYPE REF TO cl_gui_simple_tree. DATA behaviour_left TYPE REF TO cl_dragdrop.
DATA behaviour_right TYPE REF TO cl_dragdrop. DATA handle_tree TYPE i. *---------------------------------------------------------------------*
* CLASS lcl_treeobject DEFINITION
*---------------------------------------------------------------------*
* Definition of Data Container *
*---------------------------------------------------------------------*
CLASS lcl_drag_object DEFINITION.
PUBLIC SECTION.
DATA text TYPE mtreesnode-text.
ENDCLASS. *---------------------------------------------------------------------*
* CLASS dragdrop_receiver DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_dragdrop_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
flavor_select FOR EVENT on_get_flavor OF cl_gui_textedit
IMPORTING index line pos flavors dragdrop_object,
left_drag FOR EVENT on_drag OF cl_gui_simple_tree
IMPORTING node_key drag_drop_object,
right_drop FOR EVENT ON_DROP OF cl_gui_textedit
IMPORTING index line pos dragdrop_object,
drop_complete FOR EVENT on_drop_complete OF cl_gui_simple_tree
IMPORTING node_key drag_drop_object. ENDCLASS. ************************************************************************ ************************************************************************ START-OF-SELECTION.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module START OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE start OUTPUT.
SET PF-STATUS 'BASE'.
IF container is initial.
CREATE OBJECT container
EXPORTING container_name = 'CONTAINER'.
CREATE OBJECT splitter
EXPORTING parent = container
orientation = 1.
left = splitter->top_left_container.
right = splitter->bottom_right_container.
CREATE OBJECT editor
EXPORTING parent = right.
CREATE OBJECT tree
EXPORTING parent = left
node_selection_mode = tree->node_sel_mode_single. * Definition of drag drop behaviour
CREATE OBJECT behaviour_left.
CALL METHOD behaviour_left->add
EXPORTING
flavor = 'Tree_move_to_Edit'
dragsrc = 'X'
droptarget = ' '
effect = cl_dragdrop=>copy.
CALL METHOD behaviour_left->add
EXPORTING
flavor = 'Tree_copy_to_Edit'
dragsrc = 'X'
droptarget = ' '
effect = cl_dragdrop=>copy. CALL METHOD behaviour_left->get_handle
IMPORTING handle = handle_tree. * Drag Drop behaviour of tree control nodes are defined in the node
* structure
PERFORM fill_tree.
CALL METHOD tree->add_nodes
EXPORTING node_table = node_itab
table_structure_name = 'NODE_STR'. CREATE OBJECT behaviour_right.
CALL METHOD behaviour_right->add
EXPORTING
flavor = 'Tree_move_to_Edit'
dragsrc = ' '
droptarget = 'X'
effect = cl_dragdrop=>copy.
CALL METHOD behaviour_right->add
EXPORTING
flavor = 'Tree_copy_to_Edit'
dragsrc = ' '
droptarget = 'X'
effect = cl_dragdrop=>copy.
CALL METHOD editor->set_dragdrop
EXPORTING dragdrop = behaviour_right. * registration of drag and drop events
DATA dragdrop TYPE REF TO lcl_dragdrop_receiver.
CREATE OBJECT dragdrop.
SET HANDLER dragdrop->flavor_select FOR editor.
SET HANDLER dragdrop->left_drag FOR tree.
SET HANDLER dragdrop->right_drop FOR editor.
set handler dragdrop->drop_complete for tree. CALL METHOD tree->expand_node
EXPORTING node_key = 'Root'. ENDIF.
ENDMODULE. " START OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit INPUT.
LEAVE PROGRAM.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Form fill_tree
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_tree.
DATA: node LIKE mtreesnode. * node table of the left tree
CLEAR node.
node-node_key = 'Root'.
node-isfolder = 'X'.
node-text = 'Texte'.
node-dragdropid = ' '.
APPEND node TO node_itab. CLEAR node.
node-node_key = 'Child1'.
node-relatkey = 'Root'.
node-relatship = cl_gui_simple_tree=>relat_last_child.
node-text = 'DragDrop Text 1'.
node-dragdropid = handle_tree. " handle of behaviour
APPEND node TO node_itab. CLEAR node.
node-node_key = 'Child2'.
node-relatkey = 'Root'.
node-relatship = cl_gui_simple_tree=>relat_last_child.
node-text = 'DragDrop Text 2'.
node-dragdropid = handle_tree. " handle of behaviour
APPEND node TO node_itab. ENDFORM. " fill_tree
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CALL METHOD cl_gui_cfw=>dispatch.
ENDMODULE. " USER_COMMAND_0100 INPUT *---------------------------------------------------------------------*
* CLASS DRAGDROP_RECEIVER IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_dragdrop_receiver IMPLEMENTATION.
METHOD flavor_select.
IF line > 5.
SEARCH flavors FOR 'Tree_move_to_Edit'.
IF sy-subrc = 0.
CALL METHOD dragDROP_OBJECT->SET_FLAVOR
EXPORTING newflavor = 'Tree_move_to_Edit'.
ELSE.
CALL METHOD dragdrop_object->abort.
ENDIF.
ELSE.
SEARCH flavors FOR 'Tree_copy_to_Edit'.
IF sy-subrc = 0.
CALL METHOD dragdrop_object->set_flavor
EXPORTING newflavor = 'Tree_copy_to_Edit'.
ELSE.
CALL METHOD dragdrop_object->abort.
ENDIF.
ENDIF. ENDMETHOD.
METHOD left_drag.
DATA drag_object TYPE REF TO lcl_drag_object. READ TABLE node_itab WITH KEY node_key = node_key
INTO node. CREATE OBJECT drag_object.
drag_object->text = node-text.
drag_drop_object->object = drag_object.
ENDMETHOD. METHOD right_drop.
DATA textline(256).
DATA text_table LIKE STANDARD TABLE OF textline.
DATA drag_object TYPE REF TO lcl_drag_object.
CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
drag_object ?= dragdrop_object->object.
ENDCATCH.
IF sy-subrc = 1.
" data object has unexpected class
" => cancel Drag & Drop operation
CALL METHOD dragdrop_object->abort.
EXIT.
ENDIF.
CALL METHOD editor->get_text_as_stream
IMPORTING text = text_table.
* Synchronize Automation Queue after Get Methods
CALL METHOD cl_gui_cfw=>flush.
textline = drag_object->text.
* Insert text in internal table
INSERT textline INTO text_table INDEX 1.
* Send modified table to frontend
CALL METHOD editor->set_text_as_stream
EXPORTING text = text_table
EXCEPTIONS error_dp = 1
error_dp_create = 2.
ENDMETHOD.
METHOD drop_complete.
IF drag_drop_object->flavor = 'Tree_move_to_Edit'.
CALL METHOD tree->delete_node
EXPORTING node_key = node_key.
delete node_itab where node_key = node_key.
ENDIF.
ENDMETHOD.
ENDCLASS.

Column Tree

效果

源代码

INCLUDE COLUMN_TREE_CONTROL_DEMOTOP.
*INCLUDE COLUMN_TREE_CONTROL_DEMOTOP.
INCLUDE COLUMN_TREE_CONTROL_DEMOCL1.
*INCLUDE COLUMN_TREE_CONTROL_DEMOCL1.
INCLUDE COLUMN_TREE_CONTROL_DEMOO01.
*INCLUDE COLUMN_TREE_CONTROL_DEMOO01.
INCLUDE COLUMN_TREE_CONTROL_DEMOI01.
*INCLUDE COLUMN_TREE_CONTROL_DEMOI01.
INCLUDE COLUMN_TREE_CONTROL_DEMOF01.
*INCLUDE COLUMN_TREE_CONTROL_DEMOF01. START-OF-SELECTION.
* create the application object
* this object is needed to handle the ABAP Objects Events of
* Controls
CREATE OBJECT G_APPLICATION. SET SCREEN 100.
*&---------------------------------------------------------------------*
*& Include COLUMN_TREE_CONTROL_DEMOTOP *
*& *
*&---------------------------------------------------------------------* REPORT SAPCOLUMN_TREE_CONTROL_DEMO MESSAGE-ID TREE_CONTROL_MSG. CLASS LCL_APPLICATION DEFINITION DEFERRED.
CLASS CL_GUI_CFW DEFINITION LOAD. * CAUTION: MTREEITM is the name of the item structure which must
* be defined by the programmer. DO NOT USE MTREEITM!
TYPES: ITEM_TABLE_TYPE LIKE STANDARD TABLE OF MTREEITM
WITH DEFAULT KEY. DATA: G_APPLICATION TYPE REF TO LCL_APPLICATION,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
G_TREE TYPE REF TO CL_GUI_COLUMN_TREE,
G_OK_CODE TYPE SY-UCOMM. * Fields on Dynpro 100
DATA: G_EVENT(30),
G_NODE_KEY TYPE TV_NODEKEY,
G_ITEM_NAME TYPE TV_ITMNAME,
G_HEADER_NAME TYPE TV_HDRNAME. CONSTANTS:
BEGIN OF c_nodekey,
root type tv_nodekey value 'Root', "#EC NOTEXT
child1 TYPE tv_nodekey VALUE 'Child1', "#EC NOTEXT
* child2 type tv_nodekey value 'Child2', "#EC NOTEXT
new1 TYPE tv_nodekey VALUE 'New1', "#EC NOTEXT
new2 TYPE tv_nodekey VALUE 'New2', "#EC NOTEXT
* new3 type tv_nodekey value 'New3', "#EC NOTEXT
* new4 type tv_nodekey value 'New4', "#EC NOTEXT
END OF c_nodekey,
BEGIN OF c_column,
column1 TYPE tv_itmname VALUE 'Column1', "#EC NOTEXT
column2 TYPE tv_itmname VALUE 'Column2', "#EC NOTEXT
column3 TYPE tv_itmname VALUE 'Column3', "#EC NOTEXT
END OF c_column. *** INCLUDE COLUMN_TREE_CONTROL_DEMOTOP
*----------------------------------------------------------------------*
* INCLUDE COLUMN_TREE_CONTROL_DEMOCL1 *
*----------------------------------------------------------------------* CLASS LCL_APPLICATION DEFINITION. PUBLIC SECTION.
METHODS:
HANDLE_NODE_DOUBLE_CLICK
FOR EVENT NODE_DOUBLE_CLICK
OF CL_GUI_COLUMN_TREE
IMPORTING NODE_KEY,
HANDLE_HEADER_CLICK
FOR EVENT HEADER_CLICK
OF CL_GUI_COLUMN_TREE
IMPORTING HEADER_NAME,
HANDLE_EXPAND_NO_CHILDREN
FOR EVENT EXPAND_NO_CHILDREN
OF CL_GUI_COLUMN_TREE
IMPORTING NODE_KEY,
HANDLE_ITEM_DOUBLE_CLICK
FOR EVENT ITEM_DOUBLE_CLICK
OF CL_GUI_COLUMN_TREE
IMPORTING NODE_KEY ITEM_NAME,
HANDLE_BUTTON_CLICK
FOR EVENT BUTTON_CLICK
OF CL_GUI_COLUMN_TREE
IMPORTING NODE_KEY ITEM_NAME,
HANDLE_LINK_CLICK
FOR EVENT LINK_CLICK
OF CL_GUI_COLUMN_TREE
IMPORTING NODE_KEY ITEM_NAME,
HANDLE_CHECKBOX_CHANGE
FOR EVENT CHECKBOX_CHANGE
OF CL_GUI_COLUMN_TREE
IMPORTING NODE_KEY ITEM_NAME CHECKED.
ENDCLASS. "LCL_APPLICATION DEFINITION *----------------------------------------------------------------------*
* CLASS LCL_APPLICATION IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_APPLICATION IMPLEMENTATION. METHOD HANDLE_NODE_DOUBLE_CLICK.
" this method handles the node double click event of the tree
" control instance " show the key of the double clicked node in a dynpro field
G_EVENT = 'NODE_DOUBLE_CLICK'.
G_NODE_KEY = NODE_KEY.
CLEAR: G_ITEM_NAME, G_HEADER_NAME.
ENDMETHOD. "HANDLE_NODE_DOUBLE_CLICK METHOD HANDLE_HEADER_CLICK.
" this method handles header click event of the tree
" control instance " show the name of the clicked header in a dynpro field
G_EVENT = 'HEADER_CLICK'.
G_HEADER_NAME = HEADER_NAME.
CLEAR: G_NODE_KEY, G_ITEM_NAME.
ENDMETHOD. "HANDLE_HEADER_CLICK METHOD HANDLE_ITEM_DOUBLE_CLICK.
" this method handles the item double click event of the tree
" control instance " show the key of the node and the name of the item
" of the double clicked item in a dynpro field
G_EVENT = 'ITEM_DOUBLE_CLICK'.
G_NODE_KEY = NODE_KEY.
G_ITEM_NAME = ITEM_NAME.
CLEAR G_HEADER_NAME.
ENDMETHOD. "HANDLE_ITEM_DOUBLE_CLICK METHOD HANDLE_LINK_CLICK.
" this method handles the link click event of the tree
" control instance " show the key of the node and the name of the item
" of the clicked link in a dynpro field
G_EVENT = 'LINK_CLICK'.
G_NODE_KEY = NODE_KEY.
G_ITEM_NAME = ITEM_NAME.
CLEAR G_HEADER_NAME.
ENDMETHOD. "HANDLE_LINK_CLICK METHOD HANDLE_BUTTON_CLICK.
" this method handles the button click event of the tree
" control instance " show the key of the node and the name of the item
" of the clicked button in a dynpro field
G_EVENT = 'BUTTON_CLICK'.
G_NODE_KEY = NODE_KEY.
G_ITEM_NAME = ITEM_NAME.
CLEAR G_HEADER_NAME.
ENDMETHOD. "HANDLE_BUTTON_CLICK METHOD HANDLE_CHECKBOX_CHANGE.
" this method handles the checkbox_change event of the tree
" control instance " show the key of the node and the name of the item
" of the clicked checkbox in a dynpro field
G_EVENT = 'CHECKBOX_CHANGE'.
G_NODE_KEY = NODE_KEY.
G_ITEM_NAME = ITEM_NAME.
CLEAR G_HEADER_NAME.
ENDMETHOD. "HANDLE_CHECKBOX_CHANGE METHOD HANDLE_EXPAND_NO_CHILDREN.
DATA: NODE_TABLE TYPE TREEV_NTAB,
NODE TYPE TREEV_NODE,
ITEM_TABLE TYPE ITEM_TABLE_TYPE,
ITEM TYPE MTREEITM. * show the key of the expanded node in a dynpro field
G_EVENT = 'EXPAND_NO_CHILDREN'.
G_NODE_KEY = NODE_KEY.
CLEAR: G_ITEM_NAME, G_HEADER_NAME. IF node_key = c_nodekey-child1.
* add two nodes * Node with key 'New1'
CLEAR NODE.
node-node_key = c_nodekey-New1.
node-relatkey = c_nodekey-child1.
NODE-RELATSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD.
APPEND NODE TO NODE_TABLE. * Node with key 'New2'
CLEAR NODE.
node-node_key = c_nodekey-New2.
node-relatkey = c_nodekey-child1.
NODE-RELATSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD.
NODE-N_IMAGE = '@10@'.
APPEND NODE TO NODE_TABLE. * Items of node with key 'New1'
CLEAR ITEM.
item-node_key = c_nodekey-New1.
item-item_name = c_column-Column1.
item-class = cl_gui_column_tree=>item_class_text.
item-text = 'New1 Col. 1'(n11).
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-New1.
item-item_name = c_column-Column2.
ITEM-CLASS = CL_GUI_COLUMN_TREE=>ITEM_CLASS_LINK.
item-t_image = '@3C@'.
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-New1.
item-item_name = c_column-Column3.
item-class = cl_gui_column_tree=>item_class_text.
item-text = 'New1 Col. 3'(n13).
APPEND ITEM TO ITEM_TABLE. * Items of node with key 'New2'
CLEAR ITEM.
item-node_key = c_nodekey-New2.
item-item_name = c_column-Column1.
item-class = cl_gui_column_tree=>item_class_text.
item-text = 'New2 Col. 1'(n21).
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-New2.
item-item_name = c_column-Column2.
item-class = cl_gui_column_tree=>item_class_text.
item-text = 'New2 Col. 2'(n22).
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-New2.
item-item_name = c_column-Column3.
item-class = cl_gui_column_tree=>item_class_text.
item-text = 'New2 Col. 3'(n23).
APPEND ITEM TO ITEM_TABLE. CALL METHOD G_TREE->ADD_NODES_AND_ITEMS
EXPORTING
NODE_TABLE = NODE_TABLE
ITEM_TABLE = ITEM_TABLE
ITEM_TABLE_STRUCTURE_NAME = 'MTREEITM'
EXCEPTIONS
FAILED = 1
CNTL_SYSTEM_ERROR = 3
ERROR_IN_TABLES = 4
DP_ERROR = 5
TABLE_STRUCTURE_NAME_NOT_FOUND = 6.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF.
endif.
ENDMETHOD. "HANDLE_EXPAND_NO_CHILDREN ENDCLASS. "LCL_APPLICATION IMPLEMENTATION
*-------------------------------------------------------------------
***INCLUDE column_tree_control_demoO01 .
*-------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Module PBO_0400 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PBO_100 OUTPUT.
SET PF-STATUS 'MAIN'.
IF G_TREE IS INITIAL.
" The Tree Control has not been created yet.
" Create a Tree Control and insert nodes into it.
PERFORM CREATE_AND_INIT_TREE.
ENDIF.
ENDMODULE. " PBO_0100 OUTPUT
*** INCLUDE column_tree_control_demoO01
*-------------------------------------------------------------------
***INCLUDE column_tree_control_demoI01 .
*-------------------------------------------------------------------
*&---------------------------------------------------------------------*
*& Module PAI_0400 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE PAI_100 INPUT.
data: return_code type i.
* CL_GUI_CFW=>DISPATCH must be called if events are registered
* that trigger PAI
* this method calls the event handler method of an event
CALL METHOD CL_GUI_CFW=>DISPATCH
importing return_code = return_code.
if return_code <> cl_gui_cfw=>rc_noevent.
" a control event occured => exit PAI
clear g_ok_code.
exit.
endif. CASE G_OK_CODE.
WHEN 'BACK'. " Finish program
IF NOT G_CUSTOM_CONTAINER IS INITIAL.
" destroy tree container (detroys contained tree control, too)
CALL METHOD G_CUSTOM_CONTAINER->FREE
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CNTL_ERROR = 2.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF.
CLEAR G_CUSTOM_CONTAINER.
CLEAR G_TREE.
ENDIF.
LEAVE PROGRAM.
ENDCASE. * CAUTION: clear ok code!
CLEAR G_OK_CODE.
ENDMODULE. " PAI_0100 INPUT
*** INCLUDE column_tree_control_demoI01
*-------------------------------------------------------------------
***INCLUDE column_tree_control_demoF01 .
*------------------------------------------------------------------- *&---------------------------------------------------------------------*
*& Form CREATE_AND_INIT_TREE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREATE_AND_INIT_TREE.
DATA: NODE_TABLE TYPE TREEV_NTAB,
ITEM_TABLE TYPE ITEM_TABLE_TYPE,
event type cntl_simple_event,
EVENTS TYPE CNTL_SIMPLE_EVENTS,
HIERARCHY_HEADER TYPE TREEV_HHDR. * create a container for the tree control
CREATE OBJECT G_CUSTOM_CONTAINER
EXPORTING
" the container is linked to the custom control with the
" name 'TREE_CONTAINER' on the dynpro
CONTAINER_NAME = 'TREE_CONTAINER'
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
CREATE_ERROR = 3
LIFETIME_ERROR = 4
LIFETIME_DYNPRO_DYNPRO_LINK = 5.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF.
* setup the hierarchy header
hierarchy_header-heading = 'Hierarchy Header'(roo).
" heading
HIERARCHY_HEADER-WIDTH = 30. " width: 30 characters * create a tree control * After construction, the control contains one column in the
* hierarchy area. The name of this column
* is defined via the constructor parameter HIERACHY_COLUMN_NAME.
CREATE OBJECT G_TREE
EXPORTING
PARENT = G_CUSTOM_CONTAINER
NODE_SELECTION_MODE = CL_GUI_COLUMN_TREE=>NODE_SEL_MODE_SINGLE
ITEM_SELECTION = 'X'
hierarchy_column_name = c_column-Column1
HIERARCHY_HEADER = HIERARCHY_HEADER
EXCEPTIONS
CNTL_SYSTEM_ERROR = 1
CREATE_ERROR = 2
FAILED = 3
ILLEGAL_NODE_SELECTION_MODE = 4
ILLEGAL_COLUMN_NAME = 5
LIFETIME_ERROR = 6.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF. * define the events which will be passed to the backend
" node double click
event-eventid = CL_GUI_COLUMN_TREE=>EVENTID_NODE_DOUBLE_CLICK.
event-appl_event = 'X'. " process PAI if event occurs
append event to events. " item double click
event-eventid = CL_GUI_COLUMN_TREE=>EVENTID_ITEM_DOUBLE_CLICK.
event-appl_event = 'X'.
append event to events. " expand no children
event-eventid = CL_GUI_COLUMN_TREE=>EVENTID_EXPAND_NO_CHILDREN.
event-appl_event = 'X'.
append event to events. " link click
event-eventid = CL_GUI_COLUMN_TREE=>EVENTID_LINK_CLICK.
event-appl_event = 'X'.
append event to events. " button click
event-eventid = CL_GUI_COLUMN_TREE=>EVENTID_button_click.
event-appl_event = 'X'.
append event to events. " checkbox change
event-eventid = CL_GUI_COLUMN_TREE=>EVENTID_checkbox_change.
event-appl_event = 'X'.
append event to events. " header click
event-eventid = CL_GUI_COLUMN_TREE=>EVENTID_header_click.
event-appl_event = 'X'.
append event to events. CALL METHOD G_TREE->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = EVENTS
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
ILLEGAL_EVENT_COMBINATION = 3.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF. * assign event handlers in the application class to each desired event
SET HANDLER G_APPLICATION->HANDLE_NODE_DOUBLE_CLICK FOR G_TREE.
SET HANDLER G_APPLICATION->HANDLE_ITEM_DOUBLE_CLICK FOR G_TREE.
SET HANDLER G_APPLICATION->HANDLE_EXPAND_NO_CHILDREN FOR G_TREE.
SET HANDLER G_APPLICATION->HANDLE_LINK_CLICK FOR G_TREE.
SET HANDLER G_APPLICATION->HANDLE_BUTTON_CLICK FOR G_TREE.
SET HANDLER G_APPLICATION->HANDLE_CHECKBOX_CHANGE FOR G_TREE.
SET HANDLER G_APPLICATION->HANDLE_HEADER_CLICK FOR G_TREE. * insert two additional columns * Column2
CALL METHOD G_TREE->ADD_COLUMN
EXPORTING
name = c_column-Column2
width = 21
header_text = 'Column2'(co2)
EXCEPTIONS
COLUMN_EXISTS = 1
ILLEGAL_COLUMN_NAME = 2
TOO_MANY_COLUMNS = 3
ILLEGAL_ALIGNMENT = 4
DIFFERENT_COLUMN_TYPES = 5
CNTL_SYSTEM_ERROR = 6
FAILED = 7
PREDECESSOR_COLUMN_NOT_FOUND = 8.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF.
* Column3
CALL METHOD G_TREE->ADD_COLUMN
EXPORTING
name = c_column-Column3
width = 21
alignment = cl_gui_column_tree=>align_right
header_text = 'Column3'(co3)
EXCEPTIONS
COLUMN_EXISTS = 1
ILLEGAL_COLUMN_NAME = 2
TOO_MANY_COLUMNS = 3
ILLEGAL_ALIGNMENT = 4
DIFFERENT_COLUMN_TYPES = 5
CNTL_SYSTEM_ERROR = 6
FAILED = 7
PREDECESSOR_COLUMN_NOT_FOUND = 8.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF. * add some nodes to the tree control
* NOTE: the tree control does not store data at the backend. If an
* application wants to access tree data later, it must store the
* tree data itself. PERFORM BUILD_NODE_AND_ITEM_TABLE USING NODE_TABLE ITEM_TABLE. CALL METHOD G_TREE->ADD_NODES_AND_ITEMS
EXPORTING
NODE_TABLE = NODE_TABLE
ITEM_TABLE = ITEM_TABLE
ITEM_TABLE_STRUCTURE_NAME = 'MTREEITM'
EXCEPTIONS
FAILED = 1
CNTL_SYSTEM_ERROR = 3
ERROR_IN_TABLES = 4
DP_ERROR = 5
TABLE_STRUCTURE_NAME_NOT_FOUND = 6.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF. * expand the node with key 'Root'
CALL METHOD G_TREE->EXPAND_NODE
EXPORTING
node_key = c_nodekey-Root
EXCEPTIONS
FAILED = 1
ILLEGAL_LEVEL_COUNT = 2
CNTL_SYSTEM_ERROR = 3
NODE_NOT_FOUND = 4
CANNOT_EXPAND_LEAF = 5.
IF SY-SUBRC <> 0.
MESSAGE A000.
ENDIF. ENDFORM. " CREATE_AND_INIT_TREE *&---------------------------------------------------------------------*
*& Form build_node_and_item_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------* FORM BUILD_NODE_AND_ITEM_TABLE
USING
NODE_TABLE TYPE TREEV_NTAB
ITEM_TABLE TYPE ITEM_TABLE_TYPE. DATA: NODE TYPE TREEV_NODE,
ITEM TYPE MTREEITM. * Build the node table. * Caution: The nodes are inserted into the tree according to the order
* in which they occur in the table. In consequence, a node must not
* must not occur in the node table before its parent node. * Node with key 'Root'
node-node_key = c_nodekey-Root.
" Key of the node
CLEAR NODE-RELATKEY. " Special case: A root node has no parent
CLEAR NODE-RELATSHIP. " node. NODE-HIDDEN = ' '. " The node is visible,
NODE-DISABLED = ' '. " selectable,
NODE-ISFOLDER = 'X'. " a folder.
CLEAR NODE-N_IMAGE. " Folder-/ Leaf-Symbol in state "closed":
" use default.
CLEAR NODE-EXP_IMAGE. " Folder-/ Leaf-Symbol in state "open":
" use default
CLEAR NODE-EXPANDER. " see below.
APPEND NODE TO NODE_TABLE. * Node with key 'Child1'
node-node_key = c_nodekey-child1.
" Key of the node
" Node is inserted as child of the node with key 'Root'.
node-relatkey = c_nodekey-Root.
NODE-RELATSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD. NODE-HIDDEN = ' '.
NODE-DISABLED = ' '.
NODE-ISFOLDER = 'X'.
CLEAR NODE-N_IMAGE.
CLEAR NODE-EXP_IMAGE.
NODE-EXPANDER = 'X'. " The node is marked with a '+', although
" it has no children. When the user clicks on the
" + to open the node, the event expand_nc is
" fired. The programmerr can
" add the children of the
" node within the event handler of the expand_nc
" event (see callback handle_expand_nc).
APPEND NODE TO NODE_TABLE. * The items of the nodes: * Node with key 'Root'
CLEAR ITEM.
item-node_key = c_nodekey-Root.
item-item_name = c_column-Column1. " Item of Column 'Column1'
item-class = cl_gui_column_tree=>item_class_text. " Text Item
item-text = 'Root Col. 1'(ro1).
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-Root.
item-item_name = c_column-Column2. " Item of Column 'Column2'
item-class = cl_gui_column_tree=>item_class_text.
item-text = 'Root Col. 2'(ro2).
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-Root.
item-item_name = c_column-Column3. " Item of Column 'Column3'
" Item is a link (click on link fires event LINK_CLICK)
item-class = cl_gui_column_tree=>item_class_link.
item-text = 'Root Col. 3'(ro3).
APPEND ITEM TO ITEM_TABLE. * Node with key 'Child1'
CLEAR ITEM.
item-node_key = c_nodekey-Child1.
item-item_name = c_column-Column1.
item-class = cl_gui_column_tree=>item_class_text.
item-text = 'Child1 Col. 1'(c11).
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-Child1.
item-item_name = c_column-Column2. "
item-class = cl_gui_column_tree=>item_class_button. " Item is a button
item-text = 'Child1 Col. 2'(c12).
ITEM-T_IMAGE = '@0B@'.
APPEND ITEM TO ITEM_TABLE. CLEAR ITEM.
item-node_key = c_nodekey-Child1.
item-item_name = c_column-Column3.
" Item is a checkbox
ITEM-CLASS = CL_GUI_COLUMN_TREE=>ITEM_CLASS_CHECKBOX.
ITEM-EDITABLE = 'X'.
item-text = 'Child1 Col. 3'(c13).
ITEM-T_IMAGE = '@0C@'.
APPEND ITEM TO ITEM_TABLE. ENDFORM. " build_node_and_item_table *** INCLUDE column_tree_control_demoF01

可拖拽的树形结构

效果

源代码

*&---------------------------------------------------------------------*
*& Report RSDEMO_DRAG_DROP_EDIT_TREE *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------* REPORT rsdemo_drag_drop_edit_tree .
DATA ok_code TYPE sy-ucomm.
DATA node_itab_left LIKE node_str OCCURS 0.
DATA node_itab_right LIKE node_str OCCURS 0.
DATA node LIKE node_str. DATA container TYPE REF TO cl_gui_custom_container.
DATA splitter TYPE REF TO cl_gui_easy_splitter_container.
DATA right TYPE REF TO cl_gui_container.
DATA left TYPE REF TO cl_gui_container. DATA tree_right TYPE REF TO cl_gui_simple_tree.
DATA tree_left TYPE REF TO cl_gui_simple_tree. DATA behaviour_left TYPE REF TO cl_dragdrop.
DATA behaviour_right TYPE REF TO cl_dragdrop. DATA handle_tree_left TYPE i.
DATA handle_tree_right TYPE i. *---------------------------------------------------------------------*
* CLASS lcl_treeobject DEFINITION
*---------------------------------------------------------------------*
* Definition of Data Container *
*---------------------------------------------------------------------*
CLASS lcl_drag_object DEFINITION.
PUBLIC SECTION.
DATA text TYPE STANDARD TABLE OF mtreesnode-text.
ENDCLASS. *---------------------------------------------------------------------*
* CLASS dragdrop_receiver DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_dragdrop_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
flavor_select FOR EVENT on_drop_get_flavor OF cl_gui_simple_tree
IMPORTING node_key flavors drag_drop_object,
left_drag FOR EVENT on_drag_multiple OF cl_gui_simple_tree
IMPORTING node_key_table drag_drop_object,
right_drop FOR EVENT on_drop OF cl_gui_simple_tree
IMPORTING node_key drag_drop_object,
drop_complete FOR EVENT on_drop_complete_multiple OF
cl_gui_simple_tree
IMPORTING node_key_table drag_drop_object. ENDCLASS. ************************************************************************ ************************************************************************ START-OF-SELECTION.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module START OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE start OUTPUT.
SET PF-STATUS 'BASE'.
IF container is initial.
CREATE OBJECT container
EXPORTING container_name = 'CONTAINER'.
CREATE OBJECT splitter
EXPORTING parent = container
orientation = 1.
left = splitter->top_left_container.
right = splitter->bottom_right_container.
CREATE OBJECT tree_right
EXPORTING parent = right
node_selection_mode = tree_right->node_sel_mode_multiple.
CREATE OBJECT tree_left
EXPORTING parent = left
node_selection_mode = tree_left->node_sel_mode_multiple. * Definition of drag drop behaviour
CREATE OBJECT behaviour_left.
CALL METHOD behaviour_left->add
EXPORTING
##NO_TEXT
flavor = 'Tree_move'
dragsrc = 'X'
droptarget = ' '
effect = cl_dragdrop=>copy.
CALL METHOD behaviour_left->add
EXPORTING
##NO_TEXT
flavor = 'Tree_copy'
dragsrc = 'X'
droptarget = ' '
effect = cl_dragdrop=>copy. CALL METHOD behaviour_left->get_handle
IMPORTING handle = handle_tree_left. * Drag Drop behaviour of tree control nodes are defined in the node
* structure
PERFORM fill_tree CHANGING handle_tree_left node_itab_left.
CALL METHOD tree_left->add_nodes
EXPORTING node_table = node_itab_left
table_structure_name = 'NODE_STR'. CREATE OBJECT behaviour_right. CALL METHOD behaviour_right->add
EXPORTING
##NO_TEXT
flavor = 'Tree_copy'
dragsrc = ' '
droptarget = 'X'
effect = cl_dragdrop=>copy.
CALL METHOD behaviour_right->add
EXPORTING
##NO_TEXT
flavor = 'Tree_move'
dragsrc = ' '
droptarget = 'X'
effect = cl_dragdrop=>copy.
CALL METHOD behaviour_right->get_handle
IMPORTING handle = handle_tree_right. PERFORM fill_tree CHANGING handle_tree_right node_itab_right.
CALL METHOD tree_right->add_nodes
EXPORTING node_table = node_itab_right
table_structure_name = 'NODE_STR'. * registration of drag and drop events
DATA dragdrop TYPE REF TO lcl_dragdrop_receiver.
CREATE OBJECT dragdrop.
SET HANDLER dragdrop->flavor_select FOR tree_right.
SET HANDLER dragdrop->left_drag FOR tree_left.
SET HANDLER dragdrop->right_drop FOR tree_right.
SET HANDLER dragdrop->drop_complete FOR tree_left. CALL METHOD tree_left->expand_node
##NO_TEXT
EXPORTING node_key = 'Root'.
CALL METHOD tree_right->expand_node
##NO_TEXT
EXPORTING node_key = 'Root'. ENDIF.
ENDMODULE. " START OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit INPUT.
LEAVE PROGRAM.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Form fill_tree
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_tree CHANGING handle_tree TYPE i
node_itab LIKE node_itab_left.
DATA: node LIKE mtreesnode. * node table of the left tree
CLEAR node.
##NO_TEXT
node-node_key = 'Root'.
node-isfolder = 'X'.
##NO_TEXT
node-text = 'Texte'.
node-dragdropid = ' '.
APPEND node TO node_itab. CLEAR node.
##NO_TEXT
node-node_key = 'Child1'.
##NO_TEXT
node-relatkey = 'Root'.
node-isfolder = 'X'.
node-relatship = cl_gui_simple_tree=>relat_last_child.
##NO_TEXT
node-text = 'DragDrop Text 1'.
node-dragdropid = handle_tree. " handle of behaviour
APPEND node TO node_itab. CLEAR node.
##NO_TEXT
node-node_key = 'Child2'.
##NO_TEXT
node-relatkey = 'Root'.
node-isfolder = 'X'.
node-relatship = cl_gui_simple_tree=>relat_last_child.
##NO_TEXT
node-text = 'DragDrop Text 2'.
node-dragdropid = handle_tree. " handle of behaviour
APPEND node TO node_itab. ENDFORM. " fill_tree
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CALL METHOD cl_gui_cfw=>dispatch.
ENDMODULE. " USER_COMMAND_0100 INPUT *---------------------------------------------------------------------*
* CLASS DRAGDROP_RECEIVER IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_dragdrop_receiver IMPLEMENTATION.
METHOD flavor_select.
##NO_TEXT
IF node_key <> 'Root'.
##NO_TEXT
SEARCH flavors FOR 'Tree_move'.
IF sy-subrc = 0.
CALL METHOD drag_drop_object->set_flavor
##NO_TEXT
EXPORTING newflavor = 'Tree_move'.
ELSE.
CALL METHOD drag_drop_object->abort.
ENDIF.
ELSE.
##NO_TEXT
SEARCH flavors FOR 'Tree_copy'.
IF sy-subrc = 0.
CALL METHOD drag_drop_object->set_flavor
##NO_TEXT
EXPORTING newflavor = 'Tree_copy'.
ELSE.
CALL METHOD drag_drop_object->abort.
ENDIF.
ENDIF. ENDMETHOD.
METHOD left_drag.
DATA drag_object TYPE REF TO lcl_drag_object.
DATA node_key TYPE node_str-node_key.
CREATE OBJECT drag_object.
LOOP AT node_key_table INTO node_key.
READ TABLE node_itab_left WITH KEY node_key = node_key
INTO node. APPEND node-text TO drag_object->text.
ENDLOOP.
drag_drop_object->object = drag_object.
ENDMETHOD. METHOD right_drop.
DATA drag_object TYPE REF TO lcl_drag_object.
data new_nodes like node_itab_right.
data new_node type node_str.
CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
drag_object ?= drag_drop_object->object.
ENDCATCH.
IF sy-subrc = 1.
" data object has unexpected class
" => cancel Drag & Drop operation
CALL METHOD drag_drop_object->abort.
EXIT.
ENDIF.
loop at drag_object->text into new_node-text.
perform add_node changing node_key new_node new_nodes
node_itab_left.
endloop.
call method tree_right->add_nodes
exporting node_table = new_nodes
table_structure_name = 'NODE_STR'.
ENDMETHOD.
METHOD drop_complete.
DATA node_key TYPE node_str-node_key.
IF drag_drop_object->flavor = 'Tree_move_to_Edit'.
LOOP AT node_key_table INTO node_key.
CALL METHOD tree_left->delete_node
EXPORTING node_key = node_key.
DELETE node_itab_left WHERE node_key = node_key.
ENDLOOP.
ENDIF. ENDMETHOD.
ENDCLASS. *&---------------------------------------------------------------------*
*& Form ADD_NODE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_NEW_NODE text
* <--P_NEW_NODES text
* <--P_NODE_ITAB_LEFT text
*----------------------------------------------------------------------*
FORM ADD_NODE CHANGING node_key
NEW_NODE type node_str
NEW_NODES like node_itab_left
NODE_ITAB_LEFT like node_itab_left.
data lines type i.
describe table node_itab_left lines lines.
new_node-node_key = lines.
new_node-isfolder = 'X'.
new_node-dragdropid = handle_tree_right.
new_node-relatkey = node_key. APPEND new_node TO new_nodes.
append new_node to node_itab_left. ENDFORM. " ADD_NODE

效果

*&---------------------------------------------------------------------*
*& Report RSDEMO_DRAG_DROP_EDIT_TREE *
*& *
*&---------------------------------------------------------------------*
*& *
*& *
*&---------------------------------------------------------------------* REPORT rsdemo_drag_drop_edit_tree .
DATA ok_code TYPE sy-ucomm.
DATA node_itab LIKE node_str OCCURS 0.
DATA node LIKE node_str. DATA container TYPE REF TO cl_gui_custom_container.
DATA splitter TYPE REF TO cl_gui_easy_splitter_container.
DATA right TYPE REF TO cl_gui_container.
DATA left TYPE REF TO cl_gui_container. DATA editor TYPE REF TO cl_gui_textedit.
DATA tree TYPE REF TO cl_gui_simple_tree. DATA behaviour_left TYPE REF TO cl_dragdrop.
DATA behaviour_right TYPE REF TO cl_dragdrop. DATA handle_tree TYPE i. *---------------------------------------------------------------------*
* CLASS lcl_treeobject DEFINITION
*---------------------------------------------------------------------*
* Definition of Data Container *
*---------------------------------------------------------------------*
##CLASS_FINAL
CLASS lcl_drag_object DEFINITION.
PUBLIC SECTION.
DATA text TYPE mtreesnode-text.
ENDCLASS. *---------------------------------------------------------------------*
* CLASS dragdrop_receiver DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
##CLASS_FINAL
CLASS lcl_dragdrop_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
flavor_select FOR EVENT on_get_flavor OF cl_gui_textedit
##NEEDED
IMPORTING index line pos flavors dragdrop_object,
left_drag FOR EVENT on_drag OF cl_gui_simple_tree
##NEEDED
IMPORTING node_key drag_drop_object,
right_drop FOR EVENT ON_DROP OF cl_gui_textedit
##NEEDED
IMPORTING index line pos dragdrop_object,
drop_complete FOR EVENT on_drop_complete OF cl_gui_simple_tree
IMPORTING node_key drag_drop_object. ENDCLASS. ************************************************************************ ************************************************************************ START-OF-SELECTION.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module START OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE start OUTPUT.
SET PF-STATUS 'BASE'.
IF container is initial.
CREATE OBJECT container
EXPORTING container_name = 'CONTAINER'.
CREATE OBJECT splitter
EXPORTING parent = container
orientation = 1.
left = splitter->top_left_container.
right = splitter->bottom_right_container.
CREATE OBJECT editor
EXPORTING parent = right.
CREATE OBJECT tree
EXPORTING parent = left
node_selection_mode = tree->node_sel_mode_single. * Definition of drag drop behaviour
CREATE OBJECT behaviour_left.
CALL METHOD behaviour_left->add
EXPORTING
flavor = 'Tree_move_to_Edit'
dragsrc = 'X'
droptarget = ' '
effect = cl_dragdrop=>copy.
CALL METHOD behaviour_left->add
EXPORTING
flavor = 'Tree_copy_to_Edit'
dragsrc = 'X'
droptarget = ' '
effect = cl_dragdrop=>copy. CALL METHOD behaviour_left->get_handle
IMPORTING handle = handle_tree. * Drag Drop behaviour of tree control nodes are defined in the node
* structure
PERFORM fill_tree.
CALL METHOD tree->add_nodes
EXPORTING node_table = node_itab
table_structure_name = 'NODE_STR'. CREATE OBJECT behaviour_right.
CALL METHOD behaviour_right->add
EXPORTING
flavor = 'Tree_move_to_Edit'
dragsrc = ' '
droptarget = 'X'
effect = cl_dragdrop=>copy.
CALL METHOD behaviour_right->add
EXPORTING
flavor = 'Tree_copy_to_Edit'
dragsrc = ' '
droptarget = 'X'
effect = cl_dragdrop=>copy.
CALL METHOD editor->set_dragdrop
EXPORTING dragdrop = behaviour_right. * registration of drag and drop events
##DECL_MODUL
DATA dragdrop TYPE REF TO lcl_dragdrop_receiver.
CREATE OBJECT dragdrop.
SET HANDLER dragdrop->flavor_select FOR editor.
SET HANDLER dragdrop->left_drag FOR tree.
SET HANDLER dragdrop->right_drop FOR editor.
set handler dragdrop->drop_complete for tree. CALL METHOD tree->expand_node
##NO_TEXT
EXPORTING node_key = 'Root'. ENDIF.
ENDMODULE. " START OUTPUT
*&---------------------------------------------------------------------*
*& Module EXIT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE exit INPUT.
LEAVE PROGRAM.
ENDMODULE. " EXIT INPUT
*&---------------------------------------------------------------------*
*& Form fill_tree
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_tree.
DATA: node LIKE mtreesnode. * node table of the left tree
CLEAR node.
##NO_TEXT
node-node_key = 'Root'.
node-isfolder = 'X'.
##NO_TEXT
node-text = 'Texte'.
node-dragdropid = ' '.
APPEND node TO node_itab. CLEAR node.
##NO_TEXT
node-node_key = 'Child1'.
##NO_TEXT
node-relatkey = 'Root'.
node-relatship = cl_gui_simple_tree=>relat_last_child.
##NO_TEXT
node-text = 'DragDrop Text 1'.
node-dragdropid = handle_tree. " handle of behaviour
APPEND node TO node_itab. CLEAR node.
##NO_TEXT
node-node_key = 'Child2'.
##NO_TEXT
node-relatkey = 'Root'.
node-relatship = cl_gui_simple_tree=>relat_last_child.
##NO_TEXT
node-text = 'DragDrop Text 2'.
node-dragdropid = handle_tree. " handle of behaviour
APPEND node TO node_itab. ENDFORM. " fill_tree
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CALL METHOD cl_gui_cfw=>dispatch.
ENDMODULE. " USER_COMMAND_0100 INPUT *---------------------------------------------------------------------*
* CLASS DRAGDROP_RECEIVER IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS lcl_dragdrop_receiver IMPLEMENTATION.
METHOD flavor_select.
IF line > 5.
SEARCH flavors FOR 'Tree_move_to_Edit'.
IF sy-subrc = 0.
CALL METHOD dragDROP_OBJECT->SET_FLAVOR
EXPORTING newflavor = 'Tree_move_to_Edit'.
ELSE.
CALL METHOD dragdrop_object->abort.
ENDIF.
ELSE.
SEARCH flavors FOR 'Tree_copy_to_Edit'.
IF sy-subrc = 0.
CALL METHOD dragdrop_object->set_flavor
EXPORTING newflavor = 'Tree_copy_to_Edit'.
ELSE.
CALL METHOD dragdrop_object->abort.
ENDIF.
ENDIF. ENDMETHOD.
METHOD left_drag.
DATA drag_object TYPE REF TO lcl_drag_object. READ TABLE node_itab WITH KEY node_key = node_key
INTO node. CREATE OBJECT drag_object.
drag_object->text = node-text.
drag_drop_object->object = drag_object.
ENDMETHOD. METHOD right_drop.
DATA textline(256).
DATA text_table LIKE STANDARD TABLE OF textline.
DATA drag_object TYPE REF TO lcl_drag_object.
CATCH SYSTEM-EXCEPTIONS move_cast_error = 1.
drag_object ?= dragdrop_object->object.
ENDCATCH.
IF sy-subrc = 1.
" data object has unexpected class
" => cancel Drag & Drop operation
CALL METHOD dragdrop_object->abort.
EXIT.
ENDIF.
CALL METHOD editor->get_text_as_stream
IMPORTING text = text_table.
* Synchronize Automation Queue after Get Methods
CALL METHOD cl_gui_cfw=>flush.
textline = drag_object->text.
* Insert text in internal table
INSERT textline INTO text_table INDEX 1.
* Send modified table to frontend
CALL METHOD editor->set_text_as_stream
EXPORTING text = text_table
EXCEPTIONS error_dp = 1
error_dp_create = 2.
ENDMETHOD.
METHOD drop_complete.
IF drag_drop_object->flavor = 'Tree_move_to_Edit'.
CALL METHOD tree->delete_node
EXPORTING node_key = node_key.
delete node_itab where node_key = node_key.
ENDIF.
ENDMETHOD.
ENDCLASS.

SAP Tree editor(树形结构)的更多相关文章

  1. salesforce 零基础学习(七十)使用jquery tree实现树形结构模式

    项目中UI需要用到树形结构显示内容,后来尽管不需要做了,不过还是自己做着玩玩,mark一下,免得以后项目中用到. 实现树形结构在此使用的是jquery的dynatree.js.关于dynatree的使 ...

  2. Tree 树形结构

    一.树的基本概念 (1)树(Tree)的概念:树是一种递归定义的数据结构,是一种重要的非线性数据结构. 树可以是一棵空树,它没有任何的结点:也可以是一棵非空树,至少含有一个结点. (2)根(Root) ...

  3. 使用ztree.js,受益一生,十分钟学会使用tree树形结构插件

    看到ztree.js,这几个字眼,毋庸置疑,那肯定就是tree树形结构了,曾经的swing年代有jtree,后来jquery年代有jstree和treeview,虽然我没写过,但是我见过,一些小功能做 ...

  4. Linux/Ubuntu tree 命令以树形结构显示文件夹目录结构

    1.安装命令工具 sudo apt-get -y install tree 2.可以查看关于tree命令的帮助信息 $ tree --help usage: tree [-adfghilnpqrstu ...

  5. 【转】linux tree命令以树形结构显示文件目录结构 ---- 不错

    原文网址:http://jingyan.baidu.com/article/acf728fd19c7eff8e510a3eb.html 今天小编来给分享Linux 系统下一个非常有用的命令的使用:tr ...

  6. [转帖]linux tree命令--显示目录的树形结构

    linux tree命令--显示目录的树形结构    版权声明:iamqilei@qq.com https://blog.csdn.net/u011729865/article/details/533 ...

  7. EasyUI之树形结构tree

    转自:https://blog.csdn.net/ya_1249463314/article/details/70305730 版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...

  8. tree:以树形结构显示目录下的内容

    tree命令 1.命令详解 [功能说明] tree命令的中文意思为“树”,功能是以树形结构列出指定目录下的所有内容包括所有文件.子目录及子目录里的目录和文件. [语法格式] tree [option] ...

  9. java的List列表转成Tree(树形)结构列表

    直接看借鉴博客:https://blog.csdn.net/massivestars/article/details/53911620/ 由于我的业务没有父子级id两个字段,只有一个层级id字段来分层 ...

随机推荐

  1. centos和redhat的区别

    CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat Enterprise Linu ...

  2. 使用 Nginx 实现 URL 的重定向

    1. 概述 老话说的好:取乎上,得其中:取乎中,得其下.因此我们不妨把目标定的高一些,去努力,才能得到更好回报. 言归正传,今天我们来聊聊 使用 Nginx 实现 URL 的重定向. 2. 使用 Ng ...

  3. vue elementUI 之 this.$confirm 用法

      this.$confirm('您确定退出当前账号吗?', '提示', {                         confirmButtonText: '确定',             ...

  4. Gson解析:java.lang.IllegalArgumentException: declares multiple JSON fields named status 问题的解决

    在一次写定义系统统一返回值的情况下,碰到了java.lang.IllegalArgumentException: declares multiple JSON fields named status这 ...

  5. 项目实战:rsync+sersync实现数据实时同步

    一.组网介绍 本次实验使用两台主机: qll251 角色:Rsync server + Sersync server qll252 角色: Rsync client 本次实验采用CentOS7.7系统 ...

  6. Oracle 常用运维命令整理

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 一.oracle建库与删库命令 (1)oracle11g ...

  7. nacos 详细介绍(二)

    五.nacos的namespace和group namespace:相当于环境,开发环境 测试环境 生产环境 ,每个空间里面的配置是独立的默认的namespace是public, namespace可 ...

  8. uniapp复制到剪贴板

    uni.setClipboardData() ; 例: 给元素添加点击事件 <view @click="doCopy()">复制</view> 复制方法 d ...

  9. [java并发编程]基于信号量semaphore实现限流器

    目录 一.什么是信号量 二.信号量类Semaphore 三.实现限流器 欢迎关注我的博客,更多精品知识合集 一.什么是信号量 "信号量"在编程术语中使用单词semaphore,那什 ...

  10. 吊炸天,Spring Security还有这种用法!

    在用Spring Security项目开发中,有时候需要放通某一个接口时,我们需要在配置中把接口地址配置上,这样做有时候显得麻烦,而且不够优雅.我们能不能通过一个注解的方式,在需要放通的接口上加上该注 ...