
Mithilfe von Vergleichsoperationen legen Sie fest, wie das System den Vergleich zwischen einem eingehenden Wert, der als Kontextparameter an einen Ausdruck weitergegeben wurde, und einem vordefinierten Wert oder Wertebereich ausführen soll. Dieser eingehende Wert, der Testparameter, kann statt über einen Kontextparameter auch als Ergebnis eines verschachtelten Ausdrucks weitergegeben werden.
Vergleichsoperationen werden hauptsächlich verwendet, um innerhalb einer Geschäftsregel zwischen verschiedenen Verarbeitungszweigen zu unterscheiden. Beispielsweise dienen in einer Entscheidungstabelle die vordefinierten Werte in den Bedingungsspalten als Vergleichsparameter, mit dem ein eingehender Wert verglichen wird.
Alle von BRFplus unterstützten Vergleichsoperationen werden verwendet, um ein eingehendes Element-Datenobjekt (den Testparameter) mit einem vordefinierten Wert oder Wertebereich (dem Vergleichsparameter) zu vergleichen. Die formale Beschreibung einer Vergleichsoperation lautet daher:
<Testparameter> <Vergleichsoperator> <Vergleichsparameter>
Sie möchten bestimmen, ob ein eingehender Wert innerhalb eines vordefinierten Wertebereichs liegt.
Testparameter: tp = 24
Vergleichsoperator: liegt zwischen
Vergleichsparameter: vp = [18..25]
Vergleich: tp liegt zwischen vp (also: "24 liegt zwischen [18..25]")
Ergebnis: wahr
Die oben aufgeführte formale Beschreibung ist auch für Operatoren gültig, die aus Sicht des Benutzers keinen Vergleichsparameter besitzen (ist initial und ist nicht initial). Die zu dieser Gruppe gehörenden Operatoren (Gruppe 3 in der folgenden Tabelle) vergleichen den Testparameter mit einem impliziten Vergleichsparameter, den das System intern ableitet. Daher ist es nicht notwendig (und nicht möglich), selbst einen Vergleichsparameter für diese Operationsarten anzugeben.
Operatorengruppen
Ob ein bestimmter Operator verwendet werden kann oder nicht, hängt davon ab, welche Parametertypen beteiligt sind. Um die Komplexität der möglichen Kombinationen von Operatoren und Parametertypen zu verringern, können die von BRFplus bereitgestellten Vergleichsoperatoren nach erlaubten Verwendungsmöglichkeiten gruppiert zusammengefasst werden. Für jede der unten aufgeführten Gruppen kann bestimmt werden, welche Parametertypen mit den jeweiligen Operatoren aus dieser Gruppe kombiniert werden können.
In diesem Abschnitt werden alle von BRFplus unterstützten Vergleichsoperatoren beschrieben. Ob alle diese Vergleichsoperatoren verwendet werden können, hängt allerdings von der Definition des Element-Datenobjekts ab. Dieses Verhalten wird unter der Registerkarte Eigenschaften des Datenobjekts von der Einstellung Erlaubte Vergleiche gesteuert. Weitere Informationen finden Sie unter Ein Element-Datenobjekt anlegen.
Gruppe |
Beschreibung |
Operatoren |
Konstante |
ID |
|---|---|---|---|---|
1 |
Ordinalvergleiche |
ist gleich ist nicht gleich ist kleiner als ist kleiner oder gleich ist größer als ist größer oder gleich liegt zwischen liegt nicht zwischen |
GC_OPTION_EQUAL GC_OPTION_NOT_EQUAL GC_OPTION_LESS GC_OPTION_LESS_EQUAL GC_OPTION_GREATER GC_OPTION_GREATER_EQUAL GC_OPTION_BETWEEN GC_OPTION_NOT_BETWEEN |
EQ NE LT LE GT GE BT NB |
2 |
String-Vergleiche |
enthält irgendein/e/en enthält nicht irgendein(e) enthält nur enthält nicht nur enthält Zeichenfolge enthält nicht Zeichenfolge stimmt überein mit Muster stimmt nicht überein mit Muster beginnt mit Text beginnt nicht mit endet mit Text endet nicht mit |
GC_OPTION_CONTAINS_ANY GC_OPTION_CONTAINS_NOT_ANY GC_OPTION_CONTAINS_ONLY GC_OPTION_CONTAINS_NOT_ONLY GC_OPTION_CONTAINS_STRING GC_OPTION_CONTAINS_NO_STRING GC_OPTION_CONTAINS_PATTERN GC_OPTION_NOT_CONTAINS_PATTERN GC_OPTION_STARTS_WITH GC_OPTION_NOT_STARTS_WITH GC_OPTION_ENDS_WITH GC_OPTION_NOT_ENDS_WITH |
CA NA CO CN CS NS CP NP SW US EW DE |
3 |
Implizite Vergleiche |
ist initial ist nicht initial ist gültig ist ungültig |
GC_OPTION_INITIAL GC_OPTION_NOT_INITIAL GC_OPTION_VALID GC_OPTION_IS_NOT_VALID |
I1 I2 IV NV |
4 |
Besondere Vergleiche |
Währung ist gleich Währung ist unterschiedlich Einheit ist gleich Einheit ist unterschiedlich |
GC_OPTION_CURRENCY_EQUALS GC_OPTION_CURRENCY_DIFFERSGC_OPTION_UNIT_EQUALS GC_OPTION_UNIT_DIFFERS |
CE CD UE UD |
Die impliziten Vergleichsoperatoren "ist gültig" und "ist ungültig" (Gruppe 3) sind nur für die folgenden Element-Datenobjekte definiert:
Betrag
Menge
Zeitpunkt
Für den Betrag und die Menge prüft das System, ob die angegebene Währung oder Mengeneinheit in den zentralen Customizing-Tabellen des Backend-Systems verfügbar ist. Für Datenobjekte des Typs Zeitpunkt prüft das System, ob die angegebenen Datums- und Zeitwerte in ein gültiges Datum überführt werden können (beispielsweise nicht "31. April").
Die Operatoren "wird übergeben" und "wird nicht übergeben" (technische IDs S1, S2) werden nicht mehr unterstützt. Bereits vorhandene Objekte, die diese Operatoren verwenden, müssen daher angepasst werden.
Alle Operatoren werden intern durch Konstanten repräsentiert, die für die betroffenen Interfaces definiert sind (zum Beispiel IF_FDT_RANGE).
Die IDs der Operatoren aus der letzten Spalte der oberen Tabelle stellen die technischen Namen dar, die intern verwendet werden. Sie beziehen sich größtenteils auf die entsprechenden Vergleichsoperatoren, die in ABAP definiert sind. BRFplus gibt die Ausführung von Vergleichsoperationen technisch an die entsprechenden ABAP-Ausdrücke weiter. Aus diesem Grund ist das detaillierte Verarbeitungsverhalten von BRFplus-Parametern identisch mit den entsprechenden ABAP-Ausdrücken.
Datentypkombinationen für Vergleiche
Wie das System einen Vergleich durchführt, hängt vom Operator und dem Testparametertyp ab. In der folgenden Tabelle ist eine Übersicht über die verschiedenen Vergleichsansätze – zusammengefasst nach beteiligten Datentypen – aufgelistet:
Datentyp |
Anmerkungen |
|---|---|
Text |
Alphanumerischer Vergleich von Werten. Um die Komplexität zu verringern, werden Textparameter intern entsprechend der ABAP-Anweisung CONVERT TEXT in eine sortierbare Byte-Folge konvertiert. Mithilfe dieser Normalisierung wird Problemen vorgebeugt, die beim Vergleich von Zeichen verschiedener Codepages auftreten. Allerdings kann dieses Vorgehen zu unerwarteten Ergebnissen führen. |
Zahl |
Numerischer Vergleich von Werten. |
Betrag, Menge |
Wenn die Währung oder Einheit der Parameter unterschiedlich ist, werden die Parameter zunächst intern in eine der beteiligten Währungen oder Einheiten konvertiert. Anschließend wird ein numerischer Vergleich der Werte durchgeführt. |
Zeitpunkt |
Datums- und Zeitwerte werden numerisch verglichen. Wenn die zu vergleichenden Werte unterschiedliche Untertypen aufweisen, werden nur die übereinstimmenden Teile beider Werte für den Vergleich herangezogen. Wenn Sie beispielsweise einen Zeitstempel mit Datum und Uhrzeit mit einem reinen Datum (ohne Uhrzeit) vergleichen möchten, wird die Uhrzeit des Zeitstempels ignoriert und es werden lediglich die Datumsangaben miteinander verglichen. |
Boolesch |
Überprüfung auf Gleichheit |
Im Allgemeinen kann ein Vergleich vom System nur dann durchgeführt werden, wenn beide beteiligten Parameter denselben Typ aufweisen. Als Ausnahme hierzu unterstützt das System jedoch zusätzliche Vergleichsoperationen unter folgenden Bedingungen:
Ordinalvergleiche (Gruppe 1) können durchgeführt werden, wenn beide beteiligten Parameter in eine zulässige Zahl konvertierbar sind. In diesem Fall führt das System einen numerischen Vergleich durch. Andernfalls werden beide Parameter als Texte behandelt und es wird ein String-Vergleich durchgeführt.
String-Vergleiche (Gruppe 2) können mit Parametern verschiedener Typen durchgeführt werden. Hierzu wird vom System eine implizite Typkonvertierung vorgenommen, sodass beide Parameter als Texte behandelt werden können.
In den folgenden Tabellen sind die verschiedenen Kombinationsmöglichkeiten aufgelistet. Es wird hierbei entsprechend der Frage zusammengefasst, ob ein Vergleich überhaupt möglich ist (mit oder ohne eine vorherige Typkonvertierung) oder nicht. Die Tabellen beschränken sich dabei auf die Operatorgruppen 1 und 2, da bei Gruppe 3 ein Typenkonflikt per Definition unmöglich ist.
In der folgenden Tabelle sind alle Vergleichsoperationen dargestellt, die das System ohne implizite Konvertierungen durchführen kann:
Testparametertyp |
Vergleichsparametertyp |
Vergleichsoperator |
Vergleichstyp |
|---|---|---|---|
Zahl |
Zahl |
Gruppe 1 |
Numerisch |
Text |
Text |
Gruppe 1 |
Text |
Text |
Text |
Gruppe 2 |
Text |
Betrag |
Betrag |
Gruppe 1 |
Betrag |
Menge |
Menge |
Gruppe 1 |
Menge |
Zeitpunkt |
Zeitpunkt |
Gruppe 1 |
Zeitpunkt |
Boolesch |
Boolesch |
ist gleich, ist nicht gleich |
Boolesch |
In der folgenden Tabelle sind die Vergleichsoperationen aufgelistet, die das System nach der impliziten Typkonvertierung von mindestens einem der beteiligten Parameter durchführen kann:
Testparametertyp |
Vergleichsparametertyp |
Vergleichsoperator |
Vergleichstyp |
Kommentare |
|---|---|---|---|---|
Zahl |
Zahl |
Gruppe 2 |
Text |
Zahlen werden intern in Text konvertiert |
Zahl |
Text |
Gruppe 1 |
Numerisch oder Text |
1. Der Vergleichsparameter des Typs Text wird in eine Zahl konvertiert und ein numerischer Vergleich wird durchgeführt. 2. Ist dies nicht möglich, wird der Testparameter in einen Text konvertiert und es wird ein String-Vergleich durchgeführt. |
Zahl |
Text |
Gruppe 2 |
Text |
Testparameter wird in einen Text konvertiert |
Text |
Zahl |
Gruppe 1 |
Numerisch oder Text |
1. Der Testparameter des Typs Text wird in eine Zahl konvertiert und ein numerischer Vergleich wird durchgeführt. 2. Ist dies nicht möglich, wird der Vergleichsparameter in einen Text konvertiert und es wird ein String-Vergleich durchgeführt. |
Text |
Zahl |
Gruppe 2 |
Text |
Vergleichsparameter wird in einen Text konvertiert |
Betrag |
Zahl |
Gruppe 2 |
Text |
Beide Parameter werden in Texte konvertiert |
Betrag |
Text |
Gruppe 2, Gruppe 4 |
Text |
Testparameter wird in einen Text konvertiert |
Menge |
Zahl |
Gruppe 2 |
Text |
Beide Parameter werden in Texte konvertiert |
Menge |
Text |
Gruppe 2, Gruppe 4 |
Text |
Testparameter wird in einen Text konvertiert |
Zeitpunkt |
Zahl |
Gruppe 2 |
Text |
Beide Parameter werden in Texte konvertiert |
Zeitpunkt |
Text |
Gruppe 2 |
Text |
Testparameter wird in einen Text konvertiert |
In der folgenden Tabelle sind alle Vergleichsoperationen dargestellt, die das System nicht durchführen kann:
Testparametertyp |
Vergleichsparametertyp |
Vergleichsoperator |
|---|---|---|
Zahl |
Betrag |
Gruppe 1, Gruppe 2 |
Zahl |
Menge |
Gruppe 1, Gruppe 2 |
Zahl |
Zeitpunkt |
Gruppe 1, Gruppe 2 |
Zahl |
Boolesch |
Gruppe 1, Gruppe 2 |
Text |
Betrag |
Gruppe 1, Gruppe 2 |
Text |
Menge |
Gruppe 1, Gruppe 2 |
Text |
Zeitpunkt |
Gruppe 1, Gruppe 2 |
Text |
Boolesch |
Gruppe 1, Gruppe 2 |
Betrag |
Betrag |
Gruppe 2 |
Betrag |
Zahl |
Gruppe 1 |
Betrag |
Text |
Gruppe 1 |
Betrag |
Menge |
Gruppe 1, Gruppe 2 |
Betrag |
Zeitpunkt |
Gruppe 1, Gruppe 2 |
Betrag |
Boolesch |
Gruppe 1, Gruppe 2 |
Menge |
Menge |
Gruppe 2 |
Menge |
Zahl |
Gruppe 1 |
Menge |
Text |
Gruppe 1 |
Menge |
Betrag |
Gruppe 1, Gruppe 2 |
Menge |
Zeitpunkt |
Gruppe 1, Gruppe 2 |
Menge |
Boolesch |
Gruppe 1, Gruppe 2 |
Zeitpunkt |
Zeitpunkt |
Gruppe 2 |
Zeitpunkt |
Zahl |
Gruppe 1 |
Zeitpunkt |
Text |
Gruppe 1 |
Zeitpunkt |
Betrag |
Gruppe 1, Gruppe 2 |
Zeitpunkt |
Menge |
Gruppe 1, Gruppe 2 |
Zeitpunkt |
Boolesch |
Gruppe 1, Gruppe 2 |
Boolesch |
Zahl |
Gruppe 1, Gruppe 2 |
Boolesch |
Text |
Gruppe 1, Gruppe 2 |
Boolesch |
Betrag |
Gruppe 1, Gruppe 2 |
Boolesch |
Menge |
Gruppe 1, Gruppe 2 |
Boolesch |
Zeitpunkt |
Gruppe 1, Gruppe 2 |
Boolesch |
Boolesch |
Gruppe 1 (ist gleich und ist nicht gleich sind jedoch erlaubt), Gruppe 2 |
Weitere Informationen zu ausgewählten Vergleichsoperatoren
In der folgenden Tabelle sind einige zusätzliche Informationen zur genauen Funktionsweise von Vergleichsoperatoren aufgelistet. Es werden jedoch lediglich die Operatoren erwähnt, deren Verhalten nicht selbsterklärend ist.
Zusätzlich zu den detaillierten Informationen in der Tabelle gelten folgende Regeln:
Bei String-Vergleichen wird die Groß- und Kleinschreibung von der jeweiligen Einstellung des Wertebereich-Ausdrucks gesteuert, der als Vergleichsparameter verwendet wird.
Im Gegensatz dazu werden Mustervergleiche unabhängig von Groß- und Kleinschreibung durchgeführt.
Bei String-Vergleichen werden vorangehende und angehängte Leerstellen vor der Durchführung des Vergleichs vom Testparameter entfernt. Leerstellen innerhalb der Zeichenkette werden jedoch beibehalten.
Bei Ordinalvergleichen von Zeichenketten (beispielsweise ist kleiner als) wird die Groß- und Kleinschreibung nicht berücksichtigt. So wird der Vergleich 'a' ist kleiner als 'B' als wahr bewertet, obwohl 'a' im ASCII-Code einen höheren Wert als 'B' hat.
Im Gegensatz dazu werden Gleichheitsprüfungen (ist gleich) von Textparametern wie String-Vergleiche durchgeführt. Dies bedeutet, dass das System während der Auswertung die Einstellung der Groß- und Kleinschreibung berücksichtigt.
Vergleichsoperator |
Kommentar |
|---|---|
liegt zwischen |
Gibt wahr zurück, wenn der Testparameterwert zwischen dem Mindest- und Maximalwert eines Wertebereichs liegt, einschließlich des Mindest- und Maximalwerts (also value >= low AND value <= high). |
enthält irgendein/e/en |
Gibt wahr zurück, wenn der Testparameter mindestens ein Zeichen enthält, das auch im Vergleichsparameter enthalten ist. Die Folge sowie die Häufigkeit des Vorkommens der entsprechenden Zeichen kann jedoch unterschiedlich sein. |
enthält nur |
Gibt wahr zurück, wenn der Testparameter ausschließlich Zeichen enthält, die auch im Vergleichsparameter enthalten sind. Die Folge sowie die Häufigkeit des Vorkommens der entsprechenden Zeichen kann jedoch unterschiedlich sein. |
enthält Zeichenfolge |
Gibt wahr zurück, wenn die Zeichenfolge aus dem Vergleichsparameter auch im Testparameter enthalten ist. Dabei muss die Reihenfolge der Zeichen in beiden Parametern identisch sein. |
ist gleich |
Gibt wahr zurück, wenn der Wert des Testparameters identisch mit dem Wert des Vergleichsparameters ist. |
stimmt überein mit Muster beginnt mit Text endet mit Text |
Gibt wahr zurück, wenn der eingegebene Testparameter mit dem Muster aus dem Vergleichsparameter übereinstimmt. Folgende Platzhalterzeichen werden unterstützt:
Beispiel
Platzhalter = '*': Testparameter: tp = 'Hallo' Vergleichsparameter: vp = 'Ha*o' Vergleich: tp stimmt überein mit Muster vp Ergebnis: wahr Platzhalter = '+': Testparameter: tp = 'Held' Vergleichsparameter: vp = 'He+d' Vergleich: tp stimmt überein mit Muster vp Ergebnis: wahr |