**1**
**文档介绍**
在ALV中,可以通过增加页眉和页脚,丰富ALV的展示。除了基本的页眉和页脚,还可以通过插入HTML代码的方式展示更加丰富的页眉和页脚,本篇文章将介绍ALV和OOALV中页眉页脚的使用。
**2**
**ALV页眉页脚**
效果如下
**2.1**
**显示的内容**
页眉和页脚,都通过函数REUSE_ALV_COMMENTARY_WRITE显示内容。
页眉
"--------------------@斌将军--------------------FORM FRM_TOP_OF_PAGE .
DATA:lt_listheader TYPE slis_t_listheader, ls_listheader TYPE slis_listheader.
CLEAR:ls_listheader. ls_listheader-typ = 'H'."标题 ls_listheader-info = '页眉'. APPEND ls_listheader TO lt_listheader.
CLEAR ls_listheader. ls_listheader-typ = 'S'. ls_listheader-key = '编制单位:'. ls_listheader-info = '1100'. APPEND ls_listheader TO lt_listheader.
CLEAR ls_listheader. ls_listheader-typ = 'S'. ls_listheader-info = '1200'. APPEND ls_listheader TO lt_listheader.
CLEAR ls_listheader. ls_listheader-typ = 'A'. ls_listheader-info = '单位:元'. APPEND ls_listheader TO lt_listheader.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = lt_listheader "显示的数据 i_logo = 'ENJOYSAP_LOGO' "显示的图片LOGO* I_END_OF_LIST_GRID =* I_ALV_FORM = .ENDFORM. " FRM_TOP_OF_PAGE"--------------------@斌将军--------------------页脚
"--------------------@斌将军--------------------FORM FRM_END_OF_LIST .
DATA:lt_listheader TYPE slis_t_listheader, ls_listheader TYPE slis_listheader.
CLEAR:ls_listheader. ls_listheader-typ = 'H'. ls_listheader-info = '页脚'. APPEND ls_listheader TO lt_listheader.
CLEAR ls_listheader. ls_listheader-typ = 'S'. ls_listheader-key = '作者:'. ls_listheader-info = '斌将军'. APPEND ls_listheader TO lt_listheader.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = lt_listheader i_logo = 'ENJOYSAP_LOGO'* I_END_OF_LIST_GRID =* I_ALV_FORM = .ENDFORM. " FRM_END_OF_LIST"--------------------@斌将军--------------------其中的LOGO,可以通过事务代码OAER,输入对应信息
找到对应LOGO
**2.2**
**ALV事件方式实现**
实现页眉和页脚,都可以通过注册ALV事件EVENT,调用对应的子例程,显示对应内容
事件代码
"--------------------@斌将军--------------------
DATA:gt_event TYPE slis_t_event."事件FORM frm_get_event.
DATA:lv_frm_top_of_page TYPE slis_formname VALUE 'FRM_TOP_OF_PAGE',"页眉子例程 lv_frm_end_of_list TYPE slis_formname VALUE 'FRM_END_OF_LIST',"页脚子例程 ls_events TYPE slis_alv_event."获取事件 CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING i_list_type = 0 IMPORTING et_events = gt_event EXCEPTIONS list_type_wrong = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.
"查找TOP_OF_PAGE事件,并将回调子例程传输给FORM READ TABLE gt_event ASSIGNING FIELD-SYMBOL() WITH KEY name = slis_ev_top_of_page. IF sy-subrc = 0. -form = lv_frm_top_of_page. ELSE. CLEAR:ls_events. ls_events-form = lv_frm_top_of_page. ls_events-name = lv_frm_top_of_page. APPEND ls_events TO gt_event. ENDIF.
"查找END_OF_LIST事件,并将回调子例程传输给FORM READ TABLE gt_event ASSIGNINGWITH KEY name = slis_ev_end_of_list. IF sy-subrc = 0. -form = lv_frm_end_of_list. ELSE. CLEAR:ls_events. ls_events-form = lv_frm_end_of_list. ls_events-name = lv_frm_end_of_list. APPEND ls_events TO gt_event. ENDIF.
ENDFORM. " FRM_GET_EVENT"--------------------@斌将军--------------------在调用ALV时,传入EVENT
**2.3**
**ALV参数实现页眉**
如果单独实现页眉效果,就不需要这么复杂,可以直接将页眉子例程传入ALV函数REUSE_ALV_GRID_DISPLAY_LVC的I_CALLBACK_TOP_OF_PAGE参数中,调用子例程
**3**
**ALV展示HTML页眉页脚**
效果如下
ALV
页眉和页脚的子例程代码类似
"--------------------@斌将军--------------------FORM frm_html_top_of_page USING document TYPE REF TO cl_dd_document.
DATA:lv_pos TYPE i, lv_text TYPE sdydo_text_element, lv_buffer TYPE string.
lv_buffer = ' && '页眉' && ''.
CALL METHOD document->html_insert EXPORTING contents = lv_buffer CHANGING position = lv_pos.
lv_text = '标题'. CALL METHOD document->add_text EXPORTING text = lv_text sap_style = 'HEADING'."插入两行空行 CALL METHOD document->new_line.
CALL METHOD document->add_icon EXPORTING sap_icon = 'ICON_CUSTOMER'.
"STRONG是加粗 lv_text = '用户名:'. CALL METHOD document->add_text EXPORTING text = lv_text sap_emphasis = 'Strong'."间隔 CALL METHOD document->add_gap EXPORTING width = 2.
lv_text = '斌将军'. CALL METHOD document->add_text EXPORTING text = lv_text sap_fontsize = cl_dd_document=>large sap_fontstyle = cl_dd_document=>serif sap_emphasis = cl_dd_document=>emphasis."间隔 CALL METHOD document->add_gap EXPORTING width = 10.
CALL METHOD document->add_icon EXPORTING sap_icon = 'ICON_DATE'.
lv_text = '日期:'. CALL METHOD document->add_text EXPORTING text = lv_text sap_emphasis = 'Strong'.
CALL METHOD document->add_gap EXPORTING width = 2.
lv_text = '20240420'. CALL METHOD document->add_text EXPORTING text = lv_text sap_style = 'Key'.
CALL METHOD document->add_gap EXPORTING width = 10.
CALL METHOD document->add_icon EXPORTING sap_icon = 'ICON_INFORMATION'.
lv_text = '链接:'. CALL METHOD document->add_text EXPORTING text = lv_text sap_emphasis = 'Strong'.
CALL METHOD document->add_link EXPORTING url = 'http://www.baidu.com' tooltip = '百度' "小手指的提示信息 text = 'Baidu'."横线 CALL METHOD document->underline.
ENDFORM. "HTML_TOP_OF_PAGE"--------------------@斌将军--------------------**4**
**OOALV页眉页脚**
效果如下
首先,如上图将界面分为上、中、下三部分。
> 关于屏幕分割,也可以参考《OOALV 分割屏幕 》
>
> 斌将军,公众号:斌将军 [ OOALV 分割屏幕
> ](https://mp.weixin.qq.com/s?__biz=Mzg5OTg3ODg2MQ==&mid=2247484229&idx=3&sn=53597e1b375a204fc0e4b00e87dbaaff&chksm=c04dd9e7f73a50f107e9493946a5f65ab232067af9a9251ed49bc344b3a420ef4882f9cf8738#rd)
"--------------------@斌将军--------------------*&---------------------------------------------------------------------**& Form FRM_CREATE_CONTAINER_9000*& 创建容器*&---------------------------------------------------------------------*FORM frm_create_container_9000.
"创建 容器 CREATE OBJECT g_container_9000 EXPORTING repid = sy-repid dynnr = '
...