您的位置:首页 > 其它

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

2018-01-28 17:38 671 查看
本文简介了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 中,在实际项目实施过程中,如遇到陌生的功能点,可参考示例程序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: