点击上方 蓝字 关注我们
Studies serve for delight, for ornament and for ability.
读书足以怡情,足以博彩,足以长才。
功能说明
上篇: [ ABAP SALV-隐藏列、修改列标题、添加图标列、调整列位置
](http://mp.weixin.qq.com/s?__biz=Mzg3OTE2Njg0OQ==&mid=2247493824&idx=1&sn=d55a310f49f4b5cd0212c0b68a25787d&chksm=cf0a3c2ef87db5385a04d9249869b51f6b1bd02921dd31754266817e68f14d74c23db01ec974&scene=21#wechat_redirect)
本系列将通过模拟用户与开发者之间的对话场景, 来逐步演示SALV的使用。在本篇中,我们将延续前文内容,解决用户最新提出的需求。
今天我们的主题是SALV模型中的另外两个功能:如何 固定列 以及如何添加鼠标 悬停文本
。相信通过亲自操作,你能够快速的理解和掌握这些知识点。让我们一起动手尝试一下,看看如何实现这些功能吧!
功能效果
第 16 天 用户说
固定序号列、图标列,方便查看。
IF p_day16 = 'X' ."固定列
lo_columns -> set_key_fixation ( 'X' ).
lo_column ?= lo_columns -> get_column ( columnname = 'SNUM' ).lo_column -> set_key ( 'X' ).
lo_column ?= lo_columns -> get_column ( columnname = 'ICON' ).lo_column -> set_key ( 'X' ).
ENDIF .第 17 天 用户说
图标列标题添加悬停文本、不同图标需要展示不同悬停文本。
IF p_day17 = 'X' ."列标题悬停文本
lo_column ?= lo_columns -> get_column ( columnname = 'ICON' ).lo_column -> set_tooltip ( '列标题:鼠标悬停有文本!' ).
"单元格内容悬停文本
DATA lo_functional_settings TYPE REF TO cl_salv_functional_settings .
DATA lo_tooltips TYPE REF TO cl_salv_tooltips .
lo_functional_settings = go_salv -> get_functional_settings ( ).
lo_tooltips = lo_functional_settings -> get_tooltips ( ).lo_tooltips -> add_tooltip (
EXPORTING
type = cl_salv_tooltip => c_type_icon "不设置图标列,不起效果value = '@5B@'
tooltip = '图标值:绿灯!'
).
lo_tooltips -> add_tooltip (
EXPORTING
type = cl_salv_tooltip => c_type_iconvalue = '@5C@'
tooltip = '图标值:红灯!'
).
lo_tooltips -> add_tooltip (
EXPORTING
type = cl_salv_tooltip => c_type_iconvalue = '@5D@'
tooltip = '图标值:黄灯!'
).
ENDIF .源码分享
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 01 ( 54 ) day03 .
SELECTION-SCREEN COMMENT 59 ( 54 ) day16 .
SELECTION-SCREEN END OF LINE .
SELECTION-SCREEN BEGIN OF LINE .
SELECTION-SCREEN COMMENT 01 ( 54 ) day04 .
SELECTION-SCREEN COMMENT 59 ( 54 ) day17 .
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 .PARAMETERS p_day16 AS CHECKBOX DEFAULT 'X' . "16、功能:固定列、
SELECTION-SCREEN COMMENT 59 ( 54 ) c16 FOR FIELD p_day16 .
SELECTION-SCREEN END OF LINE ....
SELECTION-SCREEN BEGIN OF LINE .PARAMETERS p_day04 AS CHECKBOX DEFAULT 'X' . "04、按钮设置
SELECTION-SCREEN COMMENT 03 ( 54 ) c04 FOR FIELD p_day04 .PARAMETERS p_day17 AS CHECKBOX DEFAULT 'X' . "17、功能:鼠标悬停文本
SELECTION-SCREEN COMMENT 59 ( 54 ) c17 FOR FIELD p_day17 .
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、能否优化下列宽?' .
day04 = '04、怎么没有应用工具栏按钮,能加上吗?' .
...
day14 = '14、不显示集团列,起飞国家、到达国家列标题调整。' .
day15 = '15、新增序号列、图标列,要求:居中显示,并调整到第头2列进行显示。' .
day16 = '16、将新增的序号、图标列固定,方便查看。' .
day17 = '17、图标列标题悬停文本、不同图标展示不同悬停文本' .
c01 = '01、基本展示' .
c02 = '02、外观设置' .
c03 = '03、列设置' .
c04 = '04、按钮设置' .
...
c14 = '14、功能:隐藏列、修改列标题' .
c15 = '15、功能:调整列位置、图标列' .
c16 = '16、功能:固定列' .
c17 = '17、功能:鼠标悬停文本' .
START-OF-SELECTION .
*------------------------------------*
CHECK p_day01 EQ 'X' .
BEGIN OF gty_spfli_incl ,
snum TYPE i ,
icon TYPE icon_d ,
END OF gty_spfli_incl .BEGIN OF gs_spfli .
INCLUDE TYPE spfli .
INCLUDE TYPE gty_spfli_incl .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_salvCHANGING
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 .IF p_day16 = 'X' ."固定列
lo_columns -> set_key_fixation ( 'X' ).
lo_column ?= lo_columns -> get_column ( columnname = 'SNUM' ).lo_column -> set_key ( 'X' ).
lo_column ?= lo_columns -> get_column ( columnname =...