做alv經常會要求帶有header和footer資訊,本文講解如何制作帶有header的alv,學會header之後,最後會貼出作者的代碼。
插入header的關鍵: 在調用REUSE_ALV_GRID_DISPLAY 的時候傳入一個subroutine給i_callback_top_of_page 參數,然後在該subroutine裡面寫代碼。 要記住,想要顯示header還必須傳入目前程式名(sy-repid)給i_callback_program 參數,否則會無法顯示。
以下是執行個體代碼:
TYPE-POOLS: slis.
TABLES: sflight.
* Define internal table
DATA: gs_sflight TYPE sflight.
DATA: gt_sflight TYPE STANDARD TABLE OF sflight.
* Define ALV control data
DATA: gs_layout TYPE slis_layout_alv.
DATA: gs_field_cat TYPE slis_fieldcat_alv.
DATA: gt_field_cat TYPE slis_t_fieldcat_alv.
START-OF-SELECTION.
PERFORM sub_retrieve_data.
PERFORM sub_set_alv_properties.
PERFORM sub_alv_display.
*&---------------------------------------------------------------------*
*& Form SUB_RETRIEVE_DATA
*&---------------------------------------------------------------------*
* Retrieve data
*----------------------------------------------------------------------*
FORM sub_retrieve_data .
SELECT *
INTO TABLE gt_sflight
FROM sflight UP TO 20 ROWS.
ENDFORM. " SUB_RETRIEVE_DATA
*&---------------------------------------------------------------------*
*& Form SUB_ALV_DISPLAY
*&---------------------------------------------------------------------*
* Display data
*----------------------------------------------------------------------*
FORM sub_alv_display .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_top_of_page = 'SUB_TOP_OF_PAGE'
is_layout = gs_layout
it_fieldcat = gt_field_cat
i_save = 'X'
TABLES
t_outtab = gt_sflight.
ENDFORM. " SUB_ALV_DISPLAY
*&---------------------------------------------------------------------*
*& Form SUB_SET_ALV_PROPERTIES
*&---------------------------------------------------------------------*
* build field catelog and layout
*----------------------------------------------------------------------*
FORM sub_set_alv_properties .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'SFLIGHT'
CHANGING
ct_fieldcat = gt_field_cat.
gs_layout-colwidth_optimize = 'X'.
ENDFORM. " SUB_SET_ALV_PROPERTIES
*&---------------------------------------------------------------------*
*& Form sub_top_of_page
*&---------------------------------------------------------------------*
* subroutine to set header of ALV
*----------------------------------------------------------------------*
FORM sub_top_of_page.
DATA: lt_header TYPE slis_t_listheader.
DATA: ls_header TYPE slis_listheader.
ls_header-typ = 'H'.
ls_header-info = 'Flight Detailed Information'.
APPEND ls_header TO lt_header.
ls_header-typ = 'S'.
ls_header-key = 'Date:'.
ls_header-info = sy-datum.
APPEND ls_header TO lt_header.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = lt_header.
ENDFORM. "sub_top_of_page