ABAP OO的方式实现ALV_abap ooalv-程序员宅基地

技术标签: erp  sap  后端  abap  大数据  

1.ALV 相关参数定义

代码如下:

DATA: gcl_alvgrid TYPE REF TO cl_gui_alv_grid,
      gcl_docking TYPE REF TO cl_gui_docking_container,
*      gc_container TYPE REF TO cl_gui_custom_container,"控件
*      gc_container TYPE REF TO cl_gui_docking_container, "全屏
      gc_textedit TYPE REF TO cl_gui_textedit,
      gt_fieldcat TYPE lvc_t_fcat,
      gs_fieldcat TYPE lvc_s_fcat,
      gs_layout   TYPE lvc_s_layo,
      gt_toolbar  TYPE ui_functions.

2.定义OOALV的单击事件及实现

CLASS cl_event_receiver DEFINITION.
  PUBLIC SECTION.
    " 声明单击事件的方法
    CLASS-METHODS handle_hotspot_click FOR EVENT hotspot_click OF cl_gui_alv_grid    "屏幕中的单击事件,可以具体到某行某列,需要设置热点
      IMPORTING e_row_id e_column_id es_row_no.
ENDCLASS.

CLASS cl_event_receiver IMPLEMENTATION.  "实现类方法
  "ALV内表展示处单击事件捕捉,需要设置热点对单击列字段
  METHOD handle_hotspot_click.
    CLEAR gs_alv.
    READ TABLE gt_alv INTO gs_alv INDEX es_row_no-row_id. "判断行号
    "点设备号(EQUNR)调用tcode IE03,点资产号(ANLNR)调用AS03
    CASE e_column_id-fieldname . "判断列名
      WHEN 'EQUNR'.
        SET PARAMETER ID 'EQN' FIELD gs_alv-equnr.
        CALL TRANSACTION 'IE03' WITH AUTHORITY-CHECK AND SKIP FIRST SCREEN. "点设备号(EQUNR)调用IE03,参数:设备号
      WHEN 'ANLN1'.
        SET PARAMETER ID: 'AN1' FIELD gs_alv-anln1,
                          'BUK' FIELD gs_alv-bukrs.
        CALL TRANSACTION 'AS03' WITH AUTHORITY-CHECK AND SKIP FIRST SCREEN."调入方,点资产号(ANLN1)调用AS03,参数:资产号+公司号
    ENDCASE.
    CLEAR gs_alv.
  ENDMETHOD.

3.获取数据并展示

代码如下:

START-OF-SELECTION.
*----------------------逻辑取数------------------*
  PERFORM frm_query_data.

*-----------------------展示数据---------------------*
  PERFORM frm_show_data.
  
  FORM frm_show_data .
  "创建ALV结构
  	PERFORM frm_build_fcat.

  "设置ALV输出格式及保存变式
  	PERFORM frm_set_layout.

  "显示ALV数据
	PERFORM frm_display_alv.

  	CALL SCREEN 100.
ENDFORM.

4.表头字段设置

代码如下:

FORM frm_build_fcat .
	DEFINE fieldcat_add.
		CLEAR gs_fieldcat.
		l_index  = l_index + 1.
 		gs_fieldcat-col_pos    = l_index.
 	    gs_fieldcat-fieldname  = &1.
 		gs_fieldcat-reptext    = &2.
 		gs_fieldcat-outputlen  = &3.
 		gs_fieldcat-no_zero    = &4.
 		gs_fieldcat-decimals   = &5.
 		gs_fieldcat-just       = &6.
 		gs_fieldcat-hotspot    = &7.
 		gs_fieldcat-ref_table  = &8.
 		gs_fieldcat-edit       = &9.			"这一列设为可编辑状态
 		APPEND gs_fieldcat TO gt_fieldcat.
 	END-OF-DEFINITION.
 	l_index = 1.
 	fieldcat_add 'XUHAO'         '序号' '' '' '' '' '' '' ''.
 	fieldcat_add 'BUKRS'         '公司代码' '' '' '' '' '' '' ''.
 	fieldcat_add 'ANLN1'         '财务资产编码' '' '' '' '' 'X' '' ''.
 	fieldcat_add 'ANLKL'         '财务资产类别' '' '' '' '' '' '' ''.
 	fieldcat_add 'TXT50'         '财务资产名称' '' '' '' '' '' '' ''.
 	fieldcat_add 'MENGE'         '财务数量' '' '' '' '' '' '' ''.
 	fieldcat_add 'MEINS'         '财务单位' '' '' '' '' '' '' ''.
 	fieldcat_add 'KOSTLV'        '财务成本中心' '' '' '' '' '' '' ''.
 	fieldcat_add 'EQUNR'         'PM资产号' '' '' '' '' 'X' '' ''.
ENDFORM.

5.ALV输出格式

代码如下

FORM frm_set_layout .
  CLEAR: gs_layout.
  gs_layout-grid_title = 'OO-ALV报表'.
  gs_layout-zebra = 'X'.
  gs_layout-cwidth_opt = 'X'.
  gs_layout-no_merging = 'X'.
  gs_layout-sel_mode = 'C'."'A'.
  gs_layout-edit_mode = 'X'.
  "gs_layout-box_fname = 'SEL'.
ENDFORM.

6.展示ALV

代码如下

FORM frm_display_alv .
  DATA: lt_tools TYPE TABLE OF sy-ucomm.   "用于排除按钮
  DATA: cl_event_receiver TYPE REF TO cl_event_receiver.
  DATA ls_stbl TYPE lvc_s_stbl.

  FIELD-SYMBOLS: <lfs_tab> TYPE STANDARD TABLE.
  ls_stbl-row = 'X'." 基于行的稳定刷新
  ls_stbl-col = 'X'." 基于列稳定刷新

  ASSIGN gt_alv TO <lfs_tab>.

  CHECK <lfs_tab> IS ASSIGNED.

  IF gcl_docking IS NOT BOUND.
    CREATE OBJECT gcl_docking
      EXPORTING
*       parent                      =
        repid                       = sy-repid
        dynnr                       = '0100'
        side                        = cl_gui_docking_container=>dock_at_bottom "dock_at_top
        extension                   = 500
*       style                       =
*       lifetime                    = lifetime_default
*       caption                     =
*       metric                      = 0
*       ratio                       = 0
*       no_autodef_progid_dynnr     =
*       name                        =
      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 ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.


    CREATE OBJECT gcl_alvgrid
      EXPORTING
*       i_shellstyle      = 0
*       i_lifetime        =
        i_parent          = gcl_docking
*       i_appl_events     = space
*       i_parentdbg       =
*       i_applogparent    =
*       i_graphicsparent  =
*       i_name            =
*       i_fcat_complete   = SPACE
      EXCEPTIONS
        error_cntl_create = 1
        error_cntl_init   = 2
        error_cntl_link   = 3
        error_dp_create   = 4
        OTHERS            = 5.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    CALL METHOD gcl_alvgrid->set_table_for_first_display
      EXPORTING
*       i_buffer_active               =
*       i_bypassing_buffer            =
*       i_consistency_check           =
*       i_structure_name              =
*       is_variant                    =
        i_save                        = 'A'
*       i_default                     = 'X'
        is_layout                     = gs_layout
*       is_print                      =
*       it_special_groups             =
        it_toolbar_excluding          = lt_tools
*       it_hyperlink                  =
*       it_alv_graphics               =
*       it_except_qinfo               =
*       ir_salv_adapter               =
      CHANGING
        it_outtab                     = <lfs_tab>
        it_fieldcatalog               = gt_fieldcat
*       it_sort                       =
*       it_filter                     =
      EXCEPTIONS
        invalid_parameter_combination = 1
        program_error                 = 2
        too_many_lines                = 3
        OTHERS                        = 4.
  ELSE.
    " PERFORM frm_refresh_alv USING gcl_alvgrid.

    CALL METHOD cl_gui_cfw=>flush
      EXCEPTIONS
        cntl_system_error = 1
        cntl_error        = 2
        OTHERS            = 3.

******注册ALV中引用的事件
  ENDIF.
  CREATE OBJECT cl_event_receiver.
  SET HANDLER cl_event_receiver=>handle_hotspot_click
              "alv_event_receiver=>handle_double_click
           FOR ALL INSTANCES.
ENDFORM.

7.其他

在100屏幕设置status和title

PROCESS BEFORE OUTPUT.
 MODULE STATUS_0100.
*
PROCESS AFTER INPUT.
 MODULE USER_COMMAND_0100.

MODULE status_0100 OUTPUT.
 SET PF-STATUS 'STA_100'.
 SET TITLEBAR 'TILLE100'.
ENDMODULE.

MODULE user_command_0100 INPUT.
  CASE ok_code.
  	WHEN 'BACK' OR 'CANCLE'.
    	LEAVE TO SCREEN 0.
    WHEN 'EXIT'.
   		 LEAVE PROGRAM.
   	WHEN OTHERS.
  ENDCASE.
ENDMODULE.
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tao273849019/article/details/109673883

智能推荐

KlayGE 4.0中Deferred Rendering的改进(四):GI的神话-程序员宅基地

文章浏览阅读59次。转载请注明出处为KlayGE游戏引擎上一篇解决了透明物体的渲染问题;本文将挑战另一个实时渲染的神话,实时全局光照(GI)。实时全动态GI目前direct lighting在游戏中日趋成熟,比较前卫的游戏引擎已经不满足于diect lighting的效果了,逐渐开始尝试indirect lighting。早期的方法有通过离线渲染light map来实现静态场景、静态光源的GI。接着出现...

初识Git_git必须用网络吗-程序员宅基地

文章浏览阅读433次。Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。简言概括:Git就是分布式版本控制。_git必须用网络吗

搭建Vulhub靶场 【附图】_vulhub靶场搭建-程序员宅基地

文章浏览阅读2.1w次,点赞59次,收藏265次。目录0x01简单概述0x02安装环境1. kali设置2. 更新软件源中的所有软件列表3. 安装https协议及CA证书0x03安装步骤一、安装Docker1. 下载安装2. 查看Docker是否安装成功3. 查看docker基本信息二、安装vluhub1. 安装pip32. 安装Docker-Compose3. 查看docker-compose版本三、安装vulhub靶场1. 克隆下载2. 随便进入一个靶场环境目录3. 对靶场进行编译4. 运行此靶场5. 查看启动环境6. 通过浏览器访问7. 关闭此靶场环_vulhub靶场搭建

sensei鼠标测试软件,「硬核测试:游戏鼠标精准度」赛睿SENSEI 310-程序员宅基地

文章浏览阅读564次。原标题:「硬核测试:游戏鼠标精准度」赛睿SENSEI 310作为赛睿最热销游戏鼠标之一,310有SENSEI(对称)和RIVAL(右手)两个版本,均采用今天要测的TrueMove3引擎,是基于PMW3360打造的1:1真实追踪的引擎,虽然现在“1:1引擎”很多了,但TrueMove出来时这个概念还是很新颖的,尤其是提到了消除抖动,最大限度的保持理论和实际DPI的稳定性,那么到底是不是真的1:1呢,..._鼠标精确度检测软件

国际酒店预订APP_基于android平台的酒店预订管理系统软件设计的论文-程序员宅基地

文章浏览阅读209次,点赞6次,收藏5次。随着人们生活水平的提高和旅游业的迅速发展,国际酒店的预订需求越来越大。为满足用户的需求,安卓国际酒店预订APP应运而生。本文旨在详细介绍该APP的设计与实现过程,以提供方便、快捷、安全的酒店预订服务。首先,本文将介绍课题的背景和国内外现状与趋势。随着国内外旅游业的快速发展,人们对旅游住宿的需求也越来越高。同时,随着移动互联网的普及,手机APP已经成为人们预订酒店的首选方式。因此,开发一款便捷、实用的酒店预订APP已经成为当务之急。接着,本文将详细阐述系统的设计和实现过程。_基于android平台的酒店预订管理系统软件设计的论文

DirectX9 ShadowMap例子学习笔记_g_aminitobjworld-程序员宅基地

文章浏览阅读2.7k次。本文版权归博客园 mavaL所有,如有转载请按如下方式详细标明原创作者及出处,以示尊重!!原创作者:mavaL原文链接:DirectX9 ShadowMap例子学习笔记学习SDK例子真是快速加强编程能力的途径,然而虽如此,微软不仅在每个例子中展示了本_g_aminitobjworld

随便推点

Power BI DAX 分组排名 分层排名_powerbi分组排名-程序员宅基地

文章浏览阅读2.2k次,点赞5次,收藏2次。这个DAX公式采取类似Excel行上下文的功能,首先建立一个参数等于类别,在Rankx函数第一个参数添加一个Filter,实现同一类别内进行排名,即分层排名。上述DAX公式使用的是ALLEXCEPT函数,是ALL家族函数,功能是除了第二个参数【类别】都是行上下文计算排名,这样就实现了分组分层排名。如上例,Rankx只有前两个参数是必要的,实际可以输入五个参数,设置排序方式。通过在第一个参数添加函数可以实现进阶功能,例如分组分层排名,依旧使用上述数据。再使用Rankx计算排名。首先建立销售和度量值。_powerbi分组排名

快速访问中的ftp文件夹右键没有选项,无法删除如何解决-程序员宅基地

文章浏览阅读894次。随便在以一个目录里新建一个快捷方式,填上ftp地址,如下:下一步,然后删除此快捷方式,那废的ftp就没了转载于:https://www.cnblogs.com/shuangfeike/p/11413734.html..._群辉的ftp文件点右键没有编辑功能

mybatis根据数组批量查询_前端传入的是long型的数组后端在mybatis中怎么批量查询-程序员宅基地

文章浏览阅读1.8k次。接口/** * 从页面接收的数据是多值数据,就是一个数组,它不想转成其它类型,直接把数组丢给dao */ public List<Emp> queryByArray(Integer[] empnos);EmpMapper.xml配置文件<select id="queryByArray" resultType="emp"> select <incl..._前端传入的是long型的数组后端在mybatis中怎么批量查询

python词云是什么意思_python生成词云-程序员宅基地

文章浏览阅读715次。前言在大数据时代,你竟然会在网上看到的词云,例如这样的。看到之后你是什么感觉?想不想自己做一个?如果你的答案是正确的,那就不要拖延了,现在我们就开始,做一个词云分析图,Python是一个当下很流行的编程语言,你不仅可以用它做数据分析和可视化,还能用来做网站、爬取数据、做数学题、写脚本替你偷懒……如果你之前没有编程基础,没关系。希望你不要限于浏览,而是亲自动手尝试一番。到完成的那一步,你不仅可以做出..._词云是什么意思

nginx_nginxl-程序员宅基地

文章浏览阅读469次。什么是nginxNginx (engine x) 是一个高性能的HTTP和反向代理web服务器,使用c语言编写的一款web服务软件.Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。为什么使用nginx?作用1.反向代理2.负载均衡。3.._nginxl

英语 | Day 33、34 x 句句真研每日一句(找从句、意译)_句句真研每日一句答案在哪-程序员宅基地

文章浏览阅读465次,点赞2次,收藏3次。Day 33Day 34_句句真研每日一句答案在哪