本文演示如何使用cl_gui_alv_tree_simple在屏幕上展示一个alv tree
下面是一段实例代码,基本思路是这样的:
1.在屏幕上建立一块区域,基于该区域创建一个custom container
2.在创建好的custom container里面创建一个alv tree控件
3.取数
4.设置alv tree的相关属性,包括fieldcatelog和sorted talbe(对于alv tree而言,这两个东西是必须的)
5.调用set_for_table_first_display显示data.
主程序代码如下:
TABLES sflight.
DATA: ok_code TYPE sy-ucomm.
DATA: go_container TYPE REF TO cl_gui_custom_container.
DATA: go_alv_tree TYPE REF TO cl_gui_alv_tree_simple.
DATA: gs_sflight TYPE sflight.
DATA: gt_sflight TYPE STANDARD TABLE OF sflight.
DATA: gs_sorted TYPE lvc_s_sort.
DATA: gt_sorted TYPE lvc_t_sort.
DATA: gs_field_cat TYPE lvc_s_fcat.
DATA: gt_field_cat TYPE lvc_t_fcat.
START-OF-SELECTION.
PERFORM sub_retrieve_data.
PERFORM sub_build_itabs.
CALL SCREEN 9100.
*&---------------------------------------------------------------------*
*& Module STATUS_9100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE status_9100 OUTPUT.
SET PF-STATUS 'STATUS9100'.
* SET TITLEBAR 'xxx'.
ENDMODULE. " STATUS_9100 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9100 INPUT.
CASE ok_code.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
CALL METHOD go_alv_tree->free.
CALL METHOD go_container->free.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_9100 INPUT
*&---------------------------------------------------------------------*
*& Module SHOW_ALV_TREE OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE show_alv_tree OUTPUT.
IF go_container IS INITIAL.
CREATE OBJECT go_container
EXPORTING
container_name = 'GO_CONTAINER'.
CREATE OBJECT go_alv_tree
EXPORTING
i_parent = go_container.
CALL METHOD go_alv_tree->set_table_for_first_display
CHANGING
it_outtab = gt_sflight
it_fieldcatalog = gt_field_cat
it_sort = gt_sorted.
ENDIF.
ENDMODULE. " SHOW_ALV_TREE OUTPUT
*&---------------------------------------------------------------------*
*& Form SUB_RETRIEVE_DATA
*&---------------------------------------------------------------------*
* Retrieve data from database
*----------------------------------------------------------------------*
FORM sub_retrieve_data .
SELECT *
INTO TABLE gt_sflight
FROM sflight.
ENDFORM. " SUB_RETRIEVE_DATA
*&---------------------------------------------------------------------*
*& Form SUB_BUILD_ITABS
*&---------------------------------------------------------------------*
* Build field catelogs and sorted table
*----------------------------------------------------------------------*
form SUB_BUILD_ITABS .
* Build fieldcat
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'SFLIGHT'
CHANGING
ct_fieldcat = gt_field_cat.
CLEAR gs_field_cat.
gs_field_cat-no_out = 'X'.
modify gt_field_cat FROM gs_field_cat
TRANSPORTING no_out
WHERE fieldname = 'CARRID'
OR fieldname = 'CONNID'.
CLEAR gs_field_cat.
gs_field_cat-do_sum = 'X'.
modify gt_field_cat FROM gs_field_cat
TRANSPORTING do_sum
WHERE fieldname = 'PRICE'
OR fieldname = 'PAYMENTSUM'.
* Build sorted table
gs_sorted-spos = 1.
gs_sorted-fieldname = 'CARRID'.
gs_sorted-up = 'X'.
APPEND gs_sorted to gt_sorted.
gs_sorted-spos = 2.
gs_sorted-fieldname = 'CONNID'.
gs_sorted-up = 'X'.
append gs_sorted to gt_sorted.
endform. " SUB_BUILD_ITABS
屏幕9100中的代码如下:
PROCESS BEFORE OUTPUT.
MODULE status_9100.
MODULE show_alv_tree.
PROCESS AFTER INPUT.
MODULE user_command_9100.