实现ALV页眉页脚
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(<fs_ls_event>) WITH KEY name = slis_ev_top_of_page. IF sy-subrc = 0. <fs_ls_event>-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 ASSIGNING <fs_ls_event> WITH KEY name = slis_ev_end_of_list. IF sy-subrc = 0. <fs_ls_event>-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 = '<HTML><CENTER><H1>' && '页眉' && '</H1></CENTER></HTML>'. 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 分割屏幕 》
"--------------------@斌将军-------------------- *&---------------------------------------------------------------------* *& Form FRM_CREATE_CONTAINER_9000 *& 创建容器 *&---------------------------------------------------------------------* FORM frm_create_container_9000. "创建 容器 CREATE OBJECT g_container_9000 EXPORTING repid = sy-repid dynnr = '9000' side = cl_gui_docking_container=>dock_at_top "ALV贴屏幕左边,从左边算屏幕宽度, extension = 1000"屏幕宽度 style = cl_gui_control=>ws_child "可选参数,设置ALV是否可用手动拖动大小 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 s001(00) WITH '屏幕初始化失败'. LEAVE LIST-PROCESSING. ENDIF. "拆分成3行1列部分 CREATE OBJECT g_splitter EXPORTING parent = g_container_9000 rows = 3 columns = 1. "第一行第一列 "用作页眉 CALL METHOD g_splitter->get_container EXPORTING row = 1 column = 1 RECEIVING container = g_container_t. CALL METHOD g_splitter->set_row_height "设置行高 EXPORTING id = 1 "第几行 height = 20. "第二行第一列 用作展示主要数据 CALL METHOD g_splitter->get_container EXPORTING row = 2 column = 1 RECEIVING container = g_container_m. "第三行第一列 "用作页脚 CALL METHOD g_splitter->get_container EXPORTING row = 3 column = 1 RECEIVING container = g_container_e. CALL METHOD g_splitter->set_row_height "设置行高 EXPORTING id = 3 "第几行 height = 20. CREATE OBJECT g_grid "中间部分为展示主数据 EXPORTING i_parent = g_container_m. ENDFORM. "--------------------@斌将军--------------------
定义类和方法,实现页眉和页脚
"--------------------@斌将军-------------------- CLASS alv_event_9000 DEFINITION DEFERRED." CLASS alv_event_9000 DEFINITION. PUBLIC SECTION. METHODS handle_top_of_page FOR EVENT top_of_page OF cl_gui_alv_grid IMPORTING e_dyndoc_id. METHODS handle_end_of_list FOR EVENT end_of_list OF cl_gui_alv_grid IMPORTING e_dyndoc_id. ENDCLASS. "alv_event_9000 DEFINITION *----------------------------------------------------------------------* * CLASS BELOW_ALV_EVENT IMPLEMENTATION 定义的事件类对应的事件响应模块 *----------------------------------------------------------------------* CLASS alv_event_9000 IMPLEMENTATION. METHOD handle_top_of_page. PERFORM frm_event_top_of_page USING g_dyndoc_t. ENDMETHOD. METHOD handle_end_of_list. PERFORM frm_event_end_of_list USING g_dyndoc_e. ENDMETHOD. ENDCLASS. "alv_event_9000 IMPLEMENTATION "--------------------@斌将军--------------------
在事件中注册页眉和页脚方法
"--------------------@斌将军-------------------- FORM frm_alv_event_9000. DATA: lr_event_handler TYPE REF TO alv_event_9000. IF lr_event_handler IS INITIAL. CREATE OBJECT lr_event_handler. ENDIF. SET HANDLER lr_event_handler->handle_top_of_page FOR g_grid. SET HANDLER lr_event_handler->handle_end_of_list FOR g_grid. ENDFORM. "--------------------@斌将军--------------------
显示ALV
"--------------------@斌将军-------------------- CALL METHOD g_grid->set_table_for_first_display EXPORTING i_save = 'A' i_default = 'X' "允许定义默认布局 is_layout = gs_layout CHANGING it_outtab = gt_alv it_fieldcatalog = gt_fieldcat EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4. IF sy-subrc <> 0. ENDIF. CREATE OBJECT g_dyndoc_t EXPORTING style = 'ALV_GRID'. * CALL METHOD g_dyndoc_t->initialize_document * EXPORTING * background_color = cl_dd_area=>col_textarea. "对于页眉使用TOP_OF_PAGE事件 CALL METHOD g_grid->list_processing_events EXPORTING i_event_name = 'TOP_OF_PAGE' i_dyndoc_id = g_dyndoc_t. CREATE OBJECT g_dyndoc_e EXPORTING style = 'ALV_GRID'. "对于页脚使用END_OF_LIST事件 CALL METHOD g_grid->list_processing_events EXPORTING i_event_name = 'END_OF_LIST' i_dyndoc_id = g_dyndoc_e. "--------------------@斌将军--------------------
页眉和页脚的子例程类似,页脚子例程如下
"--------------------@斌将军-------------------- FORM frm_event_end_of_list 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 = '<HTML><CENTER><H1>' && '页脚' && '</H1></CENTER></HTML>'. CALL METHOD document->html_insert EXPORTING contents = lv_buffer CHANGING position = lv_pos. "页脚HTML视图 IF g_html_e IS INITIAL. CREATE OBJECT g_html_e EXPORTING parent = g_container_e. ENDIF. CALL METHOD document->merge_document. document->html_control = g_html_e. "显示 CALL METHOD document->display_document EXPORTING reuse_control = 'X' parent = g_container_e EXCEPTIONS html_display_error = 1. ENDFORM. "--------------------@斌将军--------------------
参考代码,可通过链接获取
链接:https://pan.baidu.com/s/18bNmfmC9zSh1Si8W6AhQCQ?pwd=c0oj
提取码:c0oj
5、总结
以上就是关于ALV合并单元格的介绍,希望对您有所帮助。
定期更文,欢迎关注