Sie zeigen eine alte Version dieser Seite an. Zeigen Sie die aktuelle Version an.

Unterschiede anzeigen Seitenhistorie anzeigen

« Vorherige Version anzeigen Version 28 Nächste Version anzeigen »

Definition

Regeln sind Kontrollstrukturen, die abhängig von Bedingungen unterschiedliche Werte annehmen können.

Eine Regel enthält also eine oder mehrere Bedingungen und eine oder mehrere Auswahlmöglichkeiten.

Die Auswahlmöglichkeit, die alle Bedingungen erfüllt, liefert den Wert der Regel.

 

Dazu gibt es in einer Regel Spalten und Zeilen:

Die Spalten sind die Bedingungen der Regel. Jede Spalte enthält einen Wert, die Bedingung dieser Spalte.

Die Zeilen sind die alternativen Auswahlmöglichkeiten für die Regel. Jede Zeile gibt pro Spalte einen Wert an.

Die Zeile, in der in jeder Spalte der Zeilenwert identisch zum entsprechenden Spaltenwert ist,

ist die gültige Auswahl für die Regel und ihr Rückgabewert der Wert der Regel. Dieser kann einen beliebigen Datentyp haben.

Eine Regel kann auch eine EVAL-Anweisung / einen Verweis auf eine Ressource zurückgeben.

 

Aufbau einer Regel


Abbildung A: Aufbau einer Regel

 

In Abb. A sehen Sie den Aufbau einer Regel mit Spalten (Abb. A (1)) und Zeilen (Abb. A (2)).

Eine Spalte definiert genau einen Wert. In Abb. A sind das:

SpaltennameErstzulassungModellPreisWill_VerkaufenPS
Wert (Bedingung)01.01.2013RS575.500TRUE450

 

Diese Spaltenwerte sind die Bedingungen der Regel, auf die die Zeilen in den entsprechenden Spalten geprüft werden.

Der Wert einer Spalte kann einen der folgenden Datentypen haben (die in Abb. A alle verwendet wurden):

DATESTRINGREALBOOLEAN

NUMBER

 

In Abb. A ist Zeile #3 die gültige Auswahl für die Regel, da alle Werte in der Zeile identisch zum jeweiligen Spaltenwert sind.

Die Regel hat also den Wert "${Angebot_3}Abb. A (3)Wird die Regel aufgerufen, so ist das Ergebnis:

${NameDerRegel}     // = ${Angebot_3}

 

Mit ${Angebot_3} wird eine gleichnamige Ressource eingebunden, in diesem Fall z.B. eine binäre Ressource,

die das entsprechende Angebot enthält. Die Verwendung dynamischer Anweisungen wird am Ende des Artikels vorgestellt.

 

Der Operator * ist immer wahr. Enthält eine Zeile also in einer Spalte den Wert '*', so erfüllt die Zeile die Bedingung dieser Spalte immer,

unabhängig von der Spaltenbedingung. Mehr dazu im nächsten Abschnitt.

 

EVAL-Anweisungen und dynamische Einbindung innerhalb einer Regel


Im oberen Abschnitt wurden in der Regel, abgesehen von den Rückgabewerten, nur statische Werte verwendet.

In der Praxis werden Sie in Regeln jedoch fast immer auch dynamische Werte in Spalten und Zeilen verwenden, denn in einer Regel,

in der alle Werte schon statisch feststehen, steht auch der Wert der Regel schon fest - Man könnte den Wert auch einfach einer Variablen zuweisen.

Der Zweck von Regeln besteht aber darin, eine Möglichkeit zu schaffen, für unterschiedliche Eingangswerte ein unterschiedliches Verhalten zu implementieren.


Abb. D: Typische Anwendung einer Regel

 

Typischerweise werden in einer Regel Datenstrom-Variablen verarbeitet, z.B. um dynamisch eine Ressource anzuwählen:

 

Beispiel:

Je nach Nationalität des Kunden soll dessen Nationalflagge angezeigt werden. Die Nationalität des Kunden wird durch die Datenstrom-Variable

DS.NATIONALITY geliefert - Bei jedem Kunden individuell. Um abhängig von DS.NATIONALITY die richtige Ressource auszusuchen, benötigt man eine Regel.

Diese liefert, je nach Wert von DS.NATIONALITY, die richtige Ressource zurück. Ruft man die Regel auf, erhält man automatisch die richtige Ressource.

 

Mögliche Werte von DS.NATIONALITY:

WertGERCHAUT
Kunde kommt ausDeutschlandSchweizÖsterreich

 

Binäre Ressourcen, die die Flaggen enthalten:

Name der Ressourceger_flagch_flagaut_flag
InhaltFlagge DeutschlandFlagge SchweizFlagge Österreich

 

Dazugehörige Regel:


Abbildung E: Regel zur Auswahl der Nationalflagge


In Abb. E wird der Spaltenwert durch die dynamische Einbindung der Datenstrom-Variablen DS.NATIONALITY gebildet.

Die obige Tabelle zeigt uns, dass die Datenstrom-Variable 3 Werte annehmen kann. Diese finden sich als Zeilen in der Regel wieder.

Je nach aktuellem Wert von DS.NATIONALITY wird dann die dazu passende Ressource mit der passenden Flagge zurückgegeben.

Hat die Datenstrom-Variable beispielsweise den Wert CH, trifft die 2. Spalte auf die Bedingung zu und der Wert der Regel ist ${ch_flag},

also die Binäre Ressource ch_flag mit der Schweizer Flagge. Die Regel kann z.B. durch eine Erweiterung in das Dokument eingebunden werden:

 

 

Im Formular-Bereich SERVICE_LINE wird dann die entsprechende Flagge angezeigt.

 

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 EQUAL:

Die Bedingung ist wahr, 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 ALWAYSTRUE Operator * haben Sie bereits im obigen Abschnitt kennengelernt. Er erwartet keine zu vergleichenden Argumente und

hat immer den Wert TRUEist 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 * trifft diese Bedingung dann immer zu.



Beispielregel A

 

Die Bedingung in Beispielregel A ist 24.12.2013. Zeile #1 erhält das heutige Datum über die Datenstrom-Variable DS.TODAYS_DATE.

Ist das heutige Datum der 24.12.2013, so ist der Wert der Regel 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 * unabhängig von der Bedingung immer zutrifft.

An allen anderen Tagen ist der Wert der Regel also der STRING "Heute ist irgendein Tag, aber nicht Weihnachten!".

In Zeile #1 wird übrigens automatisch 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 NOTEQUAL Operator != ist die Verneinung des EQUAL-Operators. Er wird benutzt, wenn 2 Werte nicht identisch sein sollen.

Man könnte Beispielregel A 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 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 ungleich 24.12.2013.


LESS Operator < und GREATER Operator >

 

Die LESS < und GREATER > Operatoren überprüfen, ob ein Wert kleiner oder größer ist als der gegebene Wert.

Der LESS Operator ist wahr, wenn der Wert kleiner ist als der gegebene Wert.

Der GREATER 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 DS.ARTICLE_PRICE größer als 1000 ist Zeile #1 gültig, ist DS.ARTICLE_PRICE exakt 1000 ist Zeile #2 gültig und

wenn DS.ARTICLE_PRICE kleiner als 1000 ist, ist Zeile #3 gültig.

 

EQUALLESS Operator <= und EQUALGREATER Operator >=

 

Die EQUALLESS <= und EQUALGREATER >= Operatoren sind Erweiterungen der LESS und GREATER Operatoren.

Der EQUALLESS Operator ist wahr, wenn der Wert kleiner oder gleich dem gegebenen Wert ist.

Der EQUALGREATER Operator ist wahr, wenn der Wert größer oder gleich dem gegebenen Wert ist.

Beispielregel C ließe sich also mithilfe des EQUALGREATER-Operators einfach implementieren:

 


Beispielregel D

 

Wenn der Wert von DS.ARTICLE_PRICE größer oder gleich 1000 ist, trifft Zeile #1 zu, ansonsten Zeile #2.

Die Verwendung von EQUALLESS verläuft analog.

 

INLIST Operator [Wert1, Wert2, Wertn]

 

Mit dem INLIST 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 DS.CUST_CITY.

In jeder Zeile werden 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 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 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.

 

 Um mit den physikalischen Beilegern fortzufahren, klicken Sie bitte hier.

 

  • Keine Stichwörter