Seitenhistorie
...
Im Formular-Bereich SERVICE_LINE
wird dann die entsprechende Flagge angezeigt.
Wertfindung innerhalb einer Regel
Gibt es in der Regel mehrere Spalten, die alle Spaltenbedingungen erfüllen, dann ist die oberste Regel in der Liste die zutreffende Regel
und ihr Rückgabewert der Wert der Regel. Alle danach kommenden Zeilen werden nicht beachtet.
(Das ist auch in Abb. A der Fall, denn Zeile #4 erfüllt ebenfalls alle Spaltenbedingungen, Zeile #3 steht jedoch weiter oben).
Nachfolgend ist dargestellt, wie der Wert einer Regel bestimmt wird:
Abbildung B: Durchlauf Wertbestimmung der Regel
Die Regel in Abb. B hat 3 Spalten und 3 Zeilen. Jede Spalte definiert eine Bedingung, jede Zeile einen Wert pro Spalte.
Die Prüfung beginnt in Zeile 1, Spalte 1. Ist der Wert von Zeile 1 in Spalte 1 identisch zum Spaltenwert,
wird mit der Prüfung von Spalte 2 in Zeile 1 fortgefahren. Ist der Wert von Zeile 1 in Spalte 2 wieder identisch
zum Spaltenwert der 2. Spalte, wird mit der Prüfung von Spalte 3 in Zeile 1 fortgefahren.
Ist auch der Wert von Zeile 1 in Spalte 3 identisch zum Spaltenwert, trifft die gesamte Zeile zu und der Rückgabewert der Zeile
ist der Wert der Regel (grüne Pfeile). Hat eine der Spalten in Zeile 1 einen anderen Wert als die zugehörige Spaltenbedingung,
trifft also nicht auf die Bedingung zu, wird die Prüfung der Zeile abgebrochen und mit der Prüfung der nächsten Zeile fortgefahren.
Dort wird dann wieder in der 1. Spalte begonnen. Wurden alle Zeilen geprüft und keine davon erfüllt alle Spaltenbedingungen,
ist der Wert der Regel undefiniert, da kein Rückgabewert ausgewählt werden kann (rote Pfeile).
In Abb. A ist der Verlauf also folgendermaßen:
Abbildung C: Wertfindung bei Abb. A
Der Wert der Regel ist also der Rückgabewert von Zeile #3.
Um zu verhindern, dass der Wert einer Regel undefiniert (leer) ist, falls keine der Zeilen alle Bedingungen erfüllt,
können Sie unter den regulären Zeilen eine weitere Zeile einfügen, die in allen Spalten den Operator * als Wert hat,
also immer gültig ist (Der Operator * wurde oben erklärt). In dieser Zeile definieren Sie dann als Rückgabewert einen Standard-Wert.
Trifft keine der regulären Auswahlmöglichkeiten zu, wird diese Standardzeile ausgewählt und der Wert der Regel ist der Standard-Wert.
Dieses Vorgehen wurde in Abb. C durch Zeile #4 verwirklicht.
Boolsche Operatoren in Regeln
Das R-S definiert einige boolsche Operatoren, mit denen Sie Vergleiche anstellen können.
Auch wenn Sie explizit keinen Operator angeben wird ein Operator verwendet, nämlich der Operator Operator EQUAL
:
Die Bedingung ist wahr, wenn wenn Wert A = Wert B, also wenn die Spalte in der Zeile den gleichen Wert hat wie die Spalte.
Bisher sind wir in Regeln von diesem Verhalten ausgegangen: Der Wert in der Zeile muss identisch zum Wert der entsprechenden Spalte sein.
Dies ist aber nur das Standardverhalten, dass Sie durch boolsche Operatoren verändern können.
In der Praxis werden Sie oft mit Operatoren arbeiten, nämlich immer dann, wenn Werte nicht nur gleich sein sollen,
sondern in einer bestimmten Beziehung zueinander stehen sollen. Folgende Operatoren existieren im R-S:
* | != | < | > | <= | >= | [Wert1, Wert2, Wertn] | [Wert1, ..., Wert2] |
---|
ALWAYSTRUE Operator *
Den Den ALWAYSTRUE
Operator Operator * haben haben Sie bereits im obigen Abschnitt kennengelernt. Er erwartet keine zu vergleichenden Argumente und
hat immer den Wert Wert TRUE
, ist also immer wahr. Er wird oft benutzt, wenn eine Bedingung für die Zeile irrelevant ist, um einen Restbereich abzudecken,
der durch die anderen Zeilen nicht abgedeckt wurde oder um ein Alternatives Standardverhalten zu implementieren. Durch Durch * trifft trifft diese Bedingung dann immer zu.
Beispielregel A
Die Bedingung in in Beispielregel A ist ist 24.12.2013. Zeile #1 erhält das heutige Datum über die Datenstrom-Variable DS DS.TODAYS_DATE
.
Ist das heutige Datum der 24.12.2013, so ist der Wert der Regel der der STRING
"Heute ist Weihnachten!". Ist heute nicht der 24.12.2013,
trifft die Bedingung nicht zu und die Zeile ist ungültig. Zeile #2 ist immer gültig, da der Operator Operator * unabhängig unabhängig von der Bedingung immer zutrifft.
An allen anderen Tagen ist der Wert der Regel also der der STRING
"Heute ist irgendein Tag, aber nicht Weihnachten!".
In Zeile #1 wird übrigens automatisch der der EQUAL
-Operator verwendet, da ja kein Operator angegeben wird.
Die interne Darstellung ist also =${DS.TODAYS_DATE}
(der EQUAL-Operator darf aber nicht manuell angegeben werden).
NOTEQUAL Operator !=
Der Der NOTEQUAL
Operator Operator != ist ist die Verneinung des des EQUAL-
Operators. Er wird benutzt, wenn 2 Werte nicht identisch sein sollen.
Man könnte könnte Beispielregel A also also auch so implementieren:
Beispielregel B
Diesmal ist die Bedingung der Spalte Weihnachten das heutige Datum, abgefragt durch die Datenstrom-Variable DS.TODAYS_DATE
.
Hat die Spalte den Wert Wert 24.12.2013, ist heute Weihnachten und Zeile #1 trifft zu (DS.TODAYS_DATE
= 24.12.2013).
Ist heute ein anderer Tag als der 24.12.2013, ist Zeile #2 gültig: GET_TODAYS_DATE
ist ist ungleich 24.12.2013.
LESS Operator < und GREATER Operator >
Die Die LESS
< und und GREATER
> Operatoren Operatoren überprüfen, ob ein Wert kleiner oder größer ist als der gegebene Wert.
Der Der LESS
Operator Operator ist wahr, wenn der Wert kleiner ist als der gegebene Wert.
Der Der GREATER
Operator Operator ist wahr, wenn der Wert größer ist als der gegebene Wert.
Beispielregel C
Die Bedingung der Spalte ist der Preis eines Artikels, abgefragt über die Datenstrom-Variable DS.ARTICLE_PRICE
.
Ist Ist DS.ARTICLE_PRICE
größer größer als 1000 ist Zeile #1 gültig, ist ist DS.ARTICLE_PRICE
exakt exakt 1000 ist Zeile #2 gültig und
wenn wenn DS.ARTICLE_PRICE
kleiner kleiner als 1000 ist, ist Zeile #3 gültig.
EQUALLESS Operator <= und EQUALGREATER Operator >=
Die Die EQUALLESS
<= und und EQUALGREATER
>= Operatoren Operatoren sind Erweiterungen der der LESS
und und GREATER
Operatoren Operatoren.
Der Der EQUALLESS Operator ist wahr, wenn der Wert kleiner oder gleich dem gegebenen Wert ist.
Der Der EQUALGREATER
Operator ist wahr, wenn der Wert größer oder gleich dem gegebenen Wert ist.
Beispielregel C ließe ließe sich also mithilfe des des EQUALGREATER-
Operators einfach implementieren:
Beispielregel D
Wenn der Wert von von DS.ARTICLE_PRICE
größer größer oder gleich 1000 ist, trifft Zeile #1 zu, ansonsten Zeile #2.
Die Verwendung von EQUALLESS
verläuft EQUALLESS
verläuft analog.
INLIST Operator [Wert1, Wert2, Wertn]
Mit dem dem INLIST
Operator Operator [W1, W2, Wn] können Sie beliebig viele Werte angeben, die geprüft werden sollen.
Die einzelnen Werte werden durch ein Komma getrennt. Trifft einer der Werte zu, ist die Bedingung erfüllt.
Beispielregel E
Die Bedingung der Spalte ist die Herkunftsstadt des Kunden, abgefragt über die Datenstrom-Variable Variable DS.CUST_CITY
.
In jeder Zeile werden per per INLIST
-Operator 4 mögliche Werte angegeben. Trifft einer der Werte zu, ist die Zeile gültig.
Es ist auch möglich, innerhalb des des INLIST
-Operators den != Operator zu verwenden
INRANGE Operator [Wert1, ..., Wert2]
Mit dem INRANGE Operator können Sie einen Wertebereich angeben. Liegt der Wert innerhalb des Bereichs, ist die Bedingung erfüllt.
Wert1 bildet die Untergrenze des Wertebereichs, Wert2 die Obergrenze. Die Werte zählen zum Wertebereich dazu.
Beispielregel F
Wenn der Wert von DS.ARTICLE_PRICE
größer als 10.000 ist, trifft Zeile #1 zu.
Liegt der Wert zwischen 2.500 und 10.000, trifft Zeile #2 zu. Liegt der Wert zwischen 1.000 und 2.500, trifft Zeile #3 zu.
Ist der Wert kleiner als 1000, trifft Zeile #4 zu.
Einen Überblick der Operatoren finden Sie auch im im Abschnitt über EVAL-Anweisungen.
Wertfindung innerhalb einer Regel
Gibt es in der Regel mehrere Spalten, die alle Spaltenbedingungen erfüllen, dann ist die oberste Regel in der Liste die zutreffende Regel
und ihr Rückgabewert der Wert der Regel. Alle danach kommenden Zeilen werden nicht beachtet.
(Das ist auch in Abb. A der Fall, denn Zeile #4 erfüllt ebenfalls alle Spaltenbedingungen, Zeile #3 steht jedoch weiter oben).
Nachfolgend ist dargestellt, wie der Wert einer Regel bestimmt wird:
Abbildung B: Durchlauf Wertbestimmung der Regel
Die Regel in Abb. B hat 3 Spalten und 3 Zeilen. Jede Spalte definiert eine Bedingung, jede Zeile einen Wert pro Spalte.
Die Prüfung beginnt in Zeile 1, Spalte 1. Ist der Wert von Zeile 1 in Spalte 1 identisch zum Spaltenwert,
wird mit der Prüfung von Spalte 2 in Zeile 1 fortgefahren. Ist der Wert von Zeile 1 in Spalte 2 wieder identisch
zum Spaltenwert der 2. Spalte, wird mit der Prüfung von Spalte 3 in Zeile 1 fortgefahren.
Ist auch der Wert von Zeile 1 in Spalte 3 identisch zum Spaltenwert, trifft die gesamte Zeile zu und der Rückgabewert der Zeile
ist der Wert der Regel (grüne Pfeile). Hat eine der Spalten in Zeile 1 einen anderen Wert als die zugehörige Spaltenbedingung,
trifft also nicht auf die Bedingung zu, wird die Prüfung der Zeile abgebrochen und mit der Prüfung der nächsten Zeile fortgefahren.
Dort wird dann wieder in der 1. Spalte begonnen. Wurden alle Zeilen geprüft und keine davon erfüllt alle Spaltenbedingungen,
ist der Wert der Regel undefiniert, da kein Rückgabewert ausgewählt werden kann (rote Pfeile).
In Abb. A ist der Verlauf also folgendermaßen:
Abbildung C: Wertfindung bei Abb. A
Der Wert der Regel ist also der Rückgabewert von Zeile #3.
Um zu verhindern, dass der Wert einer Regel undefiniert (leer) ist, falls keine der Zeilen alle Bedingungen erfüllt,
können Sie unter den regulären Zeilen eine weitere Zeile einfügen, die in allen Spalten den Operator * als Wert hat,
also immer gültig ist (Der Operator * wurde oben erklärt). In dieser Zeile definieren Sie dann als Rückgabewert einen Standard-Wert.
Trifft keine der regulären Auswahlmöglichkeiten zu, wird diese Standardzeile ausgewählt und der Wert der Regel ist der Standard-Wert.
Dieses Vorgehen wurde in Abb. C durch Zeile #4 verwirklicht.
Section | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|