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

一、概要

在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 中设置单元格颜色的过程相似。

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值