ABAP SALV-隐藏列、修改列标题、添加图标列、调整列位置

01 功能说明

上篇:ABAP SALV-选择模式、触发事件

本系列将通过模拟用户与开发者之间的对话场景,来逐步演示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猿
在这里插入图片描述

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ABAP Enhancement-Section是一种ABAP语言中的扩展机制,它允许我们在SAP标准程序中进行修改和增强。通过使用ABAP Enhancement-Section,我们可以在标准程序的不同部分插入自定义代码,以满足特定的业务需求。 ABAP Enhancement-Section的使用步骤如下: 1. 找到要修改或增强的SAP标准程序。 2. 使用ABAP Developer Tools或ABAP Workbench打开该程序。 3. 在程序中找到适合插入自定义代码的位置。 4. 在找到的位置上创建一个新的ABAP Enhancement-Section。 5. 给这个新的ABAP Enhancement-Section起一个合适的名字。 6. 在ABAP Enhancement-Section中编写自定义的代码,实现对标准程序的修改或增强。 7. 保存所有的修改并激活程序。 ABAP Enhancement-Section的优点在于它能够实现定制化的扩展,而无需对SAP标准程序进行修改。这样一来,在升级或修补SAP系统时,我们的修改不会丢失或被覆盖。同时,ABAP Enhancement-Section还能提高代码的可读性和可维护性,因为我们的自定义代码与标准代码分离,易于理解和调试。 ABAP Enhancement-Section支持多种类型的扩展,如隐式增强(Implicit Enhancement)和显示增强(Explicit Enhancement)。隐式增强是指在标准程序中创建一个新的ABAP Enhancement-Section并插入自定义代码。显示增强是指通过在标准程序中用特定的注释标记出扩展点,然后在自定义代码中引用这些扩展点。 总而言之,ABAP Enhancement-Section是一种非常有用的扩展机制,可以帮助我们在SAP标准程序中实现修改和增强,同时保持程序的稳定性和可升级性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值