REPORT z_alv_line_color.
*---------------------------------------------------------------------*
* Example of ALV with Line 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_user_addr,
    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
    line_color(4) TYPE c,                   " Line 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.

  PERFORM f_fill_color.

*---------------------------------------------------------------------*
END-OF-SELECTION.

  PERFORM f_display_data.

*---------------------------------------------------------------------*
*      Form  f_read_data
*---------------------------------------------------------------------*
FORM f_read_data.

  SELECT bname name_first name_last name_textc
    INTO CORRESPONDING FIELDS OF TABLE gt_user_addr
    FROM user_addr UP TO p_max ROWS.

ENDFORM.                               " F_READ_DATA
*--------------------------------------------------------------------*
*      Form  f_fill_color
*--------------------------------------------------------------------*
FORM f_fill_color.

  DATA l_rnd_value TYPE integer2.

  FIELD-SYMBOLS <ls_user_addr> TYPE ty_user_addr.

  LOOP AT gt_user_addr ASSIGNING <ls_user_addr>.

*   Random value
    CALL FUNCTION 'RANDOM_I2'
      EXPORTING
        rnd_min   = 0
        rnd_max   = 3
      IMPORTING
        rnd_value = l_rnd_value.

    CASE l_rnd_value.
      WHEN 0.
        <ls_user_addr>-line_color = 'C100'. " Blue.
      WHEN 1.
        <ls_user_addr>-line_color = 'C300'. " Yellow.
      WHEN 2.
        <ls_user_addr>-line_color = 'C500'. " Green.
      WHEN 3.
        <ls_user_addr>-line_color = 'C600'. " Red.
    ENDCASE.

  ENDLOOP.

ENDFORM.                               " F_FILL_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 - Name of the field with color
  ls_layout-info_fieldname = 'LINE_COLOR'.

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