01 功能说明
本系列将通过模拟用户与开发者之间的对话场景,来逐步演示SALV的使用。在本篇中,我们将继续上一篇内容,以解决用户提出的另外两个需求: 合计、小计。让我们来看看是如何实现的吧。
赶快动手试一试,掌握它的用法。
02 功能效果
第8天 用户说:合计
需要对距离进行合计。
IF p_day08 EQ 'X'.
DATA lo_aggregations TYPE REF TO cl_salv_aggregations.
lo_aggregations = go_salv->get_aggregations( ).
lo_aggregations->add_aggregation(
EXPORTING
columnname = 'DISTANCE'
aggregation = if_salv_c_aggregation=>total
).
...
第9天 用户说:小计
需要在合计基础上,进一步对航线进行小计。
DATA lo_sort TYPE REF TO cl_salv_sort.
"小计前需先进行排序
IF p_day06 EQ 'X'.
lo_sort = lo_sorts->get_sort( columnname = 'CARRID' ).
lo_sort->set_subtotal( 'X' ).
ELSE.
lo_sorts = go_salv->get_sorts( ).
lo_sorts->add_sort(
EXPORTING
columnname = 'CARRID'
sequence = if_salv_c_sort=>sort_down
subtotal = 'X'
).
ENDIF.
...
ENDIF.
03 源码分享
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1 .
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(79) day01 .
SELECTION-SCREEN END OF LINE.
...
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(79) day06 .
SELECTION-SCREEN END OF LINE.
...
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(79) day08 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(79) day09 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t2.
PARAMETERS p_day01 AS CHECKBOX DEFAULT 'X' . "01、基本展示
...
PARAMETERS p_day06 AS CHECKBOX DEFAULT 'X' . "06、添加排序
...
PARAMETERS p_day08 AS CHECKBOX DEFAULT 'X' . "08、添加合计
PARAMETERS p_day09 AS CHECKBOX DEFAULT 'X' . "09、添加小计
SELECTION-SCREEN END OF BLOCK b2.
INITIALIZATION.
sy-title = 'ABAP SALV演示程序-公众号(ABAP猿)'.
t1 = '用户说'.
t2 = '你来做'.
day01 = '01、从表SPFLI获取数据,并进行基本展示。'.
...
day06 = '06、需要按照航线降序。'.
...
day08 = '08、需要对距离进行合计。'.
day09 = '09、需要在合计基础上,进一步对航线进行小计。'.
%_p_day01_%_app_%-text = '01、基本展示'.
...
%_p_day06_%_app_%-text = '06、添加排序'.
...
%_p_day08_%_app_%-text = '08、添加合计'.
%_p_day09_%_app_%-text = '09、添加小计'.
START-OF-SELECTION.
*------------------------------------*
CHECK p_day01 EQ 'X'.
DATA gt_spfli TYPE TABLE OF spfli.
SELECT * FROM spfli INTO TABLE gt_spfli UP TO 30 ROWS.
DATA go_salv TYPE REF TO cl_salv_table.
cl_salv_table=>factory(
IMPORTING
r_salv_table = go_salv
CHANGING
t_table = gt_spfli ).
*------------------------------------*
...
*------------------------------------*
IF p_day06 EQ 'X'.
DATA lo_sorts TYPE REF TO cl_salv_sorts.
lo_sorts = go_salv->get_sorts( ).
lo_sorts->add_sort(
EXPORTING
columnname = 'CARRID'
sequence = if_salv_c_sort=>sort_down
).
...
ENDIF.
*------------------------------------*
...
*------------------------------------*
IF p_day08 EQ 'X'.
DATA lo_aggregations TYPE REF TO cl_salv_aggregations.
lo_aggregations = go_salv->get_aggregations( ).
lo_aggregations->add_aggregation(
EXPORTING
columnname = 'DISTANCE'
aggregation = if_salv_c_aggregation=>total
).
...
ENDIF.
*------------------------------------*
IF p_day09 EQ 'X' AND p_day08 = 'X'.
DATA lo_sort TYPE REF TO cl_salv_sort.
"小计前需先进行排序
IF p_day06 EQ 'X'.
lo_sort = lo_sorts->get_sort( columnname = 'CARRID' ).
lo_sort->set_subtotal( 'X' ).
ELSE.
lo_sorts = go_salv->get_sorts( ).
lo_sorts->add_sort(
EXPORTING
columnname = 'CARRID'
sequence = if_salv_c_sort=>sort_down
subtotal = 'X'
).
ENDIF.
...
ENDIF.
*------------------------------------*
go_salv->display( ).
小贴士:
- 可使用BC_DATA_GEN生成数据,以便查看演示效果;
- 以上纯属个人总结,如有纰漏请联系我;
以上是今日分享,希望对你有所帮助~~
04 关注我
更多干货请扫码关注微信公众号:ABAP猿