Traffic Light in ALV

How to display “Traffic Light” through ALV class CL_SALV_TABLE in SAP. This is useful while displaying custom status reports, message logs etc, as an easy visual representation.


The code:

REPORT ztest_sb_alv1.

TYPESBEGIN OF x_output,
         
icon      TYPE c LENGTH 4,
         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,
         seatocper 
TYPE p LENGTH DECIMALS 2,
       
END OF x_output,
       x_output_tt 
TYPE STANDARD TABLE OF x_output WITH NON-UNIQUE DEFAULT KEY.
DATA it_output TYPE x_output_tt.

PARAMETERSp_carrid TYPE s_carr_id OBLIGATORY.

AT SELECTION-SCREEN OUTPUT.
  
DATA lt_sel_texts TYPE STANDARD TABLE OF rsseltexts.
  
APPEND VALUE #name 'P_CARRID'  kind 'P' text 'Carrier ID' TO lt_sel_texts.
  
CALL FUNCTION 'SELECTION_TEXTS_MODIFY'
    
EXPORTING
      
program  sy-repid
    
TABLES
      seltexts 
lt_sel_texts.

START-OF-SELECTION.

  
SELECT carrid,
  connid
,
  fldate
,
  price
,
  
currency,
  planetype
,
  seatsmax
,
  seatsocc
    
FROM sflight
    
INTO TABLE @DATA(li_sflight)
    
WHERE carrid @p_carrid.
  
IF sy-subrc <> 0.
    
MESSAGE i001(00WITH 'No data found!!!'.
    
LEAVE LIST-PROCESSING.
  
ENDIF.

END-OF-SELECTION.


  it_output 
VALUE #(
                
FOR lwa_flight IN li_sflight
                
(
                  carrid    
lwa_flight-carrid
                  connid    
lwa_flight-connid
                  fldate    
lwa_flight-fldate
                  price     
lwa_flight-price
                  c
urrency  lwa_flight-currency
                  planetype 
lwa_flight-planetype
                  seatsmax  
lwa_flight-seatsmax
                  seatsocc  
lwa_flight-seatsocc
                  seatocper 
roundval = ( ( lwa_flight-seatsocc / lwa_flight-seatsmax 100 dec )
                  
icon      COND #(
                   
WHEN roundval = ( ( lwa_flight-seatsocc / lwa_flight-seatsmax 100 dec 30
                        THEN icon_green_light
                   
WHEN roundval = ( ( lwa_flight-seatsocc / lwa_flight-seatsmax 100 dec BETWEEN 30 AND 80
                        THEN icon_yellow_light
                   
WHEN roundval = ( ( lwa_flight-seatsocc / lwa_flight-seatsmax 100 dec )  80
                            THEN icon_red_light 
)
                      
)
                      
).


  
IF it_output IS NOT INITIAL.

    
TRY.
        cl_salv_table
=>factory(
          
IMPORTING
            r_salv_table 
DATA(lr_alv)
          
CHANGING
            t_table      
it_output ).
      
CATCH cx_salv_msg.
    
ENDTRY.
    
IF lr_alv IS BOUND.
      lr_alv
->get_display_settings( )->set_list_header'Demo Traffic Light' ).

      lr_alv
->get_functions( )->set_allabap_true ).

      lr_alv
->get_columns( )->set_optimize( ).

      lr_alv
->get_columns( )->get_column'ICON' )->set_short_text'Status' ).
      lr_alv
->get_columns( )->get_column'ICON' )->set_medium_text'Status' ).
      lr_alv
->get_columns( )->get_column'ICON' )->set_long_text'Status' ).

      lr_alv
->get_columns( )->get_column'SEATOCPER' )->set_short_text'Occ %' ).
      lr_alv
->get_columns( )->get_column'SEATOCPER' )->set_medium_text'Occupency %' ).
      lr_alv
->get_columns( )->get_column'SEATOCPER' )->set_long_text'Occupency %' ).

      lr_alv
->display( ).
    
ENDIF.

  
ELSE.
    
MESSAGE i001(00WITH 'No data found!!!'.
    
LEAVE LIST-PROCESSING.
  
ENDIF.

No comments:

Post a Comment