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