本文简介了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 中,在实际项目实施过程中,如遇到陌生的功能点,可参考示例程序。