Show TOC Anfang des Inhaltsbereichs

Hintergrunddokumentation Filterbedingung  Dokument im Navigationsbaum lokalisieren

Die Filterbedingung ist ein logischer Ausdruck, der die Attribute einer persistenten Klasse mit freien Parametern bzw. Werten vergleicht. Die Syntax einer Filterbedingung ist an die Syntax der WHERE-Bedingung von Open SQL angelehnt, wobei zusätzlich auch Referenzvariablen für Objektreferenztypen unterstützt werden. Wie eine WHERE-Bedingung ist eine Filterbedingung aus elementaren Vergleichen aufgebaut, die mit den logischen Operatoren AND, OR und NOT zu verknüpft werden können, wobei eine Klammerung mit runden Klammern unterstützt wird.

Bei Ausführung einer Query über einen Klassenakteur, ist diese an genau dessen persistente Klasse gebunden. Die in einer Filterbedingung angegebenen Attribute müssen in der persistenten Klasse als öffentliche persistente Attribute vorhanden sein, sonst kommt es zu einer Ausnahme. Auf der anderen Seite kann eine einmal erzeugte Query durchaus nacheinander von Klassenakteuren verschiedener persistenter Klassen ausgeführt werden, solange die angegebenen Attribute vorhanden sind. Intern wird bei Ausführung einer Query eine SELECT-Anweisung mit einer WHERE-Bedingung erzeugt, in der die Attribute durch konkrete Spaltenbezeichner und die freien Parameter durch aktuelle Werte ersetzt werden.

In einer Filterbedingung werden nachstehende elementare Vergleichsoperatoren unterstützt. Als erster Operand einer Bedingung muss ein Attribut attr einer persistenten Klasse angegeben sein. Der zweite Operand operand oder pattern eines Vergleichs kann entweder ein Attribut, ein Parameter par oder ein literaler Wert sein.

Die Namen von Parametern sind über die Angabe einer Parameterliste frei definierbar. Die Parameterliste ist eine Liste von Parameternamen, die in der Filterbedingung verwendet werden können. Die Position des Parameters in der Parameterliste definiert den Index des Parameters in der Parametertabelle. Ist keine Parameterliste angeben, wird eine vordefinierte Parameterliste mit den drei Parameternamen PAR1 PAR2 PAR3 verwendet.

Literale Werte werden generell durch Hochkommata eingeschlossen. Die Semantik der Vergleichsoperatoren wird durch das entsprechende Open-SQL-Sprachelement definiert, in das der logische Ausdruck umgesetzt wird (siehe ABAP-Schlüsselwortdokumentation).

Hinweis

Die Filterbedingung und ihre Parameterliste werden bei Ausführung einer Query analysiert und dabei in eine interne Darstellung transformiert. Um das Parsen bei jeder Ausführung zu umgehen, können mit den Methoden des Interfaces IF_OS_QUERY_EXPR_FACTORY mehrfach verwendbare Filterbedingungen in der internen Darstellung erzeugt werden.

Vergleichsoperatoren =, <>, <, <=, >, >=

attr op { operand }

LIKE

attr [NOT] LIKE { pattern } [ESCAPE escape]

IS NULL

attr IS [NOT] NULL

EQUALSREF

attr EQUALSREF par  

Vergleich zweier Objektreferenzen. Der Parameter par muss bei Ausführung der Query an eine Referenzvariable gebunden sein, die auf eine persistente Instanz einer persistenten Klasse verweist.

Die Semantik der logischen Operatoren AND, OR und NOT wird ebenfalls durch ihre Semantik in Open SQL definiert. Es kann eine explizite Klammerung vorgenommen werden. Falls keine Klammern angegeben wird, gelten Prioritätsregeln von Open SQL.

NOT

NOT expr

AND

expr AND expr

OR

expr OR expr

 

Beispiele

price < '100' AND currency = 'EUR'

name LIKE PAR1 AND age > '45' AND age < '65'

( department EQUALSREF DEP1 OR department EQUALSREF DEP2 )
  AND NOT ( salary > '50000' AND currency = 'EUR' ) )

 

Ende des Inhaltsbereichs