实现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'EXPORTINGit_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'EXPORTINGit_list_commentary = lt_listheaderi_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'EXPORTINGi_list_type     = 0IMPORTINGet_events       = gt_eventEXCEPTIONSlist_type_wrong = 1OTHERS          = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgtyNUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF."查找TOP_OF_PAGE事件,并将回调子例程传输给FORMREAD 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事件,并将回调子例程传输给FORMREAD 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_insertEXPORTINGcontents = lv_bufferCHANGINGposition = lv_pos.lv_text = '标题'.CALL METHOD document->add_textEXPORTINGtext      = lv_textsap_style = 'HEADING'."插入两行空行CALL METHOD document->new_line.CALL METHOD document->add_iconEXPORTINGsap_icon = 'ICON_CUSTOMER'."STRONG是加粗lv_text = '用户名:'.CALL METHOD document->add_textEXPORTINGtext         = lv_textsap_emphasis = 'Strong'."间隔CALL METHOD document->add_gapEXPORTINGwidth = 2.lv_text = '斌将军'.CALL METHOD document->add_textEXPORTINGtext          = lv_textsap_fontsize  = cl_dd_document=>largesap_fontstyle = cl_dd_document=>serifsap_emphasis  = cl_dd_document=>emphasis."间隔CALL METHOD document->add_gapEXPORTINGwidth = 10.CALL METHOD document->add_iconEXPORTINGsap_icon = 'ICON_DATE'.lv_text = '日期:'.CALL METHOD document->add_textEXPORTINGtext         = lv_textsap_emphasis = 'Strong'.CALL METHOD document->add_gapEXPORTINGwidth = 2.lv_text = '20240420'.CALL METHOD document->add_textEXPORTINGtext      = lv_textsap_style = 'Key'.CALL METHOD document->add_gapEXPORTINGwidth = 10.CALL METHOD document->add_iconEXPORTINGsap_icon = 'ICON_INFORMATION'.lv_text = '链接:'.CALL METHOD document->add_textEXPORTINGtext         = lv_textsap_emphasis = 'Strong'.CALL METHOD document->add_linkEXPORTINGurl     = '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_9000EXPORTINGrepid                       = sy-repiddynnr                       = '9000'side                        = cl_gui_docking_container=>dock_at_top "ALV贴屏幕左边,从左边算屏幕宽度,extension                   = 1000"屏幕宽度style                       = cl_gui_control=>ws_child "可选参数,设置ALV是否可用手动拖动大小EXCEPTIONScntl_error                  = 1cntl_system_error           = 2create_error                = 3lifetime_error              = 4lifetime_dynpro_dynpro_link = 5OTHERS                      = 6.IF sy-subrc <> 0.MESSAGE s001(00) WITH '屏幕初始化失败'.LEAVE LIST-PROCESSING.ENDIF."拆分成3行1列部分CREATE OBJECT g_splitterEXPORTINGparent  = g_container_9000rows    = 3columns = 1."第一行第一列  "用作页眉CALL METHOD g_splitter->get_containerEXPORTINGrow       = 1column    = 1RECEIVINGcontainer = g_container_t.CALL METHOD g_splitter->set_row_height   "设置行高EXPORTINGid     = 1        "第几行height = 20."第二行第一列 用作展示主要数据CALL METHOD g_splitter->get_containerEXPORTINGrow       = 2column    = 1RECEIVINGcontainer = g_container_m."第三行第一列   "用作页脚CALL METHOD g_splitter->get_containerEXPORTINGrow       = 3column    = 1RECEIVINGcontainer = g_container_e.CALL METHOD g_splitter->set_row_height   "设置行高EXPORTINGid     = 3        "第几行height = 20.CREATE OBJECT g_grid "中间部分为展示主数据EXPORTINGi_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_gridIMPORTING e_dyndoc_id.METHODS handle_end_of_list FOR EVENT end_of_list OF cl_gui_alv_gridIMPORTING 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_displayEXPORTINGi_save                        = 'A'i_default                     = 'X' "允许定义默认布局is_layout                     = gs_layoutCHANGINGit_outtab                     = gt_alvit_fieldcatalog               = gt_fieldcatEXCEPTIONSinvalid_parameter_combination = 1program_error                 = 2too_many_lines                = 3OTHERS                        = 4.IF sy-subrc <> 0.ENDIF.CREATE OBJECT g_dyndoc_tEXPORTINGstyle = '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_eventsEXPORTINGi_event_name = 'TOP_OF_PAGE'i_dyndoc_id  = g_dyndoc_t.CREATE OBJECT g_dyndoc_eEXPORTINGstyle = 'ALV_GRID'."对于页脚使用END_OF_LIST事件CALL METHOD g_grid->list_processing_eventsEXPORTINGi_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_insertEXPORTINGcontents = lv_bufferCHANGINGposition = lv_pos."页脚HTML视图IF g_html_e IS INITIAL.CREATE OBJECT g_html_eEXPORTINGparent = g_container_e.ENDIF.CALL METHOD document->merge_document.document->html_control = g_html_e."显示CALL METHOD document->display_documentEXPORTINGreuse_control      = 'X'parent             = g_container_eEXCEPTIONShtml_display_error = 1.
ENDFORM.
"--------------------@斌将军--------------------

参考代码,可通过链接获取

链接:https://pan.baidu.com/s/18bNmfmC9zSh1Si8W6AhQCQ?pwd=c0oj
提取码:c0oj

5、总结

以上就是关于ALV合并单元格的介绍,希望对您有所帮助。

定期更文,欢迎关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/645308.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贝叶斯网络(概念、应用、实例)

目录 一、贝叶斯网络基本概念 1.1主要组成 1.2概率模型 1.3应用场景 1.4推理方法 1.5学习 二、贝叶斯网络在机器学习中的应用 三、应用实例 3.1分类 3.2推荐系统 3.3自然语言处理 一、贝叶斯网络基本概念 贝叶斯网络&#xff0c;也称为信念网络或有向无环图模型&am…

JMeter压测

1.创建线程组 2.创建http请求 填写接口基本信息。&#xff08;我这里用的是我自己的一个demo项目&#xff0c;大家也可以换成自己的试一试&#xff09; 填写完毕之后我们点击绿色箭头运行。由于没有配置请求头信息&#xff0c;所以显示认证失败。 3.创建信息头管理器 3.1为什么…

基于激光雷达的作物表型研究论文汇总

文章目录 2018How Universal Is the Relationship between Remotely Sensed Vegetation Indices and Crop Leaf Area Index? A Global Assessment[J] 2021结合移动式激光雷达和 CropQuant-3D 对不同氮素处理小麦的大规模田间表型分析[M] 2023基于地基激光雷达和 RGB 相机对小麦…

MySQL多版本并发控制mvcc原理浅析

文章目录 1.mvcc简介1.1mvcc定义1.2mvcc解决的问题1.3当前读与快照读 2.mvcc原理2.1隐藏字段2.2版本链2.3ReadView2.4读视图生成原则 3.rc和rr隔离级别下mvcc的不同 1.mvcc简介 1.1mvcc定义 mvcc(Multi Version Concurrency Control)&#xff0c;多版本并发控制&#xff0c;是…

买婴儿洗衣机怎么选择?推荐四大表现突出的宝藏婴儿洗衣机

现在还有人把宝宝衣服跟大人的混洗吗&#xff1f;或者把婴儿衣物跟其他衣物混洗吗&#xff1f;赶紧停止吧&#xff01;这样会带来非常严重的细菌交叉的感染&#xff0c;有小孩的家庭&#xff0c;或者说打算生小孩的家庭&#xff0c;一定要入手一台小型婴儿洗衣机&#xff0c;宝…

jmeter之跨线程关联

1&#xff09;_setproperty函数&#xff1a;将值保存成jmeter属性 2&#xff09;_property函数&#xff1a;在其他线程组中使用property函数读取属性 一、跨线程接口引用变量 1. 法一&#xff1a;jmeter自带函数_setProperty和_property 1. 1线程组 01 创建登录的【HTTP请求】…

学python的第二十天

多线程 以下内容来源于《看漫画学Python》这本书&#xff0c;前面十几天好多内容参考过本书内容&#xff0c;写的挺好。 1 线程相关知识 1.1 进程 一个进程就是一个正在执行的程序&#xff0c;每一个进程都有自己独立的一块内存空间&#xff0c;一组系统资源。在进程概念中&…

JVM (Micrometer)监控SpringBoot(AWS EKS版)

问题 怎样使用JVM (Micrometer)面板&#xff0c;监控Spring&#xff1f;这里不涉及Prometheus和Grafana&#xff0c;重点介绍与Micrometer与Springboot&#xff0c;k8s怎样集成。 pom.xml 引入依赖&#xff0c;如下&#xff1a; <properties><micrometer.version&…

STM32与Proteus的串口仿真详细教程与源程序

包含LCD1602显示&#xff0c;串口发送接收&#xff0c;完美实现。 文档内容齐全&#xff0c;包含使用说明&#xff0c;相关驱动等。 解决了STM32的Proteus串口收发问题。 注意&#xff1a;每输入一个字符后&#xff0c;要按一次“手动发送”按钮&#xff0c;才能收到正确字符…

【NoC片上网络 On-Chip Network】应用程序的网络流量 合成网络流量

应用程序的网络流量 and 合成网络流量 1. 应用程序的网络流量 APPLICATION TRAFFIC2. 合成网络流量 SYNTHETIC TRAFFIC3. 合成网络流量的具体介绍 应用程序的网络流量 and 合成网络流量 1. 应用程序的网络流量 APPLICATION TRAFFIC 在 MPSoC(多处理器片上系统) 中&#xff…

【leetcode面试经典150题】63. 删除链表的倒数第 N 个结点(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件

实现日志收集服务的客户端 前言 从这篇文章开始我们就正式进入了日志收集系统的编写&#xff0c;后面几篇文章我们将学习到如何编写日志收集服务的客户端,话不多说,让我们进入今天的内容吧&#xff01; 需要实现的功能 我们要收集指定目录下的日志文件&#xff0c;将它们发…