REPORT z19_005 MESSAGE-ID tree_control_msg.
TYPES: item_table_type LIKE STANDARD TABLE OF mtreeitm
WITH DEFAULT KEY.
DATA : con1_ref TYPE REF TO cl_gui_custom_container,
tree_con_ref TYPE REF TO cl_gui_custom_container.
DATA : g_tree TYPE REF TO cl_gui_list_tree.
DATA : grid1 TYPE REF TO cl_gui_alv_grid,
gs_variant LIKE disvariant,
gs_cs_variant LIKE disvariant,
gs_layout TYPE lvc_s_layo,
gs_toolbar TYPE ui_functions,
gt_sort TYPE lvc_t_sort,
gt_sflight TYPE TABLE OF sflight.
* 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.
DATA BEGIN OF gt_carrid OCCURS 0.
DATA carrid LIKE sflight-carrid.
DATA seatsocc LIKE sflight-seatsocc.
DATA seatsocc_b LIKE sflight-seatsocc_b.
DATA seatsocc_f LIKE sflight-seatsocc_f.
DATA END OF gt_carrid.
DATA : gs_carrid LIKE gt_carrid.
TYPE-POOLS: icon.
*---------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
handle_double_click
FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column.
METHODS : handle_toolbar
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING e_object e_interactive.
METHODS : handle_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING e_ucomm.
PRIVATE SECTION.
ENDCLASS. "lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
* CLASS lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_double_click.
LEAVE TO SCREEN 0.
ENDMETHOD. "handle_double_click
*-- Add ToolBar
METHOD handle_toolbar.
DATA: ls_toolbar TYPE stb_button.
CLEAR ls_toolbar.
ls_toolbar-butn_type = 3.
APPEND ls_toolbar TO e_object->mt_toolbar.
CLEAR ls_toolbar.
ls_toolbar-function = 'RESH'.
ls_toolbar-icon = icon_refresh.
ls_toolbar-quickinfo = 'Refresh'.
ls_toolbar-text = ' '.
ls_toolbar-disabled = ' '.
APPEND ls_toolbar TO e_object->mt_toolbar.
ENDMETHOD. "handle_toolbar
METHOD handle_command.
DATA : l_scroll TYPE lvc_s_stbl.
CASE e_ucomm.
*- REFRESH
WHEN 'RESH'.
SELECT * FROM sflight INTO TABLE gt_sflight.
l_scroll-row = 'X'.
l_scroll-col = 'X'.
CALL METHOD grid1->refresh_table_display
EXPORTING
i_soft_refresh = ''
is_stable = l_scroll.
ENDCASE.
ENDMETHOD. "handle_user_command
ENDCLASS. "lcl_event_receiver IMPLEMENTATION
*---------------------------------------------------------------------*
* CLASS LCL_APPLICATION DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
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_header_click
FOR EVENT header_click
OF cl_gui_list_tree
IMPORTING header_name,
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.
SELECT * FROM sflight INTO TABLE gt_sflight
WHERE carrid = node_key.
PERFORM refresh_grid.
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.
SELECT * FROM sflight INTO TABLE gt_sflight
WHERE carrid = node_key.
PERFORM refresh_grid.
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 TYPE mtreeitm,
item_table TYPE item_table_type.
IF node_key = 'Child1'. "#EC NOTEXT
SELECT carrid
SUM( seatsocc ) AS seatsocc
SUM( seatsocc_b ) AS seatsocc_b
SUM( seatsocc_f ) AS seatsocc_f
INTO CORRESPONDING FIELDS OF TABLE gt_carrid
FROM sflight
GROUP BY carrid.
LOOP AT gt_carrid INTO gs_carrid.
CLEAR node.
node-node_key = gs_carrid-carrid. "#EC NOTEXT
node-relatkey = 'Child1'.
NODE-LAST_HITEM = '1'.
node-relatship = cl_gui_list_tree=>relat_last_child.
APPEND node TO node_table.
CLEAR item.
item-node_key = gs_carrid-carrid.
item-item_name = '1'. "#EC NOTEXT
item-class = cl_gui_list_tree=>item_class_button.
item-text = gs_carrid-carrid. "#EC NOTEXT
item-length = 4. " the width of the item is 4 characters
item-ignoreimag = 'X'.
item-usebgcolor = 'X'. " item has light grey background
APPEND item TO item_table.
*
CLEAR item.
item-node_key = gs_carrid-carrid.
item-item_name = '2'. "#EC NOTEXT
item-text = gs_carrid-seatsocc. "#EC NOTEXT
CONDENSE item-text NO-GAPS.
item-class = cl_gui_list_tree=>item_class_text.
item-alignment = cl_gui_list_tree=>align_left.
item-length = 4.
item-ignoreimag = 'X'.
item-usebgcolor = 'X'.
APPEND item TO item_table.
* CLEAR item.
* item-node_key = gs_carrid-carrid.
* item-item_name = 'SEATSOCC_F'. "#EC NOTEXT
* item-text = gs_carrid-seatsocc_f. "#EC NOTEXT
* item-class = cl_gui_list_tree=>item_class_text.
* item-length = 4.
* APPEND item TO item_table.
ENDLOOP.
CALL METHOD g_tree->add_nodes_and_items
EXPORTING
node_table = node_table
item_table = item_table
item_table_structure_name = 'MTREEITM'.
IF sy-subrc <> 0.
MESSAGE a000.
ENDIF.
ENDIF.
ENDMETHOD. "HANDLE_EXPAND_NO_CHILDREN
ENDCLASS. "LCL_APPLICATION IMPLEMENTATION
DATA :event_receiver TYPE REF TO lcl_event_receiver.
DATA: g_application TYPE REF TO lcl_application.
START-OF-SELECTION.
SELECT * FROM sflight INTO TABLE gt_sflight.
CREATE OBJECT g_application.
CALL SCREEN 100.
*---------------------------------------------------------------------*
* MODULE init_con OUTPUT
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
MODULE init_con OUTPUT.
IF con1_ref IS INITIAL.
CREATE OBJECT con1_ref
EXPORTING container_name = 'CON1'.
CREATE OBJECT grid1
EXPORTING
i_parent = con1_ref.
PERFORM setting_layout.
PERFORM setting_toolbar.
PERFORM setting_sort.
PERFORM setting_event.
CALL METHOD grid1->set_table_for_first_display
EXPORTING
i_structure_name = 'SFLIGHT'
i_save = 'A'
is_variant = gs_variant " variant display
i_default = ' '
is_layout = gs_layout
it_toolbar_excluding = gs_toolbar
CHANGING
it_outtab = gt_sflight
it_sort = gt_sort.
ENDIF.
ENDMODULE. " init_con OUTPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
SET PF-STATUS 'G100'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Form setting_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GS_LAYOCAT text
*----------------------------------------------------------------------*
FORM setting_layout .
*- General display options
gs_layout-cwidth_opt = 'X'.
* TITLE BAR
gs_layout-grid_title = 'LIST TREE TEST'.
* Selection modes for SEL_MODE
gs_layout-sel_mode = 'D'.
* Grid pattern
gs_layout-zebra = 'X'.
ENDFORM. " setting_layout
*&---------------------------------------------------------------------*
*& Form setting_toolbar
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GS_TOOLBAR text
*----------------------------------------------------------------------*
FORM setting_toolbar.
DATA: l_exclude TYPE ui_func.
l_exclude = cl_gui_alv_grid=>mc_fc_save_variant.
APPEND l_exclude TO gs_toolbar.
l_exclude = cl_gui_alv_grid=>mc_fc_maintain_variant.
APPEND l_exclude TO gs_toolbar.
ENDFORM. " setting_toolbar
*&---------------------------------------------------------------------*
*& Form setting_sort
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM setting_sort .
DATA : ls_sort TYPE lvc_s_sort.
ls_sort-spos = '1'.
ls_sort-fieldname = 'CARRID'.
ls_sort-up = 'X'.
ls_sort-subtot = 'X'.
APPEND ls_sort TO gt_sort.
ENDFORM. " setting_sort
*&---------------------------------------------------------------------*
*& Form setting_event
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM setting_event .
CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_double_click FOR grid1.
SET HANDLER event_receiver->handle_toolbar FOR grid1.
SET HANDLER event_receiver->handle_command FOR grid1.
ENDFORM. " setting_event
*&---------------------------------------------------------------------*
*& Module init_tree OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE init_tree OUTPUT.
DATA: node_table TYPE treev_ntab,
item_table TYPE item_table_type,
events TYPE cntl_simple_events,
event TYPE cntl_simple_event.
DATA : l_header_text TYPE treev_hhdr,
l_list_text TYPE treev_lhdr.
IF g_tree IS INITIAL.
CREATE OBJECT tree_con_ref
EXPORTING
" the container is linked to the custom control with the
" name 'TREE_CONTAINER' on the dynpro
container_name = 'TREE_CONTAINER'.
* l_header_text = 'Header TEXT'.
l_header_text-heading = 'Header TEXT'.
l_header_text-width = '30'.
l_list_text-heading = 'LIST TEXT'.
CREATE OBJECT g_tree
EXPORTING
parent = tree_con_ref
node_selection_mode = cl_gui_list_tree=>node_sel_mode_single
item_selection = 'X'
hierarchy_header = l_header_text
list_header = l_list_text
with_headers = 'X'.
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.
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'.
*
*
** Column2
* CALL METHOD g_tree->add_column
* EXPORTING
* name = 'SEATSOCC'
* width = 15
* header_text = 'Economy Class'.
*
*
* CALL METHOD g_tree->add_column
* EXPORTING
* name = 'SEATSOCC_B'
* width = 15
* alignment = cl_gui_column_tree=>align_right
* header_text = 'Business Class'.
*
*
* CALL METHOD g_tree->add_column
* EXPORTING
* name = 'SEATSOCC_F'
* width = 15
* alignment = cl_gui_column_tree=>align_right
* header_text = 'First Class'.
*
*
*
* CALL METHOD g_tree->expand_node
* EXPORTING
* node_key = 'Root'.
*
ENDIF.
ENDMODULE. " init_tree OUTPUT
*&---------------------------------------------------------------------*
*& Form BUILD_NODE_AND_ITEM_TABLE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_NODE_TABLE text
* -->P_ITEM_TABLE 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 = 'Root'.
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.
node-last_hitem = '1'.
CLEAR node-n_image.
CLEAR node-exp_image.
APPEND node TO node_table.
* Node with key 'Root'
CLEAR item.
item-node_key = 'Root'.
item-item_name = '1'. " Item with name '1'
item-class = cl_gui_list_tree=>item_class_text. " Text Item
item-alignment = cl_gui_list_tree=>align_auto.
item-font = cl_gui_list_tree=>item_font_prop.
item-text = 'AIRPLANE'. "#EC NOTEXT
APPEND item TO item_table.
* Node with key 'Child1'
CLEAR node.
node-node_key = 'Child1'.
node-relatkey = 'Root'.
node-relatship = cl_gui_list_tree=>relat_last_child.
node-isfolder = 'X'.
node-expander = 'X'.
APPEND node TO node_table.
* Node with key 'Child1'
CLEAR item.
item-node_key = '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 = 'CARR ID'. "#EC NOTEXT
APPEND item TO item_table.
ENDFORM. " build_node_and_item_table
*&---------------------------------------------------------------------*
*& Form refresh_grid
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM refresh_grid .
DATA : l_scroll TYPE lvc_s_stbl.
l_scroll-row = 'X'.
l_scroll-col = 'X'.
CALL METHOD grid1->refresh_table_display
EXPORTING
i_soft_refresh = ''
is_stable = l_scroll.
ENDFORM. " refresh_grid
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
271 | report zunicode_003. | sapjoy | 2008.11.22 | 2202 |
270 | report zunicode_002 | sapjoy | 2008.11.22 | 2563 |
269 | zunicode_001 | sapjoy | 2008.11.22 | 2397 |
268 | REPORT Z07_024 | sapjoy | 2006.12.09 | 2474 |
267 | REPORT z18_033 [47] | sapjoy | 2008.10.13 | 9044 |
266 | REPORT Z13_021 [1] | sapjoy | 2008.09.29 | 2156 |
265 | REPORT Z17_004. | sapjoy | 2007.02.12 | 2508 |
» | REPORT z19_005 [1] | sapjoy | 2007.04.04 | 2927 |
263 | REPORT z18_035 | sapjoy | 2007.03.14 | 2450 |
262 | REPORT z16_003 [1] | sapjoy | 2008.08.08 | 2551 |
261 | REPORT z16_002 | sapjoy | 2008.08.08 | 2649 |
260 | REPORT Z04_003 [9] | sapjoy | 2007.05.17 | 2561 |
259 | <b>ABAP SOURCE는 교재에 사용된 소스들입니다.</b> [1] | sapjoy | 2006.12.03 | 3619 |
258 | REPORT z18_037 [3] | sapjoy | 2008.04.22 | 2728 |
257 | REPORT z18_038 [2] | sapjoy | 2008.04.22 | 2636 |
256 | REPORT Z07_031 [2] | sapjoy | 2006.12.09 | 2309 |
255 | REPORT Z05_001 [3] | sapjoy | 2007.05.22 | 2881 |
254 | REPORT Z05_003 | sapjoy | 2007.05.22 | 2406 |
253 | REPORT Z15_027 . | sapjoy | 2007.02.01 | 2718 |
252 | REPORT Z17_021 . | sapjoy | 2007.02.21 | 2388 |