一、整体逻辑及效果
该程序的整体核心逻辑是为了调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.