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 *********************