Final code for the PBO(..O01) and FORM(..F01) includesThe following code allows the easy creation of the example ALVtree report. Simply copy and past it into the appropriate includes(PBO and FORM).
*--------------------------------------------------------------*
***INCLUDE ZDEMO_ALVTREEO01 .
*--------------------------------------------------------------*
*&-------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&-------------------------------------------------------------*
* text
*--------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'STATUS1'.
* Set titlebar 'xxx'.
* If ALVtree already exists then it mush not be re-created as this
* will cause a runtime error.
IF gd_tree IS INITIAL.
PERFORM create_alvtree_container.
PERFORM create_object_in_container.
PERFORM define_events.
PERFORM create_alvtree_hierarchy.
ENDIF.
CALL METHOD cl_gui_cfw=>flush.
ENDMODULE. " STATUS_0100 OUTPUT
*--------------------------------------------------------------*
* INCLUDE ZDEMO_ALVTREEF01 *
*--------------------------------------------------------------*
*&-------------------------------------------------------------*
*& Form CREATE_ALVTREE_CONTAINER
*&-------------------------------------------------------------*
* Create container for ALVtree report
*--------------------------------------------------------------*
form create_alvtree_container.
* Create container for alv-tree
gd_tree_container_name = 'SCREEN_CONTAINER'.
create object gd_custom_container
exporting
container_name = gd_tree_container_name
exceptions
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
if sy-subrc <> 0.
message x208(00) with 'ERROR'.
endif.
endform. " CREATE_ALVTREE_CONTAINER
*&---------------------------------------------------------------------*
*& Form create_object_in_container
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_object_in_container .
CREATE OBJECT gd_tree
EXPORTING
parent = gd_custom_container
node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single
EXCEPTIONS
cntl_system_error = 2
create_error = 3
lifetime_error = 4
illegal_node_selection_mode = 5
failed = 6.
IF sy-subrc <> 0.
MESSAGE x208(00) WITH 'ERROR'.
ENDIF.
ENDFORM. " create_object_in_container
*&---------------------------------------------------------------------*
*& Form create_alvtree_hierarchy
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_alvtree_hierarchy .
DATA: NODE LIKE MTREESNODE,
ld_node type string.
LOOP AT it_ekko INTO wa_ekko.
* 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
* occur in the node table before its parent node.
* Node with key 'Root'
node-node_key = wa_ekko-ebeln. " 'Root'. "#EC NOTEXT
" 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.
node-text = wa_ekko-ebeln. "'Root'.
APPEND node TO node_table.
LOOP AT it_ekpo INTO wa_ekpo WHERE ebeln EQ wa_ekko-ebeln.
* Node with key wa_ekpo-ebelp "'Child1'
ld_node = sy-tabix.
concatenate wa_ekpo-ebelp ld_node into ld_node.
node-node_key = ld_node. "'Child1'. #EC NOTEXT
* Node is inserted as child of the node with key wa_ekpo-ebeln "'Root'.
node-relatkey = wa_ekpo-ebeln. " 'Root'.
node-relatship = cl_gui_simple_tree=>relat_last_child.
node-hidden = ' '.
node-disabled = ' '.
node-isfolder = ' '.
CLEAR node-n_image.
CLEAR node-exp_image.
node-expander = ' '. " The node is marked with a '+', although
* it has no children. When the user clicks on the
* + to open the node, the event
* expand_no_children is fired. The programmer can
* add the children of the
* node within the event handler of the
* expand_no_children event
* (see method handle_expand_no_children
* of class lcl_application)
node-text = wa_ekpo-ebelp.
APPEND node TO node_table.
ENDLOOP.
ENDLOOP.
* Add nodes to alv tree
CALL METHOD GD_TREE->ADD_NODES
EXPORTING
TABLE_STRUCTURE_NAME = 'MTREESNODE'
NODE_TABLE = NODE_TABLE
EXCEPTIONS
FAILED = 1
ERROR_IN_NODE_TABLE = 2
DP_ERROR = 3
TABLE_STRUCTURE_NAME_NOT_FOUND = 4
OTHERS = 5.
ENDFORM. " create_alvtree_hierarchy
*&---------------------------------------------------------------------*
*& Form define_events
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form define_events .
data: EVENTS TYPE CNTL_SIMPLE_EVENTS,
event type cntl_simple_event.
* define the events which will be passed to the backend
" node double click
event-eventid = CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK.
event-appl_event = 'X'. " process PAI if event occurs
APPEND event to events.
" expand no children
event-eventid = CL_GUI_SIMPLE_TREE=>EVENTID_EXPAND_NO_CHILDREN.
event-appl_event = 'X'.
APPEND event to events.
CALL METHOD GD_TREE->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = EVENTS
EXCEPTIONS
CNTL_ERROR = 1
CNTL_SYSTEM_ERROR = 2
ILLEGAL_EVENT_COMBINATION = 3.
* assign event handlers in the application class to each desired event
SET HANDLER GD_APPLICATION->HANDLE_NODE_DOUBLE_CLICK FOR GD_TREE.
SET HANDLER GD_APPLICATION->HANDLE_EXPAND_NO_CHILDREN FOR GD_TREE.
endform. " define_events
|
||||||||