*&---------------------------------------------------------------------*
*& Report Z_SIMPLE_TREE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_SIMPLE_TREE.
class grid_event_receiver definition deferred.
CLASS cl_gui_cfw DEFINITION LOAD.
DATA: simple_tree TYPE REF TO cl_simple_tree_model,
customer_container TYPE REF TO cl_gui_custom_container,
w_splitter TYPE REF TO cl_gui_splitter_container,
grid1 type ref to cl_gui_alv_grid,
w_left TYPE REF TO cl_gui_container,
w_body TYPE REF TO cl_gui_container,
Save_ok TYPE sy-ucomm,
OK_CODE TYPE sy-ucomm,
event_receiver TYPE REF TO grid_event_receiver,
g_sflight LIKE sflight OCCURS 0 WITH HEADER LINE,
g_sflight_Detail type table of sflight WITH HEADER LINE.
set SCREEN 100.
*----------------------------------------------------------------------*
* CLASS grid_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS grid_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handler_double_click FOR EVENT NODE_DOUBLE_CLICK of cl_simple_tree_model
IMPORTING NODE_KEY.
ENDCLASS. "grid_event_receiver DEFINITION
*----------------------------------------------------------------------*
* CLASS grid_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS grid_event_receiver IMPLEMENTATION.
METHOD handler_double_click.
PERFORM GetDetail USING NODE_KEY.
ENDMETHOD. "handler_double_click
ENDCLASS. "grid_event_receiver IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
Save_ok = OK_CODE.
CLEAR OK_CODE.
DATA: return_code TYPE i.
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 Save_ok.
EXIT.
ENDIF.
CASE Save_ok .
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'MAIN0100'.
IF simple_tree is INITIAL.
DATA: event TYPE cntl_simple_event,
events TYPE cntl_simple_events.
CREATE OBJECT customer_container
EXPORTING
* PARENT =
CONTAINER_NAME = 'TREE'.
CREATE OBJECT w_splitter
EXPORTING
parent = customer_container
rows = 1
columns = 2.
CALL METHOD w_splitter->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = w_left.
CALL METHOD w_splitter->get_container
EXPORTING
row = 1
column = 2
RECEIVING
container = w_body.
CALL METHOD w_splitter->set_column_width
EXPORTING
id = 1
width = 25.
CREATE OBJECT simple_tree
EXPORTING
NODE_SELECTION_MODE = cl_simple_tree_model=>node_sel_mode_single.
CALL METHOD simple_tree->CREATE_TREE_CONTROL
EXPORTING
PARENT = w_left.
event-eventid = cl_simple_tree_model=>eventid_node_double_click.
event-appl_event = 'X'.
APPEND event TO events.
CALL METHOD simple_tree->SET_REGISTERED_EVENTS
EXPORTING
EVENTS = events.
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handler_double_click FOR simple_tree.
PERFORM AddNode.
CALL METHOD simple_tree->expand_node
EXPORTING
node_key = '2008'
EXCEPTIONS
node_not_found = 1.
call method cl_gui_cfw=>flush.
ENDIF.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form AddNode
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM AddNode .
DATA: YYYY(4) TYPE C,
MM(2) TYPE C,
DD(2) TYPE C,
l_yyyy(4) TYPE C,
l_MM(2) TYPE C,
l_DD(2) TYPE C,
K_YYYY TYPE TM_NODEKEY,
K_MM TYPE TM_NODEKEY.
select * from sflight into table g_sflight up to 50 rows.
SORT g_sflight BY fldate.
DATA: nodekey TYPE TM_NODEKEY,
nodetext TYPE TM_NODETXT.
LOOP AT g_sflight.
YYYY = g_sflight-fldate+0(4).
MM = g_sflight-fldate+4(2).
DD = g_sflight-fldate+6(2).
IF YYYY <> l_yyyy.
l_yyyy = YYYY.
nodekey = YYYY.
nodetext = yyyy.
CALL METHOD simple_tree->add_node
EXPORTING
node_key = nodekey "#EC NOTEXT
isfolder = 'X'
text = nodetext "#EC NOTEXT
relationship = cl_simple_tree_model=>RELAT_NEXT_SIBLING
relative_node_key = K_YYYY
EXCEPTIONS
OTHERS = 1.
K_YYYY = YYYY.
ENDIF.
IF l_MM <> MM.
l_MM = MM.
nodekey = MM.
nodetext = MM.
CALL METHOD simple_tree->add_node
EXPORTING
node_key = nodekey "#EC NOTEXT
isfolder = 'X'
text = nodetext "#EC NOTEXT
relative_node_key = K_YYYY
relationship = cl_simple_tree_model=>relat_last_child
EXCEPTIONS
OTHERS = 1.
K_MM = MM.
ENDIF.
nodekey = g_sflight-fldate.
nodetext = g_sflight-fldate.
CALL METHOD simple_tree->add_node
EXPORTING
node_key = nodekey "#EC NOTEXT
isfolder = ' '
text = nodetext "#EC NOTEXT
relationship = cl_simple_tree_model=>relat_last_child
relative_node_key = K_MM
EXCEPTIONS
OTHERS = 1.
ENDLOOP.
ENDFORM. " AddNode
*&---------------------------------------------------------------------*
*& Form GetDetail
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_NODE_KEY text
*----------------------------------------------------------------------*
FORM GetDetail USING P_NODE_KEY TYPE TM_NODEKEY.
DATA: parent_key TYPE TM_NODEKEY,
Child_table TYPE TREEMNOTAB,
KEY_VALE(8) TYPE C.
CALL METHOD simple_tree->NODE_GET_PARENT
EXPORTING
NODE_KEY = P_NODE_KEY
IMPORTING
PARENT_NODE_KEY = parent_key.
CALL METHOD simple_tree->NODE_GET_CHILDREN
EXPORTING
NODE_KEY = P_NODE_KEY
IMPORTING
NODE_KEY_TABLE = Child_table.
IF parent_key is INITIAL.
KEY_VALE = P_NODE_KEY.
ELSEIF Child_table is INITIAL.
KEY_VALE = P_NODE_KEY.
ELSE.
CONCATENATE parent_key P_NODE_KEY INTO KEY_VALE.
ENDIF.
PERFORM Get_Detail_DATA USING KEY_VALE.
ENDFORM. " GetDetail
*&---------------------------------------------------------------------*
*& Form Get_Detail_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_KEY_VALE text
*----------------------------------------------------------------------*
FORM Get_Detail_DATA USING P_KEY_VALE TYPE C.
REFRESH g_sflight_Detail.
LOOP AT g_sflight.
if g_sflight-fldate CS P_KEY_VALE.
move-CORRESPONDING g_sflight to g_sflight_Detail.
APPEND g_sflight_Detail.
CLEAR g_sflight_Detail.
ENDIF.
ENDLOOP.
if grid1 is INITIAL.
CREATE OBJECT grid1
EXPORTING
I_PARENT = w_body.
endif.
CALL METHOD grid1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'SFLIGHT'
CHANGING
IT_OUTTAB = g_sflight_Detail[].
CALL METHOD grid1->REFRESH_TABLE_DISPLAY.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
call method cl_gui_cfw=>flush.
* PERFORM Init_Grid USING g_sflight_Detail.
ENDFORM. " Get_Detail_DATA
*&---------------------------------------------------------------------*
*& Form Init_Grid
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_G_SFLIGHT_DETAIL text
*----------------------------------------------------------------------*
FORM Init_Grid USING P_G_SFLIGHT_DETAIL STRUCTURE sflight.
* if grid1 is INITIAL.
* CREATE OBJECT grid1
* EXPORTING
* I_PARENT = w_body.
* CALL METHOD grid1->SET_TABLE_FOR_FIRST_DISPLAY
* EXPORTING
* I_STRUCTURE_NAME = 'SFLIGHT'
* CHANGING
* IT_OUTTAB = P_G_SFLIGHT_DETAIL.
* endif.
ENDFORM. " Init_Grid