实现ALV页眉页脚

本文详细介绍了如何在ALV和OOALV中添加和定制页眉页脚,包括使用函数、ALV事件、HTML代码以及OOALV的屏幕分割,展示了不同实现方式和示例代码。
摘要由CSDN通过智能技术生成

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合并单元格的介绍,希望对您有所帮助。

定期更文,欢迎关注

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 智慧社区背景与挑战 随着城市化的快速发展,社区面临健康、安全、邻里关系和服务质量等多方面的挑战。华为技术有限公司提出智慧社区解决方案,旨在通过先进的数字化技术应对这些问题,提升城市社区的生活质量。 2. 技术推动智慧社区发展 技术进步,特别是数字化、无线化、移动化和物联化,为城市社区的智慧化提供了可能。这些技术的应用不仅提高了社区的运行效率,也增强了居民的便利性和安全性。 3. 智慧社区的核心价值 智慧社区承载了智慧城市的核心价值,通过全面信息化处理,实现对城市各个方面的数字网络化管理、服务与决策功能,从而提升社会服务效率,整合社会服务资源。 4. 多层次、全方位的智慧社区服务 智慧社区通过构建和谐、温情、平安和健康四大社区模块,满足社区居民的多层次需求。这些服务模块包括社区医疗、安全监控、情感沟通和健康监测等。 5. 智慧社区技术框架 智慧社区技术框架强调统一平台的建设,设立数据中心,构建基础网络,并通过分层建设,实现平台能力及应用的可持续成长和扩展。 6. 感知统一平台与服务方案 感知统一平台是智慧社区的关键组成部分,通过统一的RFID身份识别和信息管理,实现社区服务的智能化和便捷化。同时,提供社区内外监控、紧急救助服务和便民服务等。 7. 健康社区的构建 健康社区模块专注于为居民提供健康管理服务,通过整合医疗资源和居民接入,实现远程医疗、慢性病管理和紧急救助等功能,推动医疗模式从治疗向预防转变。 8. 平安社区的安全保障 平安社区通过闭路电视监控、防盗报警和紧急求助等技术,保障社区居民的人身和财产安全,实现社区环境的实时监控和智能分析。 9. 温情社区的情感沟通 温情社区着重于建立社区居民间的情感联系,通过组织社区活动、一键呼叫服务和互帮互助平台,增强邻里间的交流和互助。 10. 和谐社区的资源整合 和谐社区作为社会资源的整合协调者,通过统一接入和身份识别,实现社区信息和服务的便捷获取,提升居民生活质量,促进社区和谐。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值