ALV Sortieren nach Spalten

Möchte man Daten in einem ALV automatisch sortieren, dann muss man mit Sortierungsregeln arbeiten. Das klingt im ersten Moment vielleicht etwas kompliziert, lässt sich im Web Dynpro allerdings recht einfach umsetzen.

In meinem kleinen Beispiel besteht der ALV Datenkontext aus mehreren Feldern mit Produktinformationen. Damit sich die User schnell zurecht finden, möchte ich die Daten nach der Produkt ID und den Produkt Texten Sortieren. Man benötigt eine Referenz auf das Tabellen Objekt um die Tabellen Felder auslesen zu können. Danach kann man die benötigen Felder in einem Loop oder einem Array Zugriff ermitteln und eine Sort Rule erzeugen.

Der Sort Rule kann man beim erzeugen einige Parameter mitgeben. Ein Blick in die Methodendefinition kann hier nicht schaden. Danach noch die Sortierposition gesetzt und man ist auch schon fertig.

METHOD sort_alv.
 DATA: obj_table TYPE REF TO cl_salv_wd_config_table.

* Get table reference
 obj_table = wd_this->wd_cpifc_cmp_selectable_alv( )->get_model( ).

* Get table fields
 DATA(lt_fields) = obj_table->if_salv_wd_field_settings~get_fields( ).

* Set or delete filter rule
 LOOP AT lt_fields ASSIGNING FIELD-SYMBOL(<wa_fields>).
   IF <wa_fields>-fieldname = 'PRODUCT_ID'.
* Set sort rule
     DATA(obj_sort_rule) = <wa_fields>-r_field->if_salv_wd_sort~create_sort_rule( group_aggregation = abap_true ).
     obj_sort_rule->set_sort_position( '1' ).
   ELSEIF <wa_fields>-fieldname = 'TXTSH'.
* Set sort rule
     DATA(obj_sort_rule) = <wa_fields>-r_field->if_salv_wd_sort~create_sort_rule( group_aggregation = abap_false ).
     obj_sort_rule->set_sort_position( '2' ).
   ENDIF.
 ENDLOOP.

 FREE: lt_fields.
 FREE: obj_table.
ENDMETHOD.

Posted on 29. April 2015 in Blog, Web Dynpro/ABAP

Back to Top