*&---------------------------------------------------------------------*
*& Report YTEST00A
*&---------------------------------------------------------------------*
*&Violin 2021/4/29
*&---------------------------------------------------------------------*
REPORT ytest00a.
*第9章 Tree Control的使用---------------------------------------------------------------------*
*9.2建立有數據表接口的Tree Control對象
**功能碼返回值
DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
*定制對象
DATA: wa_container TYPE scrfname VALUE 'TREE',
*客戶對象
wa_custom_container TYPE REF TO cl_gui_custom_container,
wa_tree TYPE REF TO cl_gui_simple_tree.
*NODE節點表
DATA: node_table LIKE TABLE OF mtreesnode,
*節點
node1 TYPE mtreesnode.
DATA wa_spfli TYPE TABLE OF spfli WITH HEADER LINE.
START-OF-SELECTION.
SELECT * INTO TABLE wa_spfli FROM spfli
ORDER BY countryfr carrid connid ASCENDING.
SET SCREEN 591.
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.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE.
*創建樹及子節點
FORM create_tree.
* 建立定制控制對象
CREATE OBJECT wa_custom_container
EXPORTING
* parent =
container_name = wa_container
* style =
* lifetime = lifetime_default
* repid =
* dynnr =
* no_autodef_progid_dynnr =
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*建立樹對象
CREATE OBJECT wa_tree
EXPORTING
* lifetime =
parent = wa_custom_container
* shellstyle =
node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single
* hide_selection =
* name =
EXCEPTIONS
lifetime_error = 1
cntl_system_error = 2
create_error = 3
failed = 4
illegal_node_selection_mode = 5
others = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
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.
concatenate wa_spfli-carrid ':' wa_spfli-cityfrom 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.
ENDFORM.
創建引用對象、方法:
界面設置: