REPORT z_alv_cell_color.
*---------------------------------------------------------------------*
* Example of ALV with Cell color *
*---------------------------------------------------------------------*
* Author : Michel PIOUD - Updated 30-Jan-09 *
* HomePage : http://www.oocities.org/mpioud/Abap_programs.html *
*---------------------------------------------------------------------*
* Macro definition
DEFINE m_fieldcat.
add 1 to ls_fieldcat-col_pos.
ls_fieldcat-fieldname = &1.
ls_fieldcat-ref_tabname = &2.
append ls_fieldcat to lt_fieldcat.
END-OF-DEFINITION.
TYPE-POOLS: slis. " ALV Global types
SELECTION-SCREEN :
SKIP, BEGIN OF LINE,COMMENT 5(27) v_1 FOR FIELD p_max. "#EC NEEDED
PARAMETERS p_max(2) TYPE n DEFAULT '30' OBLIGATORY. "#EC *
SELECTION-SCREEN END OF LINE.
TYPES :
BEGIN OF ty_data,
bname TYPE user_addr-bname, " User Name
name_first TYPE user_addr-name_first, " First name
name_last TYPE user_addr-name_last, " Last name
name_textc TYPE user_addr-name_textc, " Full Name
END OF ty_data,
* Data displayed
BEGIN OF ty_user_addr.
INCLUDE TYPE ty_data.
TYPES : tabcolor TYPE lvc_t_scol, " Cell Color
END OF ty_user_addr.
DATA:
* Data displayed
gt_user_addr TYPE TABLE OF ty_user_addr.
*---------------------------------------------------------------------*
INITIALIZATION.
v_1 = 'Maximum of records to read'. "#EC NOTEXT
*---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM f_read_data.
*---------------------------------------------------------------------*
END-OF-SELECTION.
PERFORM f_display_data.
*---------------------------------------------------------------------*
* Form f_read_data
*---------------------------------------------------------------------*
FORM f_read_data.
DATA :
ls_user_addr TYPE ty_user_addr,
ls_data TYPE ty_data,
lt_data TYPE TABLE OF ty_data.
SELECT bname name_first name_last name_textc
INTO CORRESPONDING FIELDS OF TABLE lt_data
FROM user_addr UP TO p_max ROWS.
* Modify Color
LOOP AT lt_data INTO ls_data.
CLEAR ls_user_addr.
MOVE-CORRESPONDING ls_data TO ls_user_addr.
PERFORM f_modify_color USING 'NAME_TEXTC' CHANGING ls_user_addr.
PERFORM f_modify_color USING 'NAME_LAST' CHANGING ls_user_addr.
* Fill gt_user_addr
APPEND ls_user_addr TO gt_user_addr.
ENDLOOP.
ENDFORM. " F_READ_DATA
*---------------------------------------------------------------------*
* Form f_modify_color
*---------------------------------------------------------------------*
FORM f_modify_color USING u_fieldname TYPE lvc_fname
CHANGING us_user_addr TYPE ty_user_addr.
DATA :
l_rnd_value TYPE integer2,
ls_tabcolor TYPE lvc_s_scol.
* Random value
CALL FUNCTION 'RANDOM_I2'
EXPORTING
rnd_min = 0
rnd_max = 3
IMPORTING
rnd_value = l_rnd_value.
CLEAR ls_tabcolor.
ls_tabcolor-fname = u_fieldname.
CASE l_rnd_value.
WHEN 0.
ls_tabcolor-color-col = 1. " Blue.
ls_tabcolor-color-int = 0.
ls_tabcolor-color-inv = 0.
WHEN 1.
ls_tabcolor-color-col = 3. " Yellow.
ls_tabcolor-color-int = 0.
ls_tabcolor-color-inv = 0.
WHEN 2.
ls_tabcolor-color-col = 5. " Green.
ls_tabcolor-color-int = 0.
ls_tabcolor-color-inv = 0.
WHEN 3.
ls_tabcolor-color-col = 6. " Red.
ls_tabcolor-color-int = 0.
ls_tabcolor-color-inv = 0.
ENDCASE.
INSERT ls_tabcolor INTO TABLE us_user_addr-tabcolor.
ENDFORM. " F_MODIFY_COLOR
*---------------------------------------------------------------------*
* Form f_display_data
*---------------------------------------------------------------------*
FORM f_display_data.
DATA:
ls_layout TYPE slis_layout_alv,
ls_fieldcat TYPE slis_fieldcat_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv.
* Build the field catalog
m_fieldcat 'BNAME' 'USER_ADDR'.
m_fieldcat 'NAME_FIRST' 'USER_ADDR'.
m_fieldcat 'NAME_LAST' 'USER_ADDR'.
m_fieldcat 'NAME_TEXTC' 'USER_ADDR'.
* Fill Layout
ls_layout-coltab_fieldname = 'TABCOLOR'.
* Display the list
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = ls_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = gt_user_addr.
ENDFORM. " F_DISPLAY_DATA
***************** END OF PROGRAM Z_ALV_CELL_COLOR *********************