Um einen Filter in der ALV Ausgabe per Code zu setzen, gibt es zwei Möglichkeiten.
- Vorherige Definition eines Benutzerlayouts und anschließendes Setzen des Layouts im Code (siehe diesen Beitrag)
- 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( ).