Friday, March 11, 2011

Coloring ALV


*&---------------------------------------------------------------------*
*& Report  Z_ALV_COLOR
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  Z_ALV_COLOR.


TABLES:SPFLI.

TYPE-POOLS:SLIS.

PARAMETERS:P_COL TYPE I ,
           P_ROW TYPE I,
           P_COLOR(4) TYPE C .

DATA:T_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
     FS_FIELDCAT LIKE LINE OF T_FIELDCAT,
     FS_LAYOUT TYPE SLIS_LAYOUT_ALV ,
     W_COLOR(4) ,
     W_ROW TYPE I,
     W_FIELDNAME(20),
     W_PROG TYPE SY-REPID.

DATA:BEGIN OF T_SPFLI OCCURS 0,
     COLOR(4),
     CHECKBOX ,
     CELL TYPE SLIS_T_SPECIALCOL_ALV,
     CARRID TYPE SPFLI-CARRID,
     CONNID TYPE SPFLI-CONNID,
     CITYFROM TYPE SPFLI-CITYFROM,
     CITYTO TYPE SPFLI-CITYTO,
     DISTANCE TYPE SPFLI-DISTANCE,
     END OF T_SPFLI.

DATA:FS_CELL LIKE LINE OF T_SPFLI-CELL.

SELECT *
        FROM SPFLI
        INTO CORRESPONDING FIELDS OF TABLE T_SPFLI.

W_COLOR = P_COLOR.

T_SPFLI-COLOR = P_COLOR.
IF P_COL IS INITIAL AND P_ROW GT 0.
  MODIFY T_SPFLI INDEX P_ROW TRANSPORTING COLOR.
ENDIF.

FS_FIELDCAT-FIELDNAME = 'CARRID'.
FS_FIELDCAT-REF_TABNAME = 'SPFLI'.
FS_FIELDCAT-COL_POS = 1.
FS_FIELDCAT-KEY = 'X'.
FS_FIELDCAT-HOTSPOT = 'X'.
APPEND FS_FIELDCAT TO T_FIELDCAT.

CLEAR FS_FIELDCAT .
FS_FIELDCAT-FIELDNAME = 'CONNID'.
FS_FIELDCAT-REF_TABNAME = 'SPFLI'.
FS_FIELDCAT-COL_POS = 2.
FS_FIELDCAT-KEY = 'X'.
FS_FIELDCAT-HOTSPOT = 'X'.
APPEND FS_FIELDCAT TO T_FIELDCAT.

CLEAR FS_FIELDCAT .
FS_FIELDCAT-FIELDNAME = 'DISTANCE'.
FS_FIELDCAT-REF_TABNAME = 'SPFLI'.

FS_FIELDCAT-COL_POS = 3.
FS_FIELDCAT-KEY = ' '.
FS_FIELDCAT-EDIT = 'X'.
APPEND FS_FIELDCAT TO T_FIELDCAT.

CLEAR FS_FIELDCAT.
FS_FIELDCAT-FIELDNAME = 'CITYFROM'.
FS_FIELDCAT-REF_TABNAME = 'SPFLI'.
FS_FIELDCAT-COL_POS = 4.
FS_FIELDCAT-KEY = ' '.
APPEND FS_FIELDCAT TO T_FIELDCAT.

LOOP AT T_FIELDCAT INTO FS_FIELDCAT.
  IF FS_FIELDCAT-COL_POS EQ P_COL.
    FS_FIELDCAT-EMPHASIZE = P_COLOR.
    W_FIELDNAME = FS_FIELDCAT-FIELDNAME.
    IF P_ROW IS INITIAL AND P_COL GT 0.
      MODIFY T_FIELDCAT FROM FS_FIELDCAT TRANSPORTING EMPHASIZE.
    ENDIF.
  ENDIF.
ENDLOOP.

FS_CELL-FIELDNAME = W_FIELDNAME .
FS_CELL-COLOR-COL = 6.
FS_CELL-NOKEYCOL = 'X'.
APPEND FS_CELL TO T_SPFLI-CELL.

IF P_ROW IS NOT INITIAL AND P_COL IS NOT INITIAL.
  MODIFY T_SPFLI INDEX P_ROW TRANSPORTING CELL.
ENDIF.

FS_LAYOUT-INFO_FIELDNAME = 'COLOR'.
FS_LAYOUT-BOX_FIELDNAME = 'CHECKBOX'.
FS_LAYOUT-COLTAB_FIELDNAME = 'CELL'.
FS_LAYOUT-F2CODE = '&ETA'.

W_PROG = SY-REPID.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
  EXPORTING
    I_CALLBACK_PROGRAM = W_PROG
    IS_LAYOUT          = FS_LAYOUT
    IT_FIELDCAT        = T_FIELDCAT
  TABLES
    T_OUTTAB           = T_SPFLI
  EXCEPTIONS
    PROGRAM_ERROR      = 1
    OTHERS             = 2.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

No comments:

Post a Comment