OOALV 基础知识

OOALV 基础知识

一、概要

OOALV也被称为面向对象的ALV(ABAP List Viewer)。

1.ALV的功能
  • 排序数据
  • 过滤数据
  • 变更列宽
  • 变更布局
  • 下载Excel等文档
2.ALV的类型
  • Function ALV
  • OOALV
  • SALV
  • SALV IDA
3.ALV程序的执行顺序
  • **定义内表:**定义显示再ALV画面上的内表,存储显示数据;
  • 创建屏幕、容器和Grid对象
  • 设置画面的字段目录
  • 输出内表中的数据

二、SAP 容器

1.创建SAP容器及容器对象

若要显示ALV页面,有三样元素作为支撑。分别是承载容器和组件的屏幕、划分组件区域的容器和用于展示功能的组件。所以要使一个组件完整的运行下来,需要屏幕容器组件三样元素。
在这里插入图片描述

2.容器类型
类别类名说明
自定义容器CL_GUI_CUSTOM_CONTAINER在使用屏幕编辑器的一般画面上定义一个特定的领域(需手动画出区域)。
对话框控件CL_GUI_DIALOGBOX_CONTAINER对话框,或者再全画面上以对话框的形式显示。
Docking控件CL_GUI_DOCKING_CONTAINER在屏幕领域的各边角设置的容器,可以调节其大小,是ALV程序开发中经常与自定义控件一起使用的控件。
拆分控件CL_GUI_SPLITTER_CONTAINER可以将容器拆分成几部分。
细拆分控件CL_GUI_EASY_SPLITTER_CONTAINER和拆分控件功能相同,可以再次拆分已经被拆分的容器,在程序中使用

三、使用Docking控件创建OOALV示例

1.创建Report程序

(1)通过SE38,输入程序名,点击Create按钮创建程序

在这里插入图片描述

(2)输入程序描述,和设置程序类型 1

在这里插入图片描述

(3)因为是练习程序,所以一般选择的Package都是本地

在这里插入图片描述

2.编写程序履历、主界面和对应Include

(1)创建好程序第一件事是编写程序履历,各个模块的程序履历不一样,所以我的程序履历仅供参考

在这里插入图片描述

(2)编写程序主界面、各Include和选择屏幕事件

在这里插入图片描述

3.设置展示的结构

(1)本次我们使用 SE11中的 YSFLIGHT表作为展示结构,该表的原型是SE11 中的 SFLIGHT

(2)在名字为YTEST_0614_CYH_TOP的Include中创建如下结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对该结构说明如下:

  • 开头的常量含有一些单个字符例如‘X’ ‘S’ ‘E’等,这些是为了防止Hard Code而设置的。包括下面的一些字段名常量;
  • GV_MESSAGE该变量是一个标记字段,用来设置当程序出现异常时的标记变量;
  • GV_SAVEOK和OK_CODE该变量是用来设置接收屏幕Function Code的变量,用来判断你在屏幕上点击了哪个按钮;
  • 结构体,一般此处用来设置自定义在OOALV 中展示的结构或字段;
  • 内表,类似于上面的结构体,用来存放在ALV上展示的数据,但除此之外还有一些用于其他用途的内表,例如GT_FIELDCATALOG,该内表用来存放字段目录中的内容;
  • 对象,用来设置屏幕容器或ALV GRID对象或事件对象等。
4.设置选择屏幕

(1)根据需求定义,一般情况下都是涉及的表的主键

以本例为例子,在表YSFLIGHT中的主键有三个,分别是CARRID、CONNID和FLDATE,所以本次就是用这三个字段作为选择屏幕的字段。

在这里插入图片描述

(2)选择屏幕的代码一般放在名字带有SCR的Include中

一般为了保持选择屏幕的整洁、可读性一般会使用SELECTION-SCREEN BEGIN OF BLOCK …等语句,将选择屏幕中相关的字段包在一起。

详细的选择屏幕设置详见报表程序篇。
在这里插入图片描述

注:此处变量的名字(S_CARRID)不可以超过8个字符,否则会报错。

设置好选择屏幕字段后还需要设置其在选择屏幕上的显示的名字选择GUI 窗口上方的 Goto --> Text Elements --> Selecyion Texts

在这里插入图片描述

注:若是进入后没有能设置的字段,有可能是你的程序没有激活,激活后可见
在这里插入图片描述

运行后,选择屏幕的展示效果如下

在这里插入图片描述

5.创建屏幕和设置屏幕属性

(1)点击Display Object List按钮,或按快捷键C +S + F5

在这里插入图片描述

(2)之后左边会出现一个工具栏,整体结构和SE80的结构是一致的

之后再程序名称处右键,选择Create --> Screen

在这里插入图片描述

(3)选择好按钮之后,会有一个弹框要求你输入屏幕号

注:此处不能使用屏幕号1000,因为该屏幕号有特殊含义,指的是选择屏幕。

在这里插入图片描述

(4)设置屏幕的描述和Element List列表中的内容

在这里插入图片描述

设置OK_CODE,有关OK_CODE的相关概念请参考上方的 设置展示的结构 中的内容

在这里插入图片描述

6.创建容器和ALV Grid对象

(1)在主程序界面的End-Of-Selection.事件下方调用我们创建好的屏幕0100

在这里插入图片描述

(2)双击上方代码中的屏幕号0100,或在左侧的工具栏中点开Screen文件夹,选择0100屏幕。进入屏幕逻辑流界面

在这里插入图片描述

(3)在Process Before Output(后简称为PBO)事件下方新建一个MODULE

在这里插入图片描述
在这里插入图片描述

在程序中填写下面的代码

MODULE INITIAL_0100 OUTPUT.
	PERFORE INITIAL_0100.
ENDMODULE.

注:之所以要在此处编写一个PERFORE,是因为在MODULE中定义的所有的变量全部都是全局变量,但是将这些变量放在PERFORE中则会变为局部变量。并且在开发规范中也是要求不允许在MODULE中去定义变量的。

双击该PERFORE的方法名称,创建该PERFORE的FORE到名字带有F01的Include中。然后编写下面的代码。

在这里插入图片描述

  • CREATE_CONTAINER_ALV:用来创建屏幕容器和ALV GRID对象的Perform;
  • GET_FIELDCAT:通过传入的展示画面的结构体获取展示结构属性的Perform;
  • SET_FIELDCAT:自定义展示结构的一些属性,例如修改间距,列标题名等;
  • REGISTRATION_EVENTS:OOALV事件类注册事件的Perform;
  • CALL_ALV_GRID:设置ALV Grid样式、布局、变式和默认展示的按钮以及调用ALV Grid的Perform;
  • REFRESH_ALV:刷新ALV Grid的Perform,当每次有变更时,则需要刷新ALV Grid,使变更的内容更新到界面上。

(4)PERFORM CREATE_CONTAINER_ALV

在这里插入图片描述

7.设置ALV Grid对象的属性

(1)获取字段目录——GET_FIELDCAT

在这里插入图片描述

在这里插入图片描述

(2)自定义字段目录,用来设置列名、列宽和布局样式(居左、居中和居右)——SET_FIELDCAT
在这里插入图片描述
在这里插入图片描述

(3)注册事件类中的事件,本次因为暂不涉及事件类,所以跳过改内容——REGISTRATION_EVENTS

(4)设置ALV GRID对象的布局、变式、默认按钮和调用——CALL_ALV_GRID
在这里插入图片描述

设置布局和变式——SET_VARIANT_LAYOUT
在这里插入图片描述

设置ALV Grid默认按钮
在这里插入图片描述

8.设置GUI Status和GUI Title

(1)和创建屏幕的操作类似,创建GUI Status实际就是创建屏幕的功能按钮

在左侧的工具栏出右键程序名,按照 Create --> GUI Status,创建GUI Status

在这里插入图片描述

然后会弹出一个框,设置该GUI Status的名称、描述和类型。名称一般建议以G开头,后跟使用该GUI Status的屏幕号

在这里插入图片描述

点击完对勾后,或弹出设置GUI Status的页面,设置GUI Status其实就是设置页面上的按钮,详见下图

在这里插入图片描述

固定的按钮设置是最下面的设置退出按钮的一栏,可参考下面的图片内容进行设置

在这里插入图片描述

注:三个按钮都需要设置为“E”类型,代表是退出按钮。设置成该类型是因为当我们在屏幕中设置了必输字段后,必输字段的校验不会影响E类型退出屏幕的按钮逻辑。若不设置为“E”类型按钮,则这三个按钮与普通的逻辑按钮为同一优先级,当存在必输字段时,屏幕会要求先输入完必输字段和其他的校验逻辑后,参允许点击其他的按钮。这样一来与退出按钮的实际应用不相符,所以需要将这三个退出按钮设置为“E”类型。

设置完成后激活,可以在左侧的工具栏中看到新增了一个GUI Status的文件夹。

(2)同上,创建好的GUI Title其实就是在该页面开头展示的标题内容

在这里插入图片描述

点击GUI Title按钮后,会弹出设置GUI Title名称和显示的Title内容的弹框,如下所示

在这里插入图片描述

点击绿色的对勾按钮,可以在左侧的工具栏中看到多了一个GUI Title的文件夹

在这里插入图片描述

(3)将GUI Status和GUI Title与屏幕绑定

打开“100”屏幕的逻辑流界面,在左侧工具栏展开Screen的文件夹,双击0100屏幕号。将该Module前面的“*”号删除,然后双击该Module的名称,创建该Module到PBO Include中。

在这里插入图片描述

该Module创建好后,会有系统生成好两行设置GUI Status和GUI Title的代码。将我们刚刚设置好的GUI Status和GUI Title的名字填充在这,完成绑定。

在这里插入图片描述

9.设置屏幕初始化内容

详细的初始化内容在上面的第6和7项已经讲过了,此处补充以下,当屏幕的容器和ALV Grid对象创建好后,调用的REFRESH_ALV Perform的内容在此处展示。这段刷新方法也是固定的写法,可以用作模板。

(1)REFRESH_ALV

在这里插入图片描述

10.设置退出屏幕的逻辑

同上面开始操作一样,打开0100屏幕的逻辑流界面,在 PROCESS AFTER INPUT. 下面创建一个Module。

在这里插入图片描述

双击该Module 的名字 EXIT。将该Module 创建在PAI中。

在这里插入图片描述

Perfrom中的内容如下。该Perfrom也是固定写法,可用作模板。

在这里插入图片描述

11.展示屏幕效果

在主程序界面(左侧工具栏双击程序名)的START-OF-SELECTION 事件下编写获取数据的逻辑。

在这里插入图片描述

展示效果如下:

在这里插入图片描述
在这里插入图片描述
更多技术内容可以来看我的个人博客:https://www.yemaojun.top/

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ABAP OOALV是一种在ABAP编程语言中面向对象的方式实现的ALV(ABAP List Viewer)报表。它提供了更灵活和可扩展的方式来创建和展示报表数据。 以下是ABAP OOALV的一些关键步骤和示例代码[^1][^2]: 1. 定义变量和选择屏幕定义:在ABAP程序中定义所需的变量,并选择适当的屏幕定义。 2. 创建类:创建一个类来处理ALV报表的逻辑和功能。这个类应该继承自`CL_GUI_ALV_GRID`类。 3. 调用函数:在类中定义一个方法来调用ALV函数模块,例如`REUSE_ALV_GRID_DISPLAY`。 4. 获取数据并展示:在类中定义一个方法来获取报表数据,并将数据传递给ALV函数模块。 5. 表头字段设置:在类中定义一个方法来设置ALV报表的表头字段。 6. ALV输出格式:在类中定义一个方法来设置ALV报表的输出格式,例如列宽、对齐方式等。 7. 展示ALV:在类中定义一个方法来展示ALV报表。 8. 其他:根据需要,可以在类中定义其他方法来处理特定的功能,例如处理单击事件、排序等。 下面是一个简单的示例代码,演示了如何使用ABAP OOALV来创建和展示一个简单的报表: ```abap CLASS lcl_alv_report DEFINITION. PUBLIC SECTION. METHODS: constructor, display_alv. PRIVATE SECTION. DATA: lo_alv_grid TYPE REF TO cl_gui_alv_grid. METHODS: get_data, set_field_catalog, set_layout. ENDCLASS. CLASS lcl_alv_report IMPLEMENTATION. METHOD constructor. CREATE OBJECT lo_alv_grid EXPORTING i_parent = cl_gui_container=>screen0. ENDMETHOD. METHOD display_alv. CALL METHOD lo_alv_grid->set_table_for_first_display EXPORTING i_structure_name = 'SPFLI' CHANGING it_outtab = lt_spfli. ENDMETHOD. METHOD get_data. SELECT * FROM spfli INTO TABLE lt_spfli. ENDMETHOD. METHOD set_field_catalog. DATA: lt_fieldcat TYPE lvc_t_fcat. FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat. CALL METHOD lo_alv_grid->get_frontend_fieldcatalog RECEIVING rt_fieldcatalog = lt_fieldcat. LOOP AT lt_fieldcat ASSIGNING <fs_fieldcat>. <fs_fieldcat>-outputlen = 20. ENDLOOP. CALL METHOD lo_alv_grid->set_frontend_fieldcatalog EXPORTING it_fieldcatalog = lt_fieldcat. ENDMETHOD. METHOD set_layout. DATA: lo_layout TYPE REF TO cl_gui_alv_layout. CREATE OBJECT lo_layout EXPORTING i_grid_title = 'ALV Report'. CALL METHOD lo_alv_grid->set_layout EXPORTING is_layout = lo_layout. ENDMETHOD. ENDCLASS. DATA: lo_report TYPE REF TO lcl_alv_report. START-OF-SELECTION. CREATE OBJECT lo_report. lo_report->get_data( ). lo_report->set_field_catalog( ). lo_report->set_layout( ). lo_report->display_alv( ). ``` 这是一个简单的ABAP OOALV报表的示例,它获取了`SPFLI`表中的数据,并展示在ALV报表中。你可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值