ABAP ALV

目录

一、基本概念

1、ALV概览

2、基本概念

二、属性更改

1、FIELDCAT

2、宏

3、LAYOUT

4、升序降序SORT

5、FILTER

三、交互

1、实现自己的按钮


一、基本概念

1、ALV概览

ALV:SAP List View,是SAP提供的一个强大的数据报表显示工具

ALV实际上是一个屏幕控件对象,它通过程序传递内表的方式来显示数据

实现方式:调用标准函数、优化接口

显示方式:List--类似于write语句输出的表单形式

Grid:每个输出字段提供按钮,用户可以自行设定,操作更为灵活

2、基本概念

类型池:SLIS,特殊类型程序,包含各种TPYES语句

1)Fieldcat TYPE slis_t_fieldcat_alv

列格式设置(表单)

字段名称,列是否可修改,列宽度等

FIELDCAT规定的每一行属性代表数据库表中每一列的基本属性,FIELDCAT--内表

2)Layout TYPE slis_layout_alv

全局格式设置--结构

整表字段是否可修改,是否以斑马纹输出,是否显示选择按钮字段等,只有一个属性

3)函数:RESUE_ALV_FIELDCATALOG_MERGE

根据内表结构返回FIELDCAT字段结构信息,自动创建

4)函数:RESUE_ALV_GRID_DISPLAY/REUSE_ALV_LIST_DISPLAY

使用GRID/LIST模式输出ALV报表

5)FIELDCAT参数

6)layout

二、属性更改

1、FIELDCAT

在end-of-selection中创建build_alv,调用"RESUE_ALV_GRID_DISPLAY"函数

传入参数IT_FILTER每个字段相关的属性设置,是个表类型,先给这个参数传一个内表

TYPE-POOLS SLIS."参照类型池

DATA GT_STUDENT TYPE TABLE OF ZSTUDENT_G_01.
DATA GS_STUDENT TYPE ZSTUDENT_G_01.

*FUNCTION ALV
*对ITFIELDCAT进行传参,就参照其类型创建内表
DATA GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV."内表 列属性
DATA GS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

给内表GT_FIELDCAT增加数据,那么就要先查看IT_FILTER包含哪些数据,双击SLIS_T_FIELDCAT_ALV查看,例如:

"FIELDCAT一行的属性相当于表单的一列的属性
FORM BUILD_FIELDCAT .
  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-COL_POS = '1'."第几段输出
  GS_FIELDCAT-FIELDNAME = 'ZCODE'."字段名是什么
  GS_FIELDCAT-OUTPUTLEN = '10'."输出长度
  GS_FIELDCAT-SELTEXT_M = '学生编号'."描述文本
  APPEND GS_FIELDCAT TO GT_FIELDCAT.
ENDFORM.

但是,后期数据维护很可能会增加很多列,将这些数据进行封装,采取宏相关的封装

2、宏

如果涉及的属性过多,就不适合用宏调用,可以使用PERFORM调用

*宏 一个宏最多可以定义9个参数
DEFINE %%APPEND_FIELDCAT.
  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-COL_POS = &1.
  GS_FIELDCAT-FIELDNAME = &2."字段名是什么
  GS_FIELDCAT-OUTPUTLEN = &3."输出长度
  GS_FIELDCAT-SELTEXT_M = &4."描述文本
  APPEND GS_FIELDCAT TO GT_FIELDCAT.

END-OF-DEFINITION.

传值

"FIELDCAT一行的属性相当于表单的一列的属性
FORM BUILD_FIELDCAT .
  %%APPEND_FIELDCAT: '1'   'ZCODE'   '10' '学生编号',
                   '2'  'ZNAME'   '20' '学生姓名',
                   '3'  'SEX'      '3' '性别',
                   '4'  'ZSCHOOL' '10' '学校',
                   '5'  'WEIGH'   '15' '体重',
                   '6'  'UNIT'     '3'  '单位'.
ENDFORM.

给内表添加数据,执行查看显示效果

添加属性:

3、LAYOUT

LAYOUT与FIELDCAT不同,它是一个结构。首先给引用的函数中的IS_LAYOUT传值,定义一个GS_LAYOUT

根据函数中IS_LAYOUT定义的参照类型,给GS_LAYOUT定义

使用字段对全局属性进行设置

FORM BUILD_LAYOUT .
GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'."优化列宽
GS_LAYOUT-ZEBRA = 'X'."斑马纹
ENDFORM.

4、升序降序SORT

DATA GT_SORT TYPE SLIS_T_SORTINFO_ALV."排序
DATA GS_SORT TYPE SLIS_SORTINFO_ALV.

先按照学校的升序,在在此基础上按照性别降序

FORM BUILD_SORT .
*按照学校升序
CLEAR GS_SORT.
GS_SORT-SPOS = '1'.
GS_SORT-FIELDNAME = 'ZSCHOOL'.
APPEND GS_SORT TO GT_SORT.

*按照学校降序
CLEAR GS_SORT.
GS_SORT-SPOS = '2'.
GS_SORT-FIELDNAME = 'SEX'.
APPEND GS_SORT TO GT_SORT.

ENDFORM.

先将体重合计后,在按学校升序小计

*按照学校升序
CLEAR GS_SORT.
GS_SORT-SPOS = '1'.
GS_SORT-FIELDNAME = 'ZSCHOOL'.
GS_SORT-UP = 'X'."先将学校升序排列,在小计
GS_SORT-SUBTOT = 'X'.
APPEND GS_SORT TO GT_SORT.

5、FILTER

删选的功能,首先在函数中找到传入的相关参数,即IT_FILTER,找到对应的函数部分,对其传值,那么就需要创建一个与其结构相同的类型传值,参照IT_FILTER的参考类型(判断是结构还是内表), 来创建内表与结构体,并看其(IT_FILTER的参考类型)有哪些字段,以及功能

进行FILTER时,需要选择一个字段进行筛选,那么就要定义一个字段名 -->选择FILTER按钮,类型为选择界面,那么就要插入一个类似于select-option的限制(四个字段,SIGN、OPTION、LOW、HIGH)--->FILTER的参数有哪些是类似的 -->创建一个BUILD_FILTER-->插入数据

FORM BUILD_FILTER .
  CLEAR GS_FILTER.
  GS_FILTER-FIELDNAME = 'SEX'.
  GS_FILTER-SIGN0 = 'I'.
  GS_FILTER-OPTIO = 'EQ'.
  GS_FILTER-VALUF = ''.

  APPEND GS_FILTER TO GT_FILTER.
ENDFORM.

6、I_SAVE

7、I_VARIANT 格式参数

三、交互

1、实现自己的按钮

为ALV定义自己的按钮,效果如下:

首先查看函数中用于交互的参数,并根据其关联类型,查看其定义的字段有哪些

可以看到,有两个字段,那么就定义一个类似的结构体与内表,给这两个字段传值

给这两个字段赋值。因为通过函数声明的控件自定义的按钮需要与ALV相关联,就需要使用set。。语句,放在一个子程序中,将子程序又赋给GS_EVENTS-FORM

FORM BUILD_EVENTS .
  CLEAR GS_EVENTS.
  GS_EVENTS-NAME = 'PF_STATUS_SET'.
  GS_EVENTS-FORM = 'SET_STATUS'."子程序
  APPEND GS_EVENTS TO GT_EVENTS.

ENDFORM.

*通过函数声明的控件 自定义的按钮需要与ALV相关联,就需要使用set。。语句,放在一个子程序中
*将子程序又赋给GS_EVENTS-FORM
FORM SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STATUS' EXCLUDING RT_EXTAB. "设定自己的按钮
ENDFORM.

并在函数调用中解开IT_EVENTS的注释,同时回调自己的程序,如下图所示,即可实现最终效果

但上述的调用会覆盖掉系统默认的按钮

增加自定义的按钮而不覆盖原来的按钮,有两种方法:

1)参照标准按钮程序

程序右键创建GUI STATUS,附加-调整模板-列表查看器,引用标准按钮,即可调回标准按钮

在标准按钮的状态下,增加自定义的按钮

实现增加自己的按钮

2)参照其他的程序

先不引入自己创建的按钮,然后查看系统-状态-查看当前系统使用的按钮

复制完成后,可以看到复制过来的按钮,也可以点进去修改,新增自己定义的按钮

2、实现自定义按钮的功能

也可以不给IT_EVENTS传值,直接将子程序的名称赋值给函数中的字段

2、设置单击/双击功能

单击--前提是HOTSPOT设置,第一种在FIELDCAT设置,针对字段,将该字段的HOTSPOT给上X即可,第二种对于关键字的设置可以在LAYOUT设置KEY-HOTSPOT

双击-没有设置热点也可以触发对应的按钮功能

针对已经设置过的热点,如何完成单击的功能--USER_COMMAND

功能:当单击ZCODE,跳转到详细页面,例如查看供应商

双击时,显示学校信息:

 WHEN OTHERS."双击
*当前行的学校信息
READ TABLE GT_STUDENT INTO GS_STUDENT INDEX RS_SELFIELD-TABINDEX.
PERFORM DISPLAY_ALV_SCHOOL USING GS_STUDENT-ZSCHOOL.
相关推荐
致奋斗的我们5 分钟前
RHCE的学习(7)
linux·服务器·网络·学习·redhat·rhce·rhcsa
petaexpress9 分钟前
云存储的费用是多少?2024年最新价格表
运维·服务器·云存储·云存储的费用是多少·云存储的费用是多少最新·云存储费用
taolichao3043 分钟前
架设一台NFS服务器,按照要求配置
linux·运维·服务器
程序员yt44 分钟前
2025秋招八股文--服务器篇
linux·运维·服务器·c++·后端·面试
2301_810730101 小时前
RHCSA基础命令整理1
linux·运维·服务器
稳重的大王1 小时前
如何使用 NetBak PC Agent 备份和恢复 Windows 计算机或服务器?
运维·服务器
纪伊路上盛名在1 小时前
服务器与服务器之间文件上传下载
运维·服务器
云围1 小时前
Soanrquber集成Gitlab 之 导入Gitlab项目
运维·ci/cd·gitlab·devops
lishing61 小时前
Linux驱动开发(2):第一个内核模块
linux·运维·驱动开发