[ABAP] SALV-Table – Zeilen farbig anzeigen

TYPES: BEGIN OF ty_s_sflight,
         fldate	   TYPE s_date,
         planetype TYPE s_planetye,
         seatsmax	 TYPE s_seatsmax,
         seatsocc	 TYPE s_seatsocc,
         color     TYPE lvc_t_scol, " Farbspalte
       END OF ty_s_sflight.

TYPES: ty_it_sflight TYPE STANDARD TABLE OF ty_s_sflight WITH DEFAULT KEY.

START-OF-SELECTION.

  DATA(it_sflight) = VALUE ty_it_sflight( ).

  SELECT fldate,
         planetype,
         seatsmax,
         seatsocc
    INTO CORRESPONDING FIELDS OF TABLE @it_sflight
    FROM sflight.

  TRY.
      DATA: o_alv TYPE REF TO cl_salv_table.

      cl_salv_table=>factory( IMPORTING r_salv_table = o_alv
                              CHANGING  t_table      = it_sflight ).

* Farben in der Tabellen-Spalte 'COLOR' setzen
      LOOP AT it_sflight ASSIGNING FIELD-SYMBOL(<f>).
* Wenn >= 370 Belegte Plätze in der Economy Class
        IF <f>-seatsocc >= 370.
* in die Spalte COLOR wird für jede Tabellen-Zeile eine Farbtabelle eingefügt
          <f>-color = VALUE #( ( color-col = 5  " grün
                                 color-int = 0
                                 color-inv = 0
                               )
                             ).
        ENDIF.
      ENDLOOP.

* Namen der Farbspalte setzen
      o_alv->get_columns( )->set_color_column( 'COLOR' ).

* Grid anzeigen
      o_alv->display( ).
    CATCH cx_root INTO DATA(e_text).
      WRITE: / e_text->get_text( ).
  ENDTRY.

Links

[ABAP] Dialogbox mit SALV-Table ohne zusätzliches Dynpro

* Eventhandlerklasse
CLASS cl_handle_events DEFINITION.
  PUBLIC SECTION.
    METHODS on_close FOR EVENT close OF cl_gui_dialogbox_container
      IMPORTING sender.
ENDCLASS.

CLASS cl_handle_events IMPLEMENTATION.
  METHOD on_close.
    IF sender IS NOT INITIAL.
      sender->free( ).
    ENDIF.
  ENDMETHOD.
ENDCLASS.

DATA: it_sflight TYPE STANDARD TABLE OF sflight.

START-OF-SELECTION.
  " Daten holen
  SELECT * INTO TABLE it_sflight FROM sflight WHERE carrid = 'LH'.

  " Container für Popup erzeugen
  DATA(o_gui_cnt) = NEW cl_gui_dialogbox_container( no_autodef_progid_dynnr = abap_true
                                                    caption = 'Ausgabe Testdaten für Lufthansa'
                                                    top = 20
                                                    left = 20
                                                    width = 1280
                                                    height = 400 ).

  DATA: o_salv TYPE REF TO cl_salv_table.

  " SALV-Table erzeugen
  cl_salv_table=>factory( EXPORTING
                            r_container  = o_gui_cnt
                          IMPORTING
                            r_salv_table = o_salv
                          CHANGING
                            t_table      = it_sflight ).

  " Events registrieren
  DATA(o_events) = NEW cl_handle_events( ).
  SET HANDLER o_events->on_close FOR o_gui_cnt.

  " SALV-Table anzeigen
  o_salv->display( ).

  " Anzeige des Popup erzwingen
  WRITE: / space.

[ABAP] SALV-Table: Funktionsbuttons hinzufügen

Variante 1 (nur wenn in eigenem Dynpro + Container)

SELECT * FROM sflights INTO TABLE @DATA(it_data).

DATA: o_salv TYPE REF TO cl_salv_table.

cl_salv_table=>factory( EXPORTING
                          r_container  = cl_gui_container=>default_screen " Standard-Container der Listausgabe nutzen
                        IMPORTING
                          r_salv_table = o_salv
                        CHANGING
                          t_table      = it_data ).

o_salv->get_functions( )->set_all( ).

* Für diesen Button muss zus. noch ein Event-Handler ausgeprägt werden
o_salv->get_functions( )->add_function( name     = 'MYFUNC'
                                        icon     = |{ icon_complete }|
                                        text     = 'Funktionstext'
                                        tooltip  = 'ToolTipText'
                                        position = if_salv_c_function_position=>right_of_salv_functions ).

o_salv->display( ).

* Erzwingen von cl_gui_container=>default_screen (Listausgabe)
WRITE space.

Variante 2 (PF_STATUS)

* ohne Angabe eines Containers in der factory-Methode:
SELECT * FROM sflights INTO TABLE @DATA(it_data).

DATA: o_salv TYPE REF TO cl_salv_table.

cl_salv_table=>factory( IMPORTING
                          r_salv_table = o_salv
                        CHANGING
                          t_table      = it_data ).

* PF-Status aus Programm SAPLSLVC_FULLSCREEN benutzen
o_salv->set_screen_status( pfstatus      = 'STANDARD_FULLSCREEN'
                           report        = 'SAPLSLVC_FULLSCREEN'
                           set_functions = cl_salv_model_base=>c_functions_all ).

o_salv->display( ).

oder

SELECT * FROM sflights INTO TABLE @DATA(it_data).

DATA: o_salv TYPE REF TO cl_salv_table.

cl_salv_table=>factory( IMPORTING
                          r_salv_table = o_salv
                        CHANGING
                          t_table      = it_data ).

* PF-Status manuelle aus Funktionsgruppe SALV_METADATA_STATUS kopieren
* im lokalen Programm (sy-repid) aufrufen
o_salv->set_screen_status( pfstatus      = 'SALV_TABLE_STANDARD'
                           report        = sy-repid
                           set_functions = cl_salv_model_base=>c_functions_all ).

o_salv->display( ).

[ABAP] SALV-Table Eventhandling

* mögliche Events sind:
* SET HANDLER gr_events->on_user_command FOR o_alv->get_event( ).
* SET HANDLER gr_events->on_before_user_command FOR o_alv->get_event( ).
* SET HANDLER gr_events->on_after_user_command FOR o_alv->get_event( ).
* SET HANDLER gr_events->on_double_click FOR o_alv->get_event( ).
* SET HANDLER gr_events->on_top_of_page FOR o_alv->get_event( ).
* SET HANDLER gr_events->on_end_of_page FOR o_alv->get_event( ).
 
* Klasse für Eventhandling definieren
CLASS lcl_events DEFINITION.
  PUBLIC SECTION.
* Doppelklick
    CLASS-METHODS: on_double_click FOR EVENT double_click OF cl_salv_events_table
      IMPORTING
          row
          column
          sender.
* Link-Klick
    CLASS-METHODS: on_link_click FOR EVENT link_click OF cl_salv_events_table
      IMPORTING
          row
          column
          sender.
ENDCLASS.
 
CLASS lcl_events IMPLEMENTATION.
  METHOD on_double_click.
    MESSAGE | { row } , { column } | TYPE 'I'.
  ENDMETHOD.
  METHOD on_link_click.
    MESSAGE | { row } , { column } | TYPE 'I'.
  ENDMETHOD.
ENDCLASS.
 
DATA: o_salv TYPE REF TO cl_salv_table.

...
 
* Handler registrieren
SET HANDLER lcl_events=>on_double_click FOR o_salv->get_event( ).
SET HANDLER lcl_events=>on_link_click FOR o_salv->get_event( ).

[ABAP] SALV-Table – Aggregationsfunktionen

DATA: o_alv TYPE REF TO cl_salv_table.

...

* vorher sortieren und subtotal setzen
o_alv->get_sorts( )->add_sort( columnname = 'CARRID' subtotal = abap_true ).

* Aggregation
o_alv->get_aggregations( )->add_aggregation( columnname  = 'PAYMENTSUM'                    " für Spalte 'PAYMENTSUM'
                                             aggregation = if_salv_c_aggregation=>total ). " Summe bilden