*&---------------------------------------------------------------------*
*& Report YTEST00A
*&---------------------------------------------------------------------*
*&Violin 2021/4/29
*&---------------------------------------------------------------------*
REPORT ytest00a.
*第9章 Tree Control的使用---------------------------------------------------------------------*
*9.3Tree Control對象與ALV Grid對象關聯
**功能碼返回值
DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
DATA: wa_container TYPE scrfname VALUE 'TREE',
wa_containeralv TYPE scrfname VALUE 'ALV',
wa_custom_container TYPE REF TO cl_gui_custom_container,
wa_custom_containeralv TYPE REF TO cl_gui_custom_container,
wa_tree TYPE REF TO cl_gui_simple_tree,
wa_alv TYPE REF TO cl_gui_alv_grid.
DATA:node_table LIKE TABLE OF mtreesnode,
node1 TYPE mtreesnode.
DATA wa_spfli TYPE TABLE OF spfli WITH HEADER LINE.
DATA wa_sflight TYPE TABLE OF sflight.
DATA: nodekey(200) VALUE 'NODE',
nodetext(200) VALUE 'NODE'.
CLASS lcl_application DEFINITION DEFERRED.
DATA event_receiver TYPE REF TO lcl_application.
CLASS lcl_application DEFINITION.
PUBLIC SECTION.
METHODS handle_node_double_click
FOR EVENT node_double_click
OF cl_gui_simple_tree
IMPORTING node_key.
ENDCLASS.
CLASS lcl_application IMPLEMENTATION.
METHOD handle_node_double_click.
nodekey = node_key.
READ TABLE node_table WITH KEY node_key = node_key INTO node1.
nodetext = node1-text.
CLEAR wa_sflight.
SELECT * INTO TABLE wa_sflight FROM sflight
WHERE carrid = node1-node_key+2(2) AND connid = node1-node_key+4(4).
CALL METHOD wa_alv->set_table_for_first_display
EXPORTING
* i_buffer_active =
* i_bypassing_buffer =
* i_consistency_check =
i_structure_name = 'SFLIGHT'
* is_variant =
* i_save =
* i_default = 'X'
* is_layout =
* is_print =
* it_special_groups =
* it_toolbar_excluding =
* it_hyperlink =
* it_alv_graphics =
* it_except_qinfo =
* ir_salv_adapter =
CHANGING
it_outtab = wa_sflight
* it_fieldcatalog =
* it_sort =
* it_filter =
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDMETHOD.
ENDCLASS.
DATA g_application TYPE REF TO lcl_application.
START-OF-SELECTION.
SELECT * INTO TABLE wa_spfli FROM spfli
ORDER BY countryfr carrid ASCENDING.
CREATE OBJECT g_application.
SET SCREEN 592.
MODULE status_0100 OUTPUT.
IF wa_custom_container IS INITIAL.
PERFORM create_tree.
ENDIF.
ENDMODULE.
MODULE user_command_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'EXIT'.
LEAVE PROGRAM.
ENDCASE.
ENDMODULE.
FORM create_tree.
DATA:events TYPE cntl_simple_events,
event1 TYPE cntl_simple_event.
CREATE OBJECT wa_custom_container
EXPORTING
container_name = wa_container.
CREATE OBJECT wa_custom_containeralv
EXPORTING
container_name = wa_containeralv.
CREATE OBJECT wa_alv
EXPORTING
i_parent = wa_custom_containeralv.
CREATE OBJECT wa_tree
EXPORTING
parent = wa_custom_container
node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single.
IF sy-subrc <> 0.
ENDIF.
DATA: countryfr LIKE spfli-countryfr,
carrid LIKE spfli-carrid.
DATA: str1(255).
LOOP AT wa_spfli.
IF countryfr NE wa_spfli-countryfr.
CLEAR node1.
node1-node_key = wa_spfli-countryfr.
* 第一層
CLEAR node1-relatkey.
CLEAR node1-relatship.
* 是文件夾
node1-hidden = ''.
node1-disabled = ''.
node1-isfolder = 'X'.
* 不帶ICON
CLEAR node1-n_image.
CLEAR node1-exp_image.
CLEAR node1-expander.
node1-text = wa_spfli-countryfr.
APPEND node1 TO node_table.
*
ENDIF.
IF ( countryfr NE wa_spfli-countryfr ) OR ( carrid <> wa_spfli-carrid ).
CLEAR node1.
CONCATENATE wa_spfli-countryfr wa_spfli-carrid INTO node1-node_key.
*上層關係
node1-relatkey = wa_spfli-countryfr.
node1-relatship = cl_gui_simple_tree=>relat_last_child.
node1-hidden = ''.
node1-disabled = ''.
node1-isfolder = 'X'.
CLEAR node1-n_image.
CLEAR node1-exp_image.
CLEAR node1-expander.
*節點顯示CARRID
node1-text = wa_spfli-carrid.
APPEND node1 TO node_table.
ENDIF.
countryfr = wa_spfli-countryfr.
carrid = wa_spfli-carrid.
CLEAR node1.
CONCATENATE wa_spfli-countryfr wa_spfli-carrid wa_spfli-connid INTO node1-node_key.
CONCATENATE wa_spfli-countryfr wa_spfli-carrid INTO str1.
*上層關係
node1-relatkey = str1.
node1-relatship = cl_gui_simple_tree=>relat_last_child.
node1-hidden = ''.
node1-disabled = ''.
node1-isfolder = 'X'.
node1-n_image = '@5B@'.
node1-exp_image = '@5B@'.
CLEAR node1-expander.
* CLEAR node1.
* CONCATENATE wa_spfli-carrid ':' wa_spfli-cityfrom INTO node1-node_key.
CONCATENATE wa_spfli-countryfr ':' wa_spfli-carrid ':' wa_spfli-connid INTO str1.
node1-text = str1.
APPEND node1 TO node_table.
ENDLOOP.
CALL METHOD wa_tree->add_nodes
EXPORTING
table_structure_name = 'MTREESNODE'
node_table = node_table
EXCEPTIONS
error_in_node_table = 1
failed = 2
dp_error = 3
table_structure_name_not_found = 4
OTHERS = 5.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*
* 定義雙擊事件
event1-eventid = cl_gui_simple_tree=>eventid_node_double_click.
event1-appl_event = 'X'.
APPEND event1 TO events.
CALL METHOD wa_tree->set_registered_events
EXPORTING
events = events
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3
OTHERS = 4.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
*將已定義的雙擊事件分配至樹對象
SET HANDLER g_application->handle_node_double_click FOR wa_tree.
ENDFORM.
02-22
538
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交