[ ABAP技术 ] - 使用CL_SALV_TABLE实现ALV报表(Traffic Light / ALV Functions / Set Column)

本文简介了SAP标准ALV报表的实现类 CL_SALV_TABLE 的主要用法。控制ALV的显示时,主要通过以下对于几个属性类的设置实现:

通过本篇博客,将会了解到以下知识点:
- 使用exception column生成traffic light
- 使用icon生成traffic light
- 修正traffic light的描述
- 自动最优列宽
- 设置ALV standard function


场景一:使用sap icon生成traffic light列,并显示结果。

REPORT ztest_alv_01.

TYPES: BEGIN OF ty_alv,
         lights(4) TYPE c,
         text(20)  TYPE c,
       END OF ty_alv.

DATA: gt_result  TYPE TABLE OF ty_alv,
      go_alv     TYPE REF TO cl_salv_table,
      gr_columns TYPE REF TO cl_salv_columns_table,
      gr_column  TYPE REF TO cl_salv_column_table.

TYPE-POOLS : icon.

START-OF-SELECTION.

*   initial result table
  gt_result = VALUE #( ( lights = icon_red_light  text = 'RED SIGNAL'    )
                       ( lights = icon_yellow_light  text = 'YELLOW SIGNAL' )
                       ( lights = icon_green_light  text = 'GREEN SIGNAL'  )
                     ).
*   get alv instance
  CALL METHOD cl_salv_table=>factory
    IMPORTING
      r_salv_table = go_alv
    CHANGING
      t_table      = gt_result.

*   column description
  gr_columns = go_alv->get_columns( ).
  TRY.
      gr_column ?= gr_columns->get_column( 'LIGHTS' ).
      gr_column->set_short_text( 'Status' ).
      gr_column->set_medium_text( 'Status Mdm' ).
      gr_column->set_long_text( 'Status Long' ).

      gr_column ?= gr_columns->get_column( 'TEXT' ).
      gr_column->set_short_text( 'Text' ).
      gr_column->set_medium_text( 'Text Mdm' ).
      gr_column->set_long_text( 'Text Long' ).
    CATCH cx_salv_not_found.
  ENDTRY.

*   alv display
  CALL METHOD go_alv->display.

程序运行结果如下:
运行结果

场景二:使用ALV的exception列来显示traffic light,激活ALV最优列宽,激活ALV报表的标准功能。


REPORT ztest_alv_01.

TYPES: BEGIN OF ty_alv_result,
         lights(1) TYPE c,
         text(20)  TYPE c,
       END OF ty_alv_result.
DATA: gt_result    TYPE TABLE OF ty_alv_result,
      go_alv       TYPE REF TO cl_salv_table,
      gr_functions TYPE REF TO cl_salv_functions_list,
      gr_columns   TYPE REF TO cl_salv_columns_table,
      gr_column    TYPE REF TO cl_salv_column_table.

START-OF-SELECTION.

*   initial result table 
  gt_result = VALUE #( ( lights = '1'  text = 'RED SIGNAL'    )
                       ( lights = '2'  text = 'YELLOW SIGNAL' )
                       ( lights = '3'  text = 'GREEN SIGNAL'  )
                     ).
*   get alv instance 
  CALL METHOD cl_salv_table=>factory
    IMPORTING
      r_salv_table = go_alv
    CHANGING
      t_table      = gt_result.

*   set exception column 
  gr_columns = go_alv->get_columns( ).
  gr_columns->set_exception_column( value = 'LIGHTS' ).

*   optimize columns 
  gr_columns->set_optimize( abap_true ).

*   column description                              
*   gr_columns->get( ).        // get all column list 
*   gr_columns->get_column ()  // get single column   
  TRY.
      gr_column ?= gr_columns->get_column( 'LIGHTS' ).
      gr_column->set_short_text( 'Status' ).
      gr_column->set_medium_text( 'Status Mdm' ).
      gr_column->set_long_text( 'Status Long' ).

      gr_column ?= gr_columns->get_column( 'TEXT' ).
      gr_column->set_short_text( 'Text' ).
      gr_column->set_medium_text( 'Text Mdm' ).
      gr_column->set_long_text( 'Text Long' ).
    CATCH cx_salv_not_found.
  ENDTRY.

* open alv std functions
  gr_functions = go_alv->get_functions( ).
  gr_functions->set_all( abap_true ).

*   alv display 
  CALL METHOD go_alv->display.

程序运行结果如下:
程序运行结果


Tips:
1)若使用DDIC的structure定义ALV的显示结果,则不需要在程序中为column指定描述,ALV的列名会使用对应字段data element中定义的short、medium和long的名称;

2)Exception列的描述也会变为data element的描述;

3)SAP提供了很多ALV的示例程序在package SLIS 中,在实际项目实施过程中,如遇到陌生的功能点,可参考示例程序。


猜你喜欢

转载自blog.csdn.net/nkgavinguo/article/details/79187879