ABAP 通过表名创建ALV报表并自定义颜色


一、整体逻辑及效果

该程序的整体核心逻辑是为了调FUNCTION ‘REUSE_ALV_GRID_DISPLAY’ ,该函数有两个比较重要的参数,一个是表结构参数,一个是表数据参数,这两块是构成ALV的核心;基于这两个参数构建完ALV后,可以在此基础上实现自定义数据行颜色效果,通过增加一个color字段来改变其效果。
实现效果:
在这里插入图片描述

二、逻辑实现

2.1 通过表名获取表结构

lv_tabname = 'zftplog'.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
  EXPORTING
    tabname        = lv_tabname
    langu          = sy-langu
  TABLES
    dfies_tab      = lt_dfies_tab
  EXCEPTIONS
    not_found      = 1
    internal_error = 2
    OTHERS         = 3.
    
    lv_index = 0.
LOOP AT lt_dfies_tab ASSIGNING FIELD-SYMBOL(<fs_fields>).
  lv_index = + 1.
  ls_field-col_pos = lv_index.
  ls_field-fieldname = <fs_fields>-fieldname.
  ls_field-seltext_l = <fs_fields>-fieldtext.
  APPEND ls_field TO lt_field.
ENDLOOP.

2.2 自定义颜色字段

TYPES: BEGIN OF ty_zftplog_color.
         INCLUDE STRUCTURE zftplog.
         TYPES: color TYPE char4,
       END OF ty_zftplog_color.
       
LOOP AT lt_zftplog_color ASSIGNING FIELD-SYMBOL(<fs_with_color>).
  IF sy-tabix MOD 2 = 0.
    <fs_with_color>-color = 'C212'.
  ELSE.
    <fs_with_color>-color = 'C410'.
  ENDIF.
ENDLOOP.

2.3 调用ALV函数

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    it_fieldcat = lt_field
    is_layout   = ls_layout
  TABLES
    t_outtab    = lt_zftplog_color.

三、整体代码

DATA: lt_field     TYPE slis_t_fieldcat_alv,
      ls_field     LIKE LINE OF lt_field,
      lt_output    TYPE TABLE OF zftplog,
      ls_ftplog    TYPE zftplog,
      cl_descr     TYPE REF TO cl_abap_structdescr,
      lt_dfies_tab TYPE TABLE OF dfies,
      lv_tabname   TYPE tabname,
      lv_index     TYPE c LENGTH 2,
      ls_layout TYPE slis_layout_alv.

TYPES: BEGIN OF ty_zftplog_color.
         INCLUDE STRUCTURE zftplog.
         TYPES: color TYPE char4,
       END OF ty_zftplog_color.

DATA: lt_zftplog_color TYPE TABLE OF ty_zftplog_color.

lv_tabname = 'zftplog'.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
  EXPORTING
    tabname        = lv_tabname
    langu          = sy-langu
  TABLES
    dfies_tab      = lt_dfies_tab
  EXCEPTIONS
    not_found      = 1
    internal_error = 2
    OTHERS         = 3.

lv_index = 0.
LOOP AT lt_dfies_tab ASSIGNING FIELD-SYMBOL(<fs_fields>).
  lv_index = + 1.
  ls_field-col_pos = lv_index.
  ls_field-fieldname = <fs_fields>-fieldname.
  ls_field-seltext_l = <fs_fields>-fieldtext.
  APPEND ls_field TO lt_field.
ENDLOOP.

ls_layout-window_titlebar = 'CX TEST2'.
ls_layout-info_fieldname = 'COLOR'.

SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_zftplog_color FROM zftplog.

LOOP AT lt_zftplog_color ASSIGNING FIELD-SYMBOL(<fs_with_color>).
  IF sy-tabix MOD 2 = 0.
    <fs_with_color>-color = 'C212'.
  ELSE.
    <fs_with_color>-color = 'C410'.
  ENDIF.
ENDLOOP.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    it_fieldcat = lt_field
    is_layout   = ls_layout
  TABLES
    t_outtab    = lt_zftplog_color.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酔墨诗欣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值