当前位置: 首页 > article >正文

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.


http://www.kler.cn/news/365518.html

相关文章:

  • 详细版:哈希表(Hash Table)哈希冲突及其解决方法
  • 富格林:察觉欺诈有效追损措施
  • Rust小练习,编写井字棋
  • 利用移动式三维扫描技术创建考古文物的彩色纹理网格【上海沪敖3D】
  • 深度学习:SGD的缺点
  • 弱口令与命令爆破+DVWA靶场+docker+ARL+Fofa+weakpass
  • Rust初踩坑
  • 【HarmonyOS Next】原生沉浸式界面
  • E43.【C语言】练习:传值调用和传址调用混淆点解释
  • 计算机网络:数据链路层 —— 虚拟局域网 VLAN
  • 136.只出现一次的数字
  • 万字图文实战:从0到1构建 UniApp + Vue3 + TypeScript 移动端跨平台开源脚手架
  • EfficientNet,EfficientNetV2
  • 微服务之Sentinel概念介绍及项目实战代码
  • 基于vue框架的的高校消防设施管理系统06y99(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • ChatGPT的模型训练入门级使用教程
  • 首届The VRAnimation Award 震撼启幕!VsoCloud独家赞助此次大赛!
  • CSSfilter实现磨砂效果
  • Java安卓开发——疑难解答篇(第九期)
  • PSINS工具箱函数介绍——inserrplot
  • Java项目实战II基于微信小程序的智慧旅游平台(开发文档+数据库+源码)
  • 手机玩使命召唤21:黑色行动6?GameViewer远程玩使命召唤教程
  • phy初始化
  • 孤岛架构与微服务架构区别
  • 搜维尔科技:视觉映射灵巧手,五指灵巧手解决方案
  • Win/Mac/Android/iOS怎麼刪除代理設置?