ABAP学习笔记之——第十二章:SALV

news2024/12/26 23:22:06

一、概要

在Net Weaver 2004 平台上集合了利用函数和 GRID 的功能发布的 SALV 包程序 (SALV也称为 New ALV)。SALV 可以像利用函数生成 ALV 的不用创建屏幕就可以调用的全屏式ALV,还可以利用控制器在屏幕的控制器中显示 ALV。利用GRID 的ALV 虽然不能注册成 Batch Job 在后台运行,但 SALV 却可以。SALV 与现有的方法 (Function ALV) 相比,为了方便以接口的方式提供更整合及细微的功能,但是 SALV 不提供编辑功能。

二、SALV类型与实现

定义数据,为下面例子声明共同的变量:

DATA:gt_itab  TYPE TABLE OF sflight,
     gr_table TYPE REF TO cl_salv_table.

SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_itab.

类型:

全屏模式


*全屏模式
cl_salv_table=>factory(
IMPORTING
  r_salv_table = gr_table
  CHANGING
    t_table = gt_itab
).
CALL METHOD gr_table->display.

全屏模式-Classic报表模式

*全屏Classic List模式
cl_salv_table=>factory(
EXPORTING
  list_display = abap_true
  IMPORTING
    r_salv_table = gr_table
    CHANGING
      t_table = gt_itab
      ).
CALL METHOD gr_table->display.

利用控制器模式(此处还需要创建一个屏幕和自定义控件container)

*利用控制器的模式
DATA:gui TYPE REF TO cl_gui_custom_container,
      ok_code LIKE sy-ucomm .
CALL SCREEN 100.
INCLUDE z_salv_test_status_0100o01.
INCLUDE z_salv_test_user_command_01i01.



*----------------------------------------------------------------------*
***INCLUDE Z_SALV_TEST_STATUS_0100O01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS '100'.
  IF gui is INITIAL.
    CREATE OBJECT gui
    EXPORTING
      container_name = 'CONTAINER'.
    TRY.
    CALL METHOD cl_salv_table=>factory
      EXPORTING
        r_container    = gui
        container_name = 'CONTAINER'
      IMPORTING
        r_salv_table   = gr_table
      CHANGING
        t_table        = gt_itab
        .
      CATCH cx_salv_msg.
    ENDTRY.
    CALL METHOD gr_table->display.
  ENDIF.
ENDMODULE.


*----------------------------------------------------------------------*
***INCLUDE Z_SALV_TEST_USER_COMMAND_01I01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
  CASE ok_code.
    WHEN 'EXIT'.
      set SCREEN 0.
      leave SCREEN.
  ENDCASE.
ENDMODULE.

在画面上显示 ALV,使用以下两种方法已足够。

(1) FACTORY

- 定义要显示在画面上的数据

-定义ALV 报表样式。

(2) DISPLAY

-调用此方法画面上就显示 ALV。

FACTORY 方法是静态方法,因此使用 =>符号,而DISPLAY 方法是 Instance 方法,因此使用-> 符号。

三、设置SALV输出样式

1、SALV与子类

定义子类的引用对象变量:

DATA gr_display TYPE REF TO cl_salv_display_settings

调用子类类型对应的主类方法:

gr_display = gr_table->get display_settings ( ).

利用子类方法设置详细事项:

gr_display->set_striped_pattern(value = 'X')

2、设置标题

3、设置SALV的垂直/水平区分行

4、保存布局

*****设置布局
DATA gr_display TYPE REF TO cl_salv_display_settings.
DATA gr_layout TYPE REF TO cl_salv_layout.
DATA g_program TYPE salv_s_layout_key.

cl_salv_table=>factory(
IMPORTING
  r_salv_table = gr_table
  CHANGING
    t_table = gt_itab
).

*设置标题
gr_display = gr_table->get_display_settings( ).
gr_display->set_striped_pattern( cl_salv_display_settings=>true ).
gr_display->set_list_header('header test').

*关闭垂直、水平区分行
gr_display->set_horizontal_lines( cl_salv_display_settings=>false ).
gr_display->set_vertical_lines( cl_salv_display_settings=>false ).

*保存布局
gr_layout = gr_table->get_layout( ).
g_program-report = sy-repid.
gr_layout->set_key( g_program ).
gr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).

CALL METHOD gr_table->display.

5、修改字段属性

******修改字段属性
DATA:gr_columns TYPE REF TO cl_salv_columns_table,
     gr_column  TYPE REF TO cl_salv_column_table.

cl_salv_table=>factory(
IMPORTING
  r_salv_table = gr_table
  CHANGING
    t_table = gt_itab
).
gr_columns = gr_table->get_columns( ).

*隐藏字段属性
gr_column ?= gr_columns->get_column( 'MANDT' ).
gr_column->set_visible( cl_salv_column_table=>false ).

*修改字段描述
gr_column ?= gr_columns->get_column( 'CARRID' ).
gr_column->set_long_text( 'long text' ).
gr_column->set_medium_text( 'medium text' ).
gr_column->set_short_text( 'short text' ).

*设置字段颜色
DATA g_color TYPE lvc_s_colo.
gr_column ?= gr_columns->get_column( 'PRICE' ).
g_color-col = '6'.
g_color-int = '1'.
g_color-inv = '0'.
gr_column->set_color( g_color ).

*设置字段的最佳长度
gr_columns->set_optimize( 'X' ).

gr_table->display( ).

6、SALV选择模式

******SALV选择模式
DATA gr_selection TYPE REF TO cl_salv_selections.

cl_salv_table=>factory(
IMPORTING
  r_salv_table = gr_table
  CHANGING
    t_table = gt_itab
).
gr_selection = gr_table->get_selections( ).
gr_selection->set_selection_mode( if_salv_c_selection_mode=>row_column ).

CALL METHOD gr_table->display.

7、以弹出窗口形式显示

可以在弹出窗口下显示 SALV,可以通过 set_screen _popup 方法实现,但利用控制器的方法中是无法使用的。利用控制器的 SALV 是在屏幕属性中选择 Dialog Box 来实现此功能的

******以弹出窗口显示
cl_salv_table=>factory(
IMPORTING
  r_salv_table = gr_table
  CHANGING
    t_table = gt_itab
).
CALL METHOD gr_table->set_screen_popup
  EXPORTING
    start_column = 1
    end_column   = 100
    start_line   = 1
    end_line     = 20 .

CALL METHOD gr_table->display.

8、数据排序

数据排序利用参照 CL_SALV_SORTS 类的对象参照变量实现。利用 GR_TABLE 的GET_SORT 方法与负责排序的 ALV 对象链接通过 ADD_SORT 方法追加要排序的字段。

****数据排序
DATA gr_sort TYPE REF TO cl_salv_sorts.

cl_salv_table=>factory(
IMPORTING
  r_salv_table = gr_table
  CHANGING
    t_table = gt_itab
).
gr_sort = gr_table->get_sorts( ).
gr_sort->add_sort( 'CONNID' ).
CALL METHOD gr_table->display.

9、设置 Aggregation

利用 CL_SALV_AGGREATIONS 类可以合计 Numeric 类型的字段数据。若只是在字段级别上进行合计就没必要排序数据,但是根据主键值进行小计 (Subtotal) 就需要先进行排序。

*****设置Aggregation
DATA gr_sorts TYPE REF TO cl_salv_sorts.
DATA gr_agg TYPE REF TO cl_salv_aggregations.

cl_salv_table=>factory(
IMPORTING
  r_salv_table = gr_table
  CHANGING
    t_table = gt_itab
).
gr_sorts = gr_table->get_sorts( ).
gr_sorts->add_sort( columnname = 'CONNID' subtotal = 'X' ).
gr_agg = gr_table->get_aggregations( ).
gr_agg->add_aggregation( 'PRICE' ).

CALL METHOD gr_table->display.

10、设置过滤字段

过滤功能可以限制显示在 ALV 报表中的数据。利用 CL_SALV_FILTERS 类设置GR_TABLE 的GET_FILTERS 方法。通过 ADD_FILTER 方法追加过滤设置条件及字段。

****设置过滤字段
DATA gr_filter TYPE REF TO cl_salv_filters.

cl_salv_table=>factory(
IMPORTING
  r_salv_table = gr_table
  CHANGING
    t_table = gt_itab
).
gr_filter = gr_table->get_filters( ).
gr_filter->add_filter( columnname = 'CONNID'
sign = 'I'
option = 'EQ'
low = '555' ).
CALL METHOD gr_table->display.

事件

事件是没有继承关系的类之间互相调用方法时使用的特殊方法。对像(或者类)为了调用 (Trigger)其他对象(或者类)的事件的方法而使用事件。通过 CALLMETHOD 语句调用一般方法的时候一个方法会由多个对象调用。与此类似,所有对象都可以调用事件且只有事件主体的对象才能执行事件。调用一般方法时程序可以决定要调用的方法。与此相同,在事件中可以决定事件要反映的事件。

(1)定义事件

(2)定义事件控制器方法

(3)注册事件控制器方法

(4)调用事件

(5)执行事件控制方法

DOUBLE CLICK 事件

HOTSPOTCLICK 事件

Toolbar 事件

USER-COMMAND 事件

SALV  GRID要素

处理信号灯

处理信号灯(Exception)是将界限值利用图表按区间显示数据的属性。如[图 17-14]所示SALV 字段用图表显示按钮根据特定字段的值修改颜色。这可以方便最终用户识别数据的紧急性、重要性。

处理按钮

在SALV 中可以利用ALV Object 类以图标形式显示单元格。为了显示图标,追加 icon d类型的字段。

 

修改单元格颜色

在 SALV GRID 中可以修改需要强调的单元格的颜色。一般字段单位的颜色强调更常使用系统资源。内表中追加LVC T SCOL 类型的颜色表。此逻辑与在 ALV GRID 中设置单元格颜色的过程相似。

 

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

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

相关文章

速卖通知识产权规则介绍,如何才能规避侵权的问题?

最近有商家咨询到我,关于速卖通对商品知识产权是怎么评判的,今天就来给大家科普一下平台关于知识产权的规则介绍 速卖通平台严禁用户未经授权发布、销售涉嫌侵犯第三方知识产权的商品或发布涉嫌侵犯第三方知识产权的信息。 若卖家发布涉嫌侵犯第三方知…

从股票市场选择配对的股票:距离计算方法

我们来看看如何定义距离的计算方法。 回想一下,在共同趋势模型中,协整的必要条件是从共同趋势得到的新息序列必须完全相关。APT中的共同因子回报就理解成是从共同趋势得到的新息序列,因此,新息序列之间的相关系数就是共同因子回报…

网关性能大PK,Spring Cloud Gateway让人大失所望

现在的架构基本都是使用微服务的,而网关作为微服务的统一门户在架构模式中用得越来越多,API网关是所有客户端的单一入口点。 API网关模式是微服务体系结构的一个很好的起点,因为它能够将特定的请求路由到我们从整体上分离的不同服务。事实上…

嘿嘿嘿,10个我经常逛的“小网站”,不骗人

反思一下,为什么你会点进来~ 咳咳,步入正题。 工欲善其事必先利其器,你们的收藏夹里收藏了多少“小网站”?今天和大家分享10个我压箱底的效率工具/平台,现在用不上不要紧,赶紧收藏最关键! 1.G…

【产品设计】APP常见的6种图片浏览模式

六种是指比较常见的图片浏览模式,是在这四种的基础上加上手势来实现另一种读图方式,这里不绝对说就这么几种,那么就谈谈个人对每种图片浏览模式说说自己在实际使用和工作中的一些理解,以及这些模式在实际设计中,哪一种…

智能聊天机器人––ChatGPT初体验

最近几天,由OpenAI公司发布的ChatGPT聊天机器人火了,小杨也怀着对新鲜事物的好奇,亲自体验了一下这个火爆全网,让人沉迷其中无法自拔的ChatGPT聊天机器人,经过体验,我只想用一个字来表达我的感受&#xff0…

【LeetCode每日一题】——142.环形链表 II

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【题目进阶】九【时间频度】十【代码实现】十一【提交结果】一【题目类别】 链表 二【题目难度】 中等 三【题目编号】 142.环形链表 II 四【题目描述】 …

Java百度地图全套教程(地图找房、轻骑小程序、金运物流等)

课程简介: 本课程基于百度地图技术,将企业项目中地图相关常见应用场景的落地实战,包括有地图找房、轻骑小程序、金运物流等。同时还讲了基于Netty实现高性能的web服务,来处理高并发的问题。 学完本课程能够收获:百度…

支持本地挂载的网盘文件列表工具AList

什么是 Alist? AList 是一个支持多存储的文件列表程序,使用 Gin 框架和 Solidjs 库。可以将常见的 18 种网盘整合在一起,并支持 WebDAV 客户端访问。 之前老苏写过一篇 Alist, 但此 Alist 非彼 Alist,之前的 A 应该是 …

React基础知识(React基本使用、JSX语法、React模块化与组件化)(一)

系列文章目录 文章目录系列文章目录一、React简介1.1 React的特点1.2 React高效的原因二、React基本使用2.1 引入react相关js库2.2 创建虚拟DOM的两种方法2.3 虚拟DOM和真实DOM三、JSX基本使用3.1 jsx使用四、React模块化与组件化4.1 函数式组件4.2 类式组件一、React简介 1.英…

Kafka消费者组消费进度监控

针对Kafka消费者,重要的就是监控消费进度或者是消费的滞后程度,有个专业名词 消费者 Lag 或 Consumer Lag。 滞后程度(Consumer Lag)是指消费者当前落后生产者的程度。比如Kafka 生产者向某主题成功生产了 100 万条消息&#xff0…

一个.NetCore前后端分离、模块化、插件式的通用框架

今天给大家推荐一个基于.NET 6实现的快速开发平台。采用模块化插件式开发,前后端分离,开箱即用。 项目简介 这是一个开箱即用的快速开发平台,前后端分离架构,支持插件式开发,支持工作流、可视化表单功能。系统基础功…

Qt 快速读写Excel指南

Qt Windows 下快速读写Excel指南 很多人搜如何读写excel都会看到用QAxObject来进行操作,很多人试了之后都会发现一个问题,就是慢,非常缓慢!因此很多人得出结论是QAxObject读写excel方法不可取,效率低。 后来我曾试过用…

网络攻击损失不容小觑

据研究数据显示,2022年数据泄露给企业造成的平均损失为435万美元;如果是勒索软件攻击,损失将增加到454万美元。当然这只是估计,在某些国家或地区平均损失更高,比如在美国,损失接近1000万美元。 此外&#x…

如何制作并使用动静态库

制作并使用动静态库🏞️1. 动静态库概念🌁2. 如何制作动静态库📖2.1 制作静态库📖2.2 制作动态库🌠3. 如何使用动静态库📖3.1 使用静态库📖3.2 使用动态库🍁4. 动态库的加载原理&…

Mybatis-plus实战项目演示+自定义元数据对象处理器+ws

目录 一,mybatis-plus实战一 1.导入依赖 2.application.yml配置 3.实体类 4.mapper 5.service层 6.启动类上配置 二,mybatis-plus实战二 1.导入依赖 2.application.yml配置 3.实体类 2.mapper 3.service 4.分页配置 5.放一个在controller层…

jeecg-boot中实现跳过登录验证访问其他vue页面

大家好,我是雄雄,欢迎关注微信公众号,雄雄的小课堂。 前言 大家都知道,我们正常的项目,都做了访问限制,也就是,只有当用户登录本平台后,才能让用户访问别的页面,否则默认…

【Vue】Vue中mixins的使用方法及实际项目应用详解

文章目录(1)mixin基础(2)mixin特点1.选项合并2.方法和参数在各组件中不共享(3)mixin与vuex的区别(4)mixin与公共组件的区别(5)项目实践(6&#xf…

Session | 基于Session改造oa项目的登录功能

目录 一:总结域对象 二:基于Session改造oa项目的登录功能 三:oa项目的安全退出系统 一:总结域对象 (1)request(对应的类名:HttpServletRequest) 请求域(请…

【机器学习】机器学习30个笔试题

机器学习试题 在回归模型中,下列哪一项在权衡欠拟合(under-fitting)和过拟合(over-fitting)中影响最大?(A) A. 多项式阶数 B. 更新权重 w 时,使用的是矩阵求逆还是梯度下…