01 功能说明
本系列将通过模拟用户与开发者之间的对话场景,来逐步演示SALV的使用。在本篇中,我们将延续前文内容,解决用户最新提出的需求。
如果你已经 完成了前13步 ,那么你对整个SALV模型的功能应该有了全面的了解,这将为后续的学习和操作带来便利。细心的小伙伴可能已经注意到,我在每一步代码下都留下了省略号,这意味着除了已实现的功能外,我们还可以通过ALV控制对象来实现更多功能。
接下来,我们将探讨如何隐藏列、修改列标题、添加图标列以及调整列位置。
赶紧动手试一试,以便更好地掌握这些新的知识点。
02 功能效果
第14天 用户说:隐藏列、修改列标题
不显示集团列,起飞国家、到达国家列标题调整。
IF p_day14 = 'X'.
"列不可见、不可用
lo_column ?= lo_columns->get_column( columnname = 'MANDT' ).
lo_column->set_visible( 'X' ). "不可见
lo_column->set_technical( 'X' ). "技术列(布局也不可见)
"列标题修改
lo_column ?= lo_columns->get_column( columnname = 'COUNTRYFR' ).
lo_column->set_short_text( '起飞国家' ).
lo_column->set_medium_text( '起飞国家' ).
lo_column->set_long_text( '起飞国家' ).
lo_column ?= lo_columns->get_column( columnname = 'COUNTRYTO' ).
lo_column->set_short_text( '到达国家' ).
lo_column->set_medium_text( '到达国家' ).
lo_column->set_long_text( '到达国家' ).
ENDIF.
第15天 用户说:图标列、调整列位置
新增序号列、图标列,要求:居中显示,并调整到第头2列进行显示。
IF p_day15 = 'X'.
"调整列位置
lo_columns->set_column_position( columnname = 'SNUM' position = 1 ).
lo_columns->set_column_position( columnname = 'ICON' position = 2 ).
"取消关键列
lo_column ?= lo_columns->get_column( columnname = 'CARRID' ).
lo_column->set_key( '' ).
lo_column ?= lo_columns->get_column( columnname = 'CONNID' ).
lo_column->set_key( '' ).
lo_column ?= lo_columns->get_column( columnname = 'SNUM' ).
lo_column->set_short_text( '序号' ).
lo_column->set_medium_text( '序号' ).
lo_column->set_long_text( '序号' ).
lo_column->set_alignment( if_salv_c_alignment=>centered ).
lo_column ?= lo_columns->get_column( columnname = 'ICON' ).
lo_column->set_short_text( '图标' ).
lo_column->set_medium_text( '图标' ).
lo_column->set_long_text( '图标' ).
lo_column->set_icon( 'X' ).
lo_column->set_alignment( if_salv_c_alignment=>centered ).
LOOP AT gt_spfli INTO gs_spfli.
gs_spfli-snum = sy-tabix.
CASE sy-tabix.
WHEN 1.
gs_spfli-icon = '@5B@'.
WHEN 2.
gs_spfli-icon = '@5C@'.
WHEN 3.
gs_spfli-icon = '@5D@'.
WHEN OTHERS.
ENDCASE.
MODIFY gt_spfli FROM gs_spfli.
ENDLOOP.
ENDIF.
03 源码分享
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(54) day01 .
SELECTION-SCREEN COMMENT 59(54) day14 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(54) day02 .
SELECTION-SCREEN COMMENT 59(54) day15 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(54) day03 .
SELECTION-SCREEN END OF LINE.
...
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t2.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_day01 AS CHECKBOX DEFAULT 'X' . "01、基本展示
SELECTION-SCREEN COMMENT 03(54) c01 FOR FIELD p_day01.
PARAMETERS p_day14 AS CHECKBOX DEFAULT 'X' . "14、功能:隐藏列、修改列标题
SELECTION-SCREEN COMMENT 59(54) c14 FOR FIELD p_day14 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_day02 AS CHECKBOX DEFAULT 'X' . "02、外观设置
SELECTION-SCREEN COMMENT 03(54) c02 FOR FIELD p_day02.
PARAMETERS p_day15 AS CHECKBOX DEFAULT 'X' . "15、功能:调整列位置、图标列
SELECTION-SCREEN COMMENT 59(54) c15 FOR FIELD p_day15 .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS p_day03 AS CHECKBOX DEFAULT 'X' . "03、列设置
SELECTION-SCREEN COMMENT 03(54) c03 FOR FIELD p_day03.
SELECTION-SCREEN END OF LINE.
...
SELECTION-SCREEN END OF BLOCK b2.
INITIALIZATION.
sy-title = 'ABAP SALV演示程序-公众号(ABAP猿)'.
t1 = '用户说'.
t2 = '你来做'.
day01 = '01、从表SPFLI获取数据,并进行基本展示。'.
day02 = '02、能否修改下抬头标题文本,并斑马纹展示?'.
day03 = '03、能否优化下列宽?'.
...
day14 = '14、不显示集团列,起飞国家、到达国家列标题调整。'.
day15 = '15、新增序号列、图标列,要求:居中显示,并调整到第头2列进行显示。'.
c01 = '01、基本展示'.
c02 = '02、外观设置'.
c03 = '03、列设置'.
...
c14 = '14、功能:隐藏列、修改列标题'.
c15 = '15、功能:调整列位置、图标列'.
START-OF-SELECTION.
*------------------------------------*
CHECK p_day01 EQ 'X'.
TYPES:
BEGIN OF gty_spfli_incl,
snum TYPE i,
icon TYPE icon_d,
END OF gty_spfli_incl.
DATA:
BEGIN OF gs_spfli.
INCLUDE TYPE spfli.
INCLUDE TYPE gty_spfli_incl.
DATA:
END OF gs_spfli,
gt_spfli LIKE TABLE OF gs_spfli.
* 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_day02 EQ 'X'.
DATA lo_display TYPE REF TO cl_salv_display_settings.
lo_display = go_salv->get_display_settings( ).
lo_display->set_list_header( 'ABAP SALV演示程序-公众号(ABAP猿)' ).
lo_display->set_striped_pattern( 'X' ).
...
ENDIF.
*------------------------------------*
IF p_day03 EQ 'X'.
DATA lo_columns TYPE REF TO cl_salv_columns_table .
DATA lo_column TYPE REF TO cl_salv_column_table .
lo_columns = go_salv->get_columns( ).
lo_columns->set_optimize( 'X' ).
...
IF p_day14 = 'X'.
"列不可见、不可用
lo_column ?= lo_columns->get_column( columnname = 'MANDT' ).
lo_column->set_visible( 'X' ). "不可见
lo_column->set_technical( 'X' ). "技术列(布局也不可见)
"列标题修改
lo_column ?= lo_columns->get_column( columnname = 'COUNTRYFR' ).
lo_column->set_short_text( '起飞国家' ).
lo_column->set_medium_text( '起飞国家' ).
lo_column->set_long_text( '起飞国家' ).
lo_column ?= lo_columns->get_column( columnname = 'COUNTRYTO' ).
lo_column->set_short_text( '到达国家' ).
lo_column->set_medium_text( '到达国家' ).
lo_column->set_long_text( '到达国家' ).
ENDIF.
IF p_day15 = 'X'.
"调整列位置
lo_columns->set_column_position( columnname = 'SNUM' position = 1 ).
lo_columns->set_column_position( columnname = 'ICON' position = 2 ).
"取消关键列
lo_column ?= lo_columns->get_column( columnname = 'CARRID' ).
lo_column->set_key( '' ).
lo_column ?= lo_columns->get_column( columnname = 'CONNID' ).
lo_column->set_key( '' ).
lo_column ?= lo_columns->get_column( columnname = 'SNUM' ).
lo_column->set_short_text( '序号' ).
lo_column->set_medium_text( '序号' ).
lo_column->set_long_text( '序号' ).
lo_column->set_alignment( if_salv_c_alignment=>centered ).
lo_column ?= lo_columns->get_column( columnname = 'ICON' ).
lo_column->set_short_text( '图标' ).
lo_column->set_medium_text( '图标' ).
lo_column->set_long_text( '图标' ).
lo_column->set_icon( 'X' ).
lo_column->set_alignment( if_salv_c_alignment=>centered ).
LOOP AT gt_spfli INTO gs_spfli.
gs_spfli-snum = sy-tabix.
CASE sy-tabix.
WHEN 1.
gs_spfli-icon = '@5B@'.
WHEN 2.
gs_spfli-icon = '@5C@'.
WHEN 3.
gs_spfli-icon = '@5D@'.
WHEN OTHERS.
ENDCASE.
MODIFY gt_spfli FROM gs_spfli.
ENDLOOP.
ENDIF.
ENDIF.
*------------------------------------*
...
*------------------------------------*
go_salv->display( ).
小贴士:
- 可使用BC_DATA_GEN生成数据,以便查看演示效果;
- 以上纯属个人总结,如有纰漏请联系我;
以上是今日分享,希望对你有所帮助~~
04 关注我
更多干货请扫码关注微信公众号:ABAP猿