Mentor SAP
2018-01-09 Submitted by:- Admin

In this tutorial, we will learn how to add color to the row of an ALV using CL_SALV_TABLE. This is similar to Functional Module ALV, we need an extra column in the output internal table to apply colors to a particular row (or) particular cell.

 

To apply colors to row in ALV

 

Create a program in SE38(zooalv_add_color_row) and copy the below code.

 

REPORT zooalv_add_color_row.
*----------------------------------------------------------------------*
*       CLASS lcl_sflight DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_sflight DEFINITION.

  PUBLIC SECTION.
    TYPES: BEGIN OF lty_sflight,
             carrid    TYPE s_carr_id,
             connid    TYPE s_conn_id,
             fldate    TYPE s_date,
             price     TYPE s_price,
             currency  TYPE s_currcode,
             planetype TYPE s_planetye,
             seatsmax  TYPE s_seatsmax,
             seatsocc  TYPE s_seatsocc,
             color     TYPE lvc_t_scol, "<<< COLOR COLUMN
           END OF lty_sflight.

    METHODS:
      get_sflight_data,
      get_alv_instance,
      set_color,
      display.

    DATA: lo_alv     TYPE REF TO cl_salv_table,
          gt_sflight TYPE STANDARD TABLE OF lty_sflight.

ENDCLASS.                    "lcl_sflight DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_sflight IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_sflight IMPLEMENTATION.

* Get SFLIGHT data
  METHOD get_sflight_data.
    SELECT carrid connid fldate price currency planetype seatsmax
           seatsocc INTO CORRESPONDING FIELDS OF TABLE me->gt_sflight
                    FROM sflight.
  ENDMETHOD.                    "get_sflight_data

* Get ALV instance
  METHOD get_alv_instance.
    TRY.
        CALL METHOD cl_salv_table=>factory
          IMPORTING
            r_salv_table = lo_alv
          CHANGING
            t_table      = gt_sflight.
      CATCH cx_salv_msg.
    ENDTRY.

  ENDMETHOD.                    "get_alv_instance

* Display ALV
  METHOD display.
    CALL METHOD lo_alv->display.
  ENDMETHOD.                    "display
  METHOD set_color.
* Set color to a particular row based on your condition.
    FIELD-SYMBOLS: <lwa_sflight> TYPE lty_sflight.
    DATA: ls_color               TYPE lvc_s_scol.

    LOOP AT gt_sflight ASSIGNING <lwa_sflight>.
      IF <lwa_sflight>-seatsocc > 370.
        ls_color-color-col = 5.
        ls_color-color-int = 0.
        ls_color-color-inv = 0.
        APPEND ls_color TO <lwa_sflight>-color.
      ENDIF.
    ENDLOOP.
  ENDMETHOD.                    "set_color
ENDCLASS.                    "lcl_sflight IMPLEMENTATION


START-OF-SELECTION.
  DATA: lo_cl_sflight TYPE REF TO lcl_sflight,
        lo_columns    TYPE REF TO cl_salv_columns_table.


  CREATE OBJECT lo_cl_sflight.

* Get the Data for ALV report
  lo_cl_sflight->get_sflight_data( ).

* Get ALV instance
  lo_cl_sflight->get_alv_instance( ).


*------------- To apply COLOR to a ROW in ALV ---------------------*
*// 1. Get List of columns
  CALL METHOD lo_cl_sflight->lo_alv->get_columns
    RECEIVING
      value = lo_columns.

*// 2. Set the Color Column to the ALV
  TRY.
      CALL METHOD lo_columns->set_color_column
        EXPORTING
          value = 'COLOR'.
    CATCH cx_salv_data_error.
  ENDTRY.

*// 3. Add color to particular row
  lo_cl_sflight->set_color( ).

* Display ALV report
  lo_cl_sflight->display( ).

 

Output after adding colors to row: