Filter und Sortierung in einem ALV entfernen

Befüllt man einen an ein ALV gebundenen Kontextknoten erneut mit Daten, dann werden diese nach dem Roundtrip in der Tabelle aktualisiert angezeigt. Auf bestehende Filter oder Sortierungen im ALV hat dieser Vorgang allerdings keinen Einfluss. Diese kleine Beispiel soll zeigen wie man vorhandene Filter und Sortierungen eines ALV`s programmtechnisch recht einfach entfernen kann.

Im Component Controller meines Web Dynpros habe ich die Methode RESET_ALV angelegt. Zuerst wird die UI Info und danach die Felder des ALV ListViewers gelesen. Danach werden in zwei kleinen Loops die Filter und die Sortierung der Felder entfernt. Natürlich nur dann, wenn aktuell im ALV auch die jeweiligen Funktionen genutzt werden.

Um das ganze etwas runder zu machen, kann man die jeweiligen Felder vorab auf die jeweilige Funktion prüfen. Wo kein Filter aktiv war, muss ich auch keinen Filter löschen. Für die grundlegende Funktionsweise habe ich hier darauf allerdings verzichtet. Da das Beispiel auf einem 7.40er System erstellt wurde, kann es natürlich je nach Release Stand Probleme bei der funktionalen Schreibweise geben. In diesem Fall dann einfach die verschachtelten Methodenaufrufe in einzelnen Schritte aufteilen.

Und das war es dann auch schon wieder. Das ALV sollte nun ohne Filter und Sortierung die neuen Daten anzeigen.

METHOD reset_alv.
  DATA: wa_ui_info TYPE if_salv_wd_table=>s_type_param_get_ui_info.
  DATA: lt_fields TYPE salv_wd_t_field_ref.

  FIELD-SYMBOLS: <wa_fields> TYPE salv_wd_s_field_ref.

* Get table ui info
  wa_ui_info = wd_this->wd_cpifc_cmp_result_alv( )->get_ui_info( ).

* Get table fields
  lt_fields = wd_this->wd_cpifc_cmp_result_alv( )->get_model( )->if_salv_wd_field_settings~get_fields( ).

* Refresh filter
  IF wa_ui_info-s_service_info-is_filtered = abap_true.
    LOOP AT lt_fields ASSIGNING <wa_fields>.
* Delete filter
      <wa_fields>-r_field->if_salv_wd_filter~delete_filter_rules( ).
    ENDLOOP.
  ENDIF.

* Refresh sorting
  IF wa_ui_info-s_service_info-is_sorted = abap_true.
    LOOP AT lt_fields ASSIGNING <wa_fields>.
* Delete sorting
      <wa_fields>-r_field->if_salv_wd_sort~delete_sort_rule( ).
    ENDLOOP.
  ENDIF.
ENDMETHOD.

Posted on 21. März 2015 in Blog, Web Dynpro/ABAP

Share the Story

Back to Top