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.
相关推荐
乘云数字DATABUFF7 小时前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--2 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森2 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜3 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB4 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode5 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220706 天前
如何搭建本地yum源(上)
运维
大树889 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠9 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
通信小呆呆9 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人