ALV Filter setzen

Um einen Filter in der ALV Ausgabe per Code zu setzen, gibt es zwei Möglichkeiten.

  1. Vorherige Definition eines Benutzerlayouts und anschließendes Setzen des Layouts im Code (siehe diesen Beitrag)
  2. Setzen des Filters per Code

Hier wird beschrieben, wie der Filter per Code vorbelegt werden kann. Der Benutzer kann anschließend wie gewohnt den Filter verändern und löschen. Das Setzen des Filters erfolgt in der Methode SET_ALV_FILTER der Klasse Z_TEST_VIEW.

Übegeben wird neben dem ALV noch die zu filternde Spalte sowie den Wert des Filters.

Deklaration

 CLASS z_test_view DEFINITION.
   PUBLIC SECTION.
 
     METHODS set_alv_filter
          IMPORTING icl_alv TYPE REF TO cl_salv_table
                    iv_columnname TYPE lvc_fname
                    iv_filter_value TYPE salv_de_selopt_low.
 
 ENDCLASS.

Implementation

 CLASS z_test_view IMPLEMENTATION. 
 *&---------------------------------------------------------------------*
 *        Filter setzen
 *----------------------------------------------------------------------*
 
   METHOD set_alv_filter.
 
     DATA: lcl_filters TYPE REF TO cl_salv_filters.  " Filterobjekt
 
     IF icl_alv IS NOT INITIAL.
       " Filterobjekt besorgen
       TRY.
           lcl_filters = icl_alv->get_filters( ).
 
           " gesetzter Filter entfernen
           lcl_filters->remove_filter( iv_columnname ).
 
           " neuen Filter setzen
           IF iv_filter_value IS NOT INITIAL.
 
             lcl_filters->add_filter( columnname = iv_columnname
                                      sign = 'I'
                                      option = 'EQ'
                                      low = iv_filter_value ).
           ENDIF.
         CATCH cx_salv_existing
               cx_salv_data_error
               cx_salv_not_found.
       ENDTRY.
     ENDIF.
   ENDMETHOD. 
 ENDCLASS.

Aufruf

 DATA: gcl_alv TYPE REF TO cl_salv_table,    " Objektreferenz für ALV Grid
       gcl_view type ref to z_test_view,     " Objektreferenz auf View Objekt 

...

   create OBJECT gcl_view. 

...

   " erzeugen des ALV Objekts
   cl_salv_table=>factory(
      IMPORTING
        r_salv_table = gcl_alv       " Referenz auf ALV Grid
       CHANGING
         t_table = gcl_model->gt_flights ).  " Tabelle mit Daten für Ausgabe 
...

   " Setzen des Filters für die Spalte CARRID
    gcl_view->set_alv_filter( 
   gcl_alv->display( ).

Ergebnis

ALV Grid ohne Filter
ALV Grid ohne gesetztem Filter
ALV mit gesetztem Filter
ALV mit gesetztem Filter