ABAP学习笔记之——第十章:面向对象ALV

news2024/11/16 21:26:59

一、ALV

ALV 是 ABAP List Viewer 的缩写,是实际业务中查询数据或修改数据时经常使用的程序。

1、ALV的主要功能排序功能 (Ascending/Descending);

过滤设置;

变更列宽;

变更布局;

ABC 分析;

下载 Excel及 Word 文档的保存。

2、ALV的类型

Function ALV;

GRID ALV;

SALV;

3、GRID ALV容器接口:

ALV 程序中使用的接口由参照 CL GUI ALV_GRID 类的变量定义。用下列语句定义对

象引用变量。

用 CREATE OBEJCT 语调用类的构造函数并生成 ALV GRID 接口。

 

4、GRID ALV容器的结构

要利用 ALV 显示数据,至少要经过下列两个步骤。

(1) 定义内表: 定义显示在画面上的内表。在 ALV 上存储数据信息的内表叫输出表

(Output Table)。

数据结构(字段目录):定义 ALV GRID 容器显示在画面上的结构。即拥有如 ALVGRID 容器中定义的数据结构、技术属性、描述等信息。一般利用 ABAP 数据字典的表、结构体或直接使用内表结构。

只要启动 ALVGRID,则传递给 ALV GRID 容器中的输出表一直有效。输出表可以利用ABAP 数据字典对象,但也可以只用字段目录创建 ALV 结构。字段目录 (Field Catalog)是存储要显示在 ALV 画面上的字段信息的表。

二、SAP容器

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

若要显示 ALV 画面,必须要有连接屏幕与ALV GRID 控件的 SAP 容器控件。即 SAP 容器为了充当连接器,将SAP 控件包含在容器中。SAP 容器类型有 SAP Tree、SAP Picture、SAPTextedit、SAP Splitter 控件等。SAP 容器是包含其他控件的控件,也称为父控件 (ParentControl)

2、创建引用变量

SAP 自定义控件参数属性

3、调用屏幕

4、创建ALV GRID控件

 

5、创建ALV对象

 

三、创建ALV

1、创建ALV GRID容器

(1)创建参照变量

(2)创建SAP容器

在屏幕 100 创建适当大小的自定义控件。另外,在 PBO 模块 init_con 中追加下列代码后创建 SAP 容器。CREATE OBEJCT 语会调用类 CL GUI CUSTOM CONTAINER的构造函数(Constructor),创建 SAP 容器的实例。此时,参数指定屏幕上创建的自定义控件。

(3)创建ALV GRID控件

(4)查询数据

 

(5)调用ALV显示方法

(6)执行程序

例:

REPORT z_alv_gui_test.

DATA:con TYPE REF TO cl_gui_custom_container.

DATA:gui TYPE REF TO cl_gui_alv_grid.

DATA:gt_sflight TYPE TABLE OF sflight.

DATA:ok_code   LIKE sy-ucomm,
     save_code LIKE sy-ucomm.

CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  save_code = ok_code.
  CLEAR ok_code.
  CASE save_code.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.

*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  IF con IS INITIAL.
    CREATE OBJECT con
      EXPORTING
        container_name = 'CON'.

    CREATE OBJECT gui
      EXPORTING
        i_parent = con.
  ENDIF.
  SELECT * FROM sflight INTO TABLE gt_sflight.
  CALL METHOD gui->set_table_for_first_display
    EXPORTING
      i_structure_name = 'SFLIGHT'
    CHANGING
      it_outtab        = gt_sflight.
ENDMODULE.

 2、利用Docking容器创建程序

自定义容器是在画面指定领域,与此相反 Docking 容器是创建实例时直接指定屏幕和大小。

即就如Docking单词的本意一样,不用通过自定义容器直接指定ALV要使用的领域和屏幕编号。

(1)创建参照变量

(2)创建docking容器

(3)创建ALV GRID控件

例:

*&---------------------------------------------------------------------*
*& Report Z_ALV_DOCKING
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_alv_docking.

DATA:container TYPE REF TO cl_gui_docking_container,
     grid      TYPE REF TO cl_gui_alv_grid.

DATA:gt_sflight TYPE TABLE OF sflight.

DATA:gs_variant TYPE disvariant."ALVl列表变式

SELECT * FROM sflight INTO TABLE gt_sflight.

gs_variant-report = sy-repid.
gs_variant-username = sy-uname.

CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  IF container IS INITIAL.
    CREATE OBJECT container
      EXPORTING
        repid     = sy-repid  "程序编号
        dynnr     = sy-dynnr   "屏幕编号
        extension = 2000.
    CREATE OBJECT grid
      EXPORTING
        i_parent = container.
  ENDIF.

  CALL METHOD grid->set_table_for_first_display
    EXPORTING
      i_structure_name = 'SFLIGHT'
      i_default        = 'X'
      is_variant       = gs_variant
      i_save           = 'A'
    CHANGING
      it_outtab        = gt_sflight.

ENDMODULE.

四、ALV方法

1、set_table_for_first_display方法

(1)I_STRUCTRE_NAME 参数

为了制作输出表的形式输入类似于 SFLIGHT 的一样的 ABAP 数据字典结构体名字。只要设置这个参数会自动生成符合此结构体的字段目录。即在程序内部没有必要重新构成字段目录。

(2)IS_VARIANT参数

可以设置 ALV 列表变式 (Variant)。列表变式把修改的画面字段顺序、排列字段等操作保存成一个变式,以便以后查询时以同样式显示。首先需要在报表程序中追加用于选择布局的参数及功能。

 

 

(3)I_SAVE参数

(4)I_DEFAULT参数

决定用户是否能保存默认变式

(5)IS_LAYOUT参数

利用IS LAYOUT 参数可以定义 ALV GRID 控件的画面属性,如设置合计金额或者以条文形式显示等。布局是 LVC S LAYO 类型的结构体。此结构体可以在 T-CODE:SE11 中查询。

 

 (6)IT_OUTTAB参数

IT_OUTTAB 参数是定义要显示数据的输出表的参数。换句话说是指定包含要显示数据的内表的参数。

(7)IT_FIELDCATALOG参数

决定要显示的数据类型及输出表结构。

(8)IT_TOOLBAR_EXCLUDING参数

在 ALV GRID 控件中有需要隐藏的按钮时使用。例如,为技术类职员显示画面时有必要隐藏保存布局的按钮。此时可以根据用户显示或隐藏布局按钮。先定义 ui functions 类型的内表,然后把此 Function 代码插入到此表中,则相应按钮就会隐藏。

(9)IT_SORT参数

设置 ALV 数据排列顺序的参数。定义参照 LVC_T_SORT 类型的内表后,加入要用于排序的字段到此表中即可。LVC T SORT 中T 指的是表,LVC S SORT 的 S 指的是结构体排序表的选项中 Subtot 设置以排序字段为基准显示合计金额和全体合计金额。

2、ALV其他方法

(1)get_current_cell方法

get_current_cell 方法返回 ALV GRID 控件中鼠标所在位置的值和属性。若没有选择任何单元格,则行的 Row 值返回0。ALV GRID 控件返回两个行和字段的索引号,一个是现在被选择的行和字段索引,另一个是输出表(内表)的行和字段索引号。这是因为当设置隐藏字段时实际画面上显示的顺序与内表的顺序不同。

 

(2)get_frontend_layout方法

取出现在设置的ALV GRID 的布局信息

(3)get_selected_cells方法

用 LVC_T_CELL 类型的表返回现在所选的多个单元格信息。即取出现在所选单元格的字段名、索引等信息。

(4)get_selected_columns方法

(5)get_selected_rows方法

用LVC TROW类型的表返回多个行信息

(6)Refresh_table_display方法

重新查询已经显示在 ALV 的输出表时使用的方法。修改数据或新执行 SELECT 语句时不会重复创建 ALV 对象而只是重新显示数据。

 

(7)set_frontend_layout方法

修改 ALV GRID 布局。调用此方法后调用 REFRESH_TABLE DISPLAY 方法,则修改的

布局会起作用。

五ALV事件

1、定义事件

在类生成器 T-CODE:SE24 中查询 CL GUI ALV GIRD 可以发现有 DOUBLE CLICK

事件。

2、定义事件handler方法

3、注册事件handler方法

4、调用事件

双击 CL GUI ALV GRID 的画面会执行 RAISE EVENT 方法,此方法会触发 USERCOMMAND 对应的事件。

5、执行事件handler方法

双击事件 

HOTSPOT_CLICK事件

鼠标单击 Hotspot 类型的字段时触发的事件。相应字段要定义字段目录时需要定义成HOTSPOT 属性。字段目录会在后面仔细介绍。

Toobar事件

程序员可以追加 ALV 提供的基本图标以外的功能。Toolbar 事件是用于单纯追加 ALVGRID 的图标,当单击图标时会执行 user command 事件。

USER-COMMAND事件

USER-COMMAND 事件是为标准工具栏中后追加的图标添加功能的事件。追加当单击刷新按钮时读取新数据的逻辑。相关的事件有 after user command,before user command。

onDrag、onDrop事件

在ALV GRID 内执行 Drag & Drop 时执行的 Drag 相关事件

六、字段目录

字段目录 (Field Catalog) 参照包含 ALV 画面的字段信息的 LVC T FCAT 类型的表结构。ALV 利用存有字段目录的内表识别字段类型。例如,可以区分字段的类型,可以指定要显示在画面上的字段长度,可以显示成单选按钮形式,可以修改成可编辑字段等等。

1、创建ALV字段目录

(1)利用ABAP数据字典的方法

参照 ABAP 数据字典中的内表定义字段目录的方法已经在前面介绍。利用set_table_for_first_display 方法的 IS_TRUCTURE_NAME 参数就会直接将 ABAP 数据字典对象显示在ALV 输出表中。

(2)收到构成字段目录的方法

有时会遇到不想使用 ABAP 数据字典的所有字段显示字段目录的情况。此时可以用代码(手动)定义自己所需的字段添加到目录中。另外,可以修改字段目录内表属性来隐藏字段。

 

 

 

  

(3)结构体与字段目录同时使用

需要使用结构体字段之外的由用户定义的字段时可以使用此方法。此时,若结构体与字段目录同时存在相同的字段时,会优先识别字段目录上的字段定义。

2、利用字段目录的ALV属性变更

(1)设置字段属性(key,fix_column)

 

(2)设置数据样式(JUST,EDIT_MASK属性)

七、ALV GRID要素

1、信号灯处理

ALV 字段由信号灯显示且根据特定字段变更其颜色。这个属性可以使最终用户容易识别紧急性、重要性数据。例如,在库存管理中将安全库存时设置为绿色,危险时为黄色,超过安全库存时为红色。

(1)追加Exceptions字段

要显示信号灯的字段定义成字符类型追加到内表(OUTPUT)中。

(2)设置Exceptions字段

在ALV布局设置中利用excp fame 属性设置信号灯字段

(3)根据预约座位变更信号灯颜色

将内表字段显示时按以下规则,没有座位就显示红色,少于 50 就显示黄色,除此以外显

示绿色。下面执行程序确认结果。

2、Coloring Rows

(1)追加LINE COLOR字段

在内表(OUTPUT)中追加要显示 line color 的字符类型字段。

(2)设置INFOR_FNAME字段

在ALV布局设置中定义要用于指定颜色的字段。

(3)根据Carrid ID修改相应的颜色

设置 Carrier ID,当 AA 时为蓝色,AZ 时为黄色,DL 时为绿色。

3、单元格染色

在ALV GRID 中可以修改想强调的单元格颜色。但是比起之前所介绍的强调行颜色功能更注重系统资源,因此注重速度的程序中不易使用此功能。在内表中追加 LVC_T SCOL类型的颜色表。

(1)追加CELL COLOR字段

在内表中参照LVC T SCOL 追加用于显示 line color 的字段。

(2)设置CTAB_FNAME字段

在 ALV 布局设定中设置用于指定单元格颜色的字段。CELLCOLOR 不是存储变更颜色的字段变量,而是存储输出表中要修改颜色的单元格信息的内表。

(3)指定单元格颜色

根据PLANETYPE 追加可以指定颜色的代码

4、单元格显示成Pushbutton形式

以Pushbutton 形式显示 ALV GRID 单元格,使用户单击相应单元格时可以跳到其他画面或者可以显示更多相关信息。单击 Pushbutton 时 ALV GRID 会调用 button click 事件。为了做此练习,需要在内表中追加如下句所示的 LVC T STYL 类型字段。

(1)追加Pushbutton字段与单元格样式字段

CHK字段是用于显示 Pushbutton 的字段,CELLBTN 字段是用于存储 Pushbutton 等样式信息的字段。

(2)设置STYLEFNAME字段

在ALV布局设定中指定STYLEFNAME设置字段

(3)Pushbutton处理

设置 CHK 字段显示成 Pushbutton。与 Coloring Cell 逻辑相似

(4)注册单击按钮的事件

注册单击 Pushbutton 时触发的事件控制方法

(5)定义事件方法

(6)实现事件方法

追加单击按钮时读取相应行 carrid 字段值显示信息窗口的代码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java计算机毕业设计ssm校园疫情防控系统u3669(附源码、数据库)

java计算机毕业设计ssm校园疫情防控系统u3669(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

Docker安装以及容器使用笔记

我们知道容器是一个打包了应用和相关依赖的盒子,那怎么去操控这个盒子呢? 这一篇我通过一个简单的aspnetcore程序来加深对盒子的理解,使用之前先 安装一下Docker的环境。 一:Docker的安装 官方下载地址:Install Docker Engine on CentOS | Docker Documentation ,跟着文…

深度学习——NiN网络模型(笔记)

网络中的网络(NiN) 1.全连接层的问题:参数多,容易过拟合。 ①卷积层需要的参数较少 ②卷积层后第一个全连接层参数对比 参数过多带来的问题:1.占内存 2.占用计算的带宽多3.容易过拟合 2.NiN为了解决全连接层参数过多的…

20221208英语学习

今日新词: fragment n.碎片,碎块,破片;片段 cynicism n.愤世嫉俗, 玩世不恭, (古希腊的)犬儒哲学, 冷言冷语, 犬儒学派 slight adj.少量的;轻微的;细小的;纤细的 willing adj.愿意, 乐意, 自…

虚拟存储器

虚拟存储器 文章目录虚拟存储器虚拟存储器概述常规存储器管理方式的特征局部性原理虚拟存储器的定义和特征请求分页存储管理方式请求分页中的硬件支持请求分页中的内存分配页面调入策略页面置换算法最佳(Optimal)置换算法先进先出(FIFO)页面置换算法最近最久未使用(LRU)置换算法…

深度学习下的脑机接口BCI究竟有多远?

BCI | ECoG | 脑机接口 LFP | CMRR | 生物计算 随着生命科学、医药研发、数据分析、数据挖掘、LFP、生物计算、靶点发现、基因测序等技术的快速发展,脑科学逐渐出现在人们的视野中,随之而来的脑机接口技术同时得到快速发展。 脑科学是人类社会面临的…

Word处理控件Aspose.Words功能演示:使用 Java 将 Word 文档转换为 HTML

为了将 Word 文档的内容嵌入到您的应用程序中,您可能需要执行转换。在这种情况下,最广泛选择的转换是 Word 到HTML或 Word 到图像。,Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格式和最常用的图像…

Ubuntu20.04安装各种库----简洁版

目录Eigen3SophusPangolinCeresg2o建议先装anaconda再装ros, python,opencv啥该有的都有了下面仅仅安装ros没有的库Eigen3 作用:线性代数开源库, 提供了有关线性代数、矩阵和矢量运算、数值分析及相关的算法安裝方法: sudo apt-get install libeigen3-dev使用時注意添加頭文件…

性能测试:数据库性能问题实战分析

接口压测分析 现在我们来压测一个获取用户信息接口,这个接口会涉及到数据库的数据查询。我们的项目是部署正在应用服务器上面的,因此我们需要同时监控应用服务器和数据库服务器。 那么下面我们来看一下tomcat的这台服务器,cpu的使用率并不高&…

linux系统怎么安装宝塔面板

linux系统怎么安装宝塔面板 怎么安装宝塔面板?这个其实很简单接下来跟着我操作:以linux centos7.6 举例 Centos安装脚本: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh i…

JavaScript -- 10. 一文了解DOM对象及常用方法

文章目录1. DOM介绍1.1 什么是DOM1.2 概念1.3 关系1.4 HelloWorld1.5 document对象2. DOM节点2.1 元素节点2.1.1 获取已有的元素节点2.1.1 document.getElementById()2.1.2 document.getElementsByClassName()2.1.3 document.getElementsByTagName()2.1.4 document.getElements…

设计模式之简单工厂模式

simple factory design pattern 简单工厂模式的概念、简单工厂模式的结构、简单工厂模式优缺点、简单工厂模式的使用场景、简单工厂模式的实现示例 注:简单工厂模式没有被收录在 GoF 的二十三种设计模式中。 1、简单工厂的概念 简单工厂模式,与其说是设…

32位PCI转CPCI转接板

功能型号 32位PCI转CPCI转接板,调试卡 支持PICMG 2.0 D3.0规范; 支持33MHz速率; 支持32bit总线; 功能描述 1、沉金工艺,接触更好; 2、四层板设计,抗干扰更好; 3、信号线等长处理&…

【论文精读9】MVSNet系列论文详解-AA-RMVSNet

AA-RMVSNet,论文名为:AA-RMVSNet: Adaptive Aggregation Recurrent Multi-view Stereo Network,CVPR2021(CCF A) 本文是MVSNet系列的第9篇,建议看过【论文精读1】MVSNet系列论文详解-MVSNet之后再看便于理解…

【Java 快速复习】 Java 内存模型 并发问题本质

【Java 快速复习】 Java 内存模型 & 并发问题本质 在 Java 领域,我们经常会说两个名词大家要有所区分: JVM 内存模型:这个所说的是 JVM 内存的划分规则,如 堆、栈、元空间等Java 内存模型:这个所说的是线程和主内…

【计算机网络】应用层

应用层的许多协议都是基于客户服务器方式。 客户和服务器指通信中所涉及的两个应用进程。客户服务器方式描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。 P2P模式:整个网络中的传输内容不再被保存在中心服务器中&#xff…

怎么裁剪视频?手把手教你裁剪

这两年,随着网课的不断发展,我们可以很轻松的就在网上找到各种课程视频。可是有时候,一些视频里面的重点内容往往只有那几分钟,当我们回顾的时候,需要不断跳转,这就显得有些麻烦。其实我们可以将重点内容裁…

【代码随想录】二刷-回溯算法

回溯算法 《代码随想录》 什么是回溯算法? 回溯算法也可以叫做回溯搜索法,它是一种搜索方式。回溯是递归的副产品,只要有递归就会有回溯。 回溯法的效率: 回溯法的本质是穷举,穷举所有可能,然后选出我们想要的答案。(n…

如何使用virtualenv实现python环境的隔离?

有关更多的Python 开发内容,可访问:《 Python Flask开发指南》​​​​​​​ virtualenv可以帮助我们来创建一个Python的虚拟环境,虚拟环境可以独立并隔离外部的python环境,方便我们对于不同项目使用不同的python依赖,已经依赖版本的不同而导致的错误。本篇文章主要来了解…

2022全年度冰箱十大热门品牌销量榜单

自2022年年初以来,各地纷纷部署支持包括冰箱在内的家电大宗消费政策措施,其中家电补贴政策是刺激家电消费的主旋律。宏观经济政策环境改善,利好冰箱行业的长期发展。 根据鲸参谋数据统计,今年京东平台冰箱的年度累计销量达到1400多…