Konstruktorausdruck FILTER: Tabellen filtern im neuen ABAP
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Siehe Neues ABAP (ab Release 7.40).
Siehe Kategorie: Konstruktorausdruck.
Neu ab ABAP 7.40 ist der Konstruktorausdruck FILTER. Es dient der Filterung/Reduzierung von internen Tabellen.
Interessant ist hier der Artikel https://www.saplearners.com/filter-operator-for-internal-tables-in-abap-7-4/ zu lesen.
Einfache Filterfunktion einer internen Tabelle
- Mit einem Befehl kann man die interne Ziel-Tabelle deklarieren und von einer anderen internen Tabelle einen Teil in die Zieltabelle auslesen.
- Hier werden alle Flugverbindungen von der Fluggesellschaft British Airways (BA) aus der internen Tabelle aller Flugverbindungen LT_FLIGHTS extrahiert.
- Der Filter-Befehl funktionierte bei meinen Tests nur für Sorted-Tabellen und Hash-Tabellen.
DATA: lt_sflight TYPE SORTED TABLE OF sflight WITH UNIQUE KEY carrid connid fldate. SELECT * FROM sflight INTO TABLE lt_sflight.
- Der Filterbefehl ist etwas empfindlich bezüglich der Typkompatibilität. Folgendes Coding führt zu einem Syntaxfehler, da das Feld SFLIGHT mit CHAR3 typisiert ist.
DATA(lt_ba) = FILTER tty_sflight( lt_sflight WHERE carrid = 'BA' ).
- Es muss hier noch eine Typkonvertierung stattfinden mit CONV.
DATA(lt_ba) = FILTER tty_sflight( lt_sflight WHERE carrid = CONV #( 'BA' ) ).
Beispiel Bildung Differenz von Lieferungen
- Hier wird eine Differenzmenge gebildet zwischen den internen Tabellen LT_ENTERED_DELIVERIES und LT_SUITABLE_DELIVERIES, die über das Feld VBELN gematcht werden. Die Differenz wird in die interne tabelle LT_WRONG_DELIVERIES reingeschrieben. In diesem Fall ist die Tabelle LT_WRONG_DELIVERIES bereits deklariert.
lt_wrong_deliveries = FILTER #( lt_entered_deliveries EXCEPT IN lt_suitable_deliveries WHERE vbeln = vbeln ).
- Bei gleichzeitiger Nutzung der Inlinedeklaration von LT_WRONG_DELIVERIES könnte das Coding so aussehen
Data(lt_wrong_deliveries) = FILTER ty_deliveries( lt_entered_deliveries EXCEPT IN lt_suitable_deliveries WHERE vbeln = vbeln ).
Differenz von 2 Tabellen (mit Einschluß und Ausschluß)
- Ein schönes Beispiel ist aus dem Buch von ABAP Objects: Das neue umfassende Handbuch zu Konzepten, Sprachelementen und Werkzeugen in ABAP OO, Felix Roth, 2016.
- Von einer internen Tabelle LT_SFLIGHT wird eine Ausschnittsmenge in die interne TAbelle LT_LUFTHANSA geschrieben.
- Im zweiten Beispiel werden alle Datensätze in die interne Tabelle LT_NOT_LUFTHANSA geschrieben, wo es keine Schmittmenge zwischen LT_SFLIGHT und LT_LUFTHANSA gibt. Diese Negation wird mit dem Zusatz EXCEPT IN ausgedrückt.
SELECT * FROM sflight INTO TABLE lt_sflight. DATA(lt_lufthansa) = FILTER tty_sflight( lt_sflight WHERE carrid = 'LH' ). DATA(lt_not_lufthansa) = FILTER tty_sflight( lt_sflight EXCEPT IN lt_lufthansa WHERE carrid = carrid ).
Web-Links
Literatur
- ABAP Objects: Das neue umfassende Handbuch zu Konzepten, Sprachelementen und Werkzeugen in ABAP OO, Felix Roth, 2016, S. 276 f.