Show TOC

 Operatoren, Kommandos und Funktionen

Die im THEN-Teil einer Regel möglichen Zuweisungen haben immer eine der folgenden Formen:

<Zu modifizierender Fakt>

<Operator>

<Ausdruck>

<Kommando>

<Ausdruck>

Operatoren

Operator

Auswirkung

Beispiel

:=

Dieser Operator bewirkt eine einfache Zuweisung.

X := ["1", "2"] ergibt ["1", "2"]

+=

Dieser Operator interpretiert den Fakt der linken Seite als Menge und fügt zu dieser Menge den Fakt der rechten Seite hinzu, falls ein gleiches Element nicht bereits vorhanden ist. Die Gleichheit wird dabei ohne Beachtung von Groß- und Kleinschreibung geprüft, d.h., die Texte "AA", "Aa", "aA" und "aa" gelten als gleich.

X += "3" ergibt ["1" , "2", "3"]

-=

Dieser Operator interpretiert den Fakt der linken Seite als Menge und entfernt aus dieser Menge den Fakt der rechten Seite. Die Gleichheit wird dabei ohne Beachtung von Groß- und Kleinschreibung geprüft, d.h., die Texte "AA", "Aa", "aA" und "aa" gelten als gleich.

X -= "1" ergibt ["2" , "3"]

Folgende Operatoren können Sie in Ausdrückenim IF- und THEN-Teil einer Regel verwenden:

Operator

Auswirkung

Beispiel

AND, OR, NOT

Sie können die Boolschen Operatoren AND (logisches UND), OR (logisches ODER) und NOT (logisches NICHT) wie gewohnt in Ausdrücken benutzen. Werden Teilausdrücke durch mehrere Boolsche Operatoren verknüpft, hat AND Vorrang vor OR, d.h., A<4 OR B<2 AND C<2 ist gleichbedeutend mit A<4 OR (B<2 AND C<4).

A < 5 AND B > 6 ergibt WAHR, wenn A kleiner als 5 und B größer als 6 ist.

A < 5 OR B > 6 ergibt WAHR, wenn A kleiner als 5 oder B größer als 6 ist.

NOT (A = 5) ergibt WAHR, wenn A nicht gleich 5 ist.

( )

Sie können Ausdrücke beliebig klammern, um die Reihenfolge der Auswertung zu bestimmen.

(1 + 2) * 3 ergibt 9

[ ]

Mengen werden in eckigen Klammern angegeben. Die einzelnen Elemente sind dabei durch Kommata getrennt. Die Elemente dürfen beliebige Ausdrücke sein.

X := [1+2,3+4,5] ergibt [3, 7, 5]

+, -, *, /

Sie können die vier Grundrechenarten wie gewohnt verwenden.

Bei der Anwendung auf Bereiche werden untere und obere Grenze berücksichtigt.

{1 to 5} + 3 ergibt {4 to 8}

^

Dieser Operator wird zur Exponent-Berechnung benutzt.

4^3 ergibt 64

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

Sie können die einfachen Vergleichsoperatoren zum Größenvergleich von Zahlen nutzen.

Die Operatoren=und<>prüfen zudem die Übereinstimmung von Textwerten. Dabei werden Unterschiede durch Groß- und Kleinschreibung nicht berücksichtigt.

Bei der Anwendung auf Bereiche müssen Aussagen auf beide Grenzen zutreffen, um wahr zu sein.

1 < 3 ergibt WAHR

3 <= 3 ergibt WAHR

3 <> 3 ergibt FALSCH

„ABC“ = „abc“ ergibt WAHR

{1 to 5} < 8 ergibt WAHR

{1 to 5} < 3 ergibt FALSCH

[<], [>], [<=], [>=]

Diese Operatoren vergleichen Mengen. Sie können als Obermengen- und Untermengen-Test verstanden werden.

["1" , "2" , "3"] [>] ["1" , "2" , "3"] ergibt FALSCH

["1" , "2" , "3"] [>=] ["1" , "2" , "3"] ergibt WAHR

["1" , "2" , "3"] [>] ["4"] ergibt FALSCH

[\]

Dieser Operator bildet die Differenz zweier Mengen.

["1" , "2" , "3"] [\] ["2"] ergibt ["1" , "3"]

["1" , "2" , "3"] [\] ["2" , "4"] ergibt ["1" , "3"]

["1" , "2" , "3"] [\] ["4" , "5"] ergibt ["1" , "2", "3"]

[&]

Dieser Operator bildet die Vereinigungsmenge.

["1" , "2"] [&] ["3"] ergibt ["1" , "2", "3"]

["1" , "2" ] [&] ["2" , "3"] ergibt ["1" , "2" , "3"]

[^]

Dieser Operator bildet die Schnittmenge. Dabei wird die Reihenfolge der Elemente des ersten Operanden beibehalten.

["1" , "2" , "3"] [^] ["2" , "3"] ergibt ["2" , "3"]

["1" , "2" , "3"] [^] ["3" , "4"] ergibt ["3"]

| |

Mit diesem Operator können Sie die Kardinalität, also die Anzahl der Elemente einer Menge, bestimmen.

| [ "1" , "2" , "3"] | ergibt 3

| [ ] | ergibt 0

IN

Dieser Operator vergleicht, ob ein Bereich innerhalb eines anderen Bereiches liegt.

{1 to 5} IN {1 to 8} ergibt WAHR

{1 to 5} IN {3 to 8} ergibt FALSCH

Kommandos

Für den Fall, daß eine Regel eine Fehlerprüfung der Eingabedaten vornehmen und im Fehlerfall eine entsprechende Meldung an das SAP-System geben sowie ggf. die weitere Regelanwendung abbrechen soll, stehen Ihnen folgende Kommandos der Fehlerbehandlung zur Verfügung:

Kommando

Auswirkung

ERROR("Nachrichtennummer","<Meldungstext>"[,Parameter,...])

Durch dieses Kommando wird ein Meldungstext an das aufrufende SAP-System übermittelt. In der bis zu 24-stelligen Nachrichtennummer wird eine EH&S-Nachrichtennummer definiert. Der erste Buchstabe ist dabei ein I, E oder W (Information, Error, Warning), dann folgen bis zu 20 Zeichen für die Nachrichtenklasse. Die letzten drei Ziffern geben die Nachrichtennummer an. Der angegebene Meldungstext wird ausgegeben, wenn im SAP-System kein Text angegeben wurde. Danach können Sie noch optional maximal drei Parameter angeben, die in den Meldungstext anstelle von &-Platzhalten eingefügt werden.

ABORT

Dieses Kommando bricht die weitere Verarbeitung des Regelwerks ab.

STOP

Dieses Kommando bricht wie das Kommando ABORT die weitere Verarbeitung des Regelwerks ab, die bis dahin generierten Daten gelten jedoch als erfolgreich generiert und werden ggf. in die Spezifikationsdatenbank geschrieben.

CALL

Dieses Kommando ruft ein Unterregelwerk auf.

Des weiteren stehen Ihnen einige Kommandos zur Verfügung, durch die Sie die Strategie der Regelausführung beeinflussen können (siehe Ablaufkontrolle der Regelausführung ).

Durch das KommandoCOMMITwird eine neue Instanz des Records angelegt und ist für normale Regelzugriffe vorhanden (siehe Record ).

Funktionen

Funktion

Auswirkung

Beispiel

TRUE()

Diese Funktion liefert immer WAHR.

FALSE()

Diese Funktion liefert immer FALSCH

ISNULL(Ausdruck)

Diese Funktion testet, ob der Ausdruck den Wert NULL, d.h. keinen Wert hat.

ISNULL(<Fakt>) ergibt WAHR, wenn der Fakt keinen Wert hat.

NULL()

Diese Funktion gibt einen leeren Wert zurück. Damit können Sie einem Fakt explizit den Wert NULL zuweisen.

<Fakt> := NULL() weist dem Fakt den Wert NULL zu, d.h., der Fakt hat keinen Wert.

Die folgenden Funktionen liefern immer einen Wert zurück und können somit überall in Ausdrücken verwendet werden. Der Typ des zurückgelieferten Wertes (Text, numerischer Wert oder Wertemenge) ergibt sich aus der jeweiligen Funktion.

Funktion

Auswirkung

Beispiel

LENGTH("<Text>")

Diese Funktion bestimmt die Länge des Textes.

LENGTH("SAP”) ergibt 3

CONCAT("<Text1>", "<Text2>", ...)

Diese Funktion fügt alle angegebenen Textwerte zusammen und liefert den Gesamttext.

Ist ein Parameter eine Menge, dann werden auch die Elemente der Menge als Einzeltextwerte zusammengefügt.

CONCAT("Wall", "dorf") ergibt "Walldorf"

CONCAT(["Heidel", "berg"]) ergibt "Heidelberg"

INSTR(<Startposition>, "<Quelltext>", "<Suchtext>")

Diese Funktion sucht den Suchtext im Quelltext. Sie beginnt an der angegebenen Startposition (Textanfang = 1) und liefert die Position relativ zur Startposition. Wenn der Suchtext nicht gefunden wird, liefert die Funktion den Wert 0.

INSTR(1, "ABCDEF", "EF") ergibt 5

INSTR(3, "ABCDEF", "EF") ergibt 3

SUBSTR("<Quelltext>", <Startposition> [, <Länge>])

Diese Funktion liefert einen Textausschnitt aus dem Quelltext, wobei sie an der Startposition (Textanfang = 1) beginnt und der Textausschnitt die angegebene Länge hat (maximal bis Textende). Wenn Sie keine Länge angeben, liefert die Funktion den Rest des Quelltextes ab der Startposition.

SUBSTR("Walldorf”, 1, 4) ergibt "Wall”

SUBSTR("Walldorf”, 5) ergibt "dorf”

STRFIELD("<Quelltext>", "<Trennzeichen>", <Index>)

Diese Funktion liefert einen Textteil aus dem durch das angegebene Trennzeichen getrennten Quelltext. Ausgegeben wird der Textteil mit dem angegebenen Index (Erster Texteil = 1).

STRFIELD("AAA,BBB,CCC", ",", 1) ergibt "AAA"

STRFIELD("AAA,BBB,CCC", ",", 3) ergibt "CCC"

STRFIELDCOUNT("<Quelltext>", "<Trennzeichen>")

Diese Funktion liefert die Anzahl der Textteile, die im Quelltext durch das Trennzeichen getrennt sind.

STRFIELDCOUNT("AAA,BBB,CCC", ",") ergibt 3

STRTOLIST( "<Quelltext>“, "<Trennzeichen>“)

Diese Funktion liefert eine Wertemenge der Textteile, die im Originalstrings durch das gegebene Trennzeichen getrennt sind.

STRTOLIST( "A,B,C“, "/“) ergibt [ "A“/ "B“/ "C“]

LISTTOSTR( "<Wertemenge>“, "<Trennzeichen>“)

Diese Funktion liefert einen Text, in dem die Einzelelemente der Wertemenge zusammengefügt wurden, wobei jeweils das Trennzeichen dazwischengesetzt ist.

LISTTOSTRING([ "A“, "B“, "C“], ",“) ergibt "A,B,C“

MINLIST([<Wertemenge>])

Diese Funktion liefert das numerische Minimum der angegebenen Menge von Werten.

MINLIST([4,3,6,1,2,7,8,3]) ergibt 1

MAXLIST([<Wertemenge>])

Diese Funktion liefert das numerische Maximum der angegebenen Menge von Werten.

MAXLIST([4,3,6,1,2,7,8,3]) ergibt 8

DECODE("<Schlüssel>" oder ["<Schlüsselmenge>"], ["<Menge von Texttupeln>"], "<Trennzeichen>")

Diese Funktion dient zur Suche und Dekodierung eines oder mehrerer Schlüssel in einer Menge von Texttupeln, die aus Schlüssel und Text bestehen. Schlüssel und Text sind durch das Trennzeichen getrennt. Die Funktion dekodiert den Schlüssel, indem sie den Text liefert.

DECODE(["y”,”b”], ["y;yellow”,”b;blue”,”o;orange”,”r;red”], ”;”) ergibt ["yellow”,”blue”]

DECODE("y”, ["y;yellow”,”b;blue”,”o;orange”,”r;red”], ”;”) ergibt "yellow”

NORMLIST([<Quellwertemenge>], [<priorisierte Wertemenge 1>], ...)

Diese Funktion normiert Wertemengen, indem sie aus der Quellwertemenge diejenigen Werte entfernt, die in den angegebenen priorisierten Wertemengen von höherwertigen Elementen übertroffen werden. Die Priorisierung der Werte ergibt sich aus der Reihenfolge in den priorisierten Wertemengen.

NORMLIST([1,2,3,4,5,6,7,8], [1,2,3], [4 ,7,8], [5, 6]) ergibt [1,4,5]

In diesem Beispiel wird vorgegeben, daß 1 höher zu priorisieren ist als 2 und 3, 4 höher als 7 und 8 sowie 5 höher als 6. D.h., von der Quellwertemenge verbleiben nach Normierung die Elemente 1, 4 und 5.

SQRT(<Wert>)

Diese Funktion liefert die Quadratwurzel des angegebenen Werts.

SQRT(16) ergibt 4

SIN(<Wert>)

Diese Funktion liefert den Sinus des angegebenen Werts.

COS(<Wert>)

Diese Funktion liefert den Cosinus des angegebenen Werts.

LOG(<Wert>)

Diese Funktion liefert den natürlichen Logarithmus (zur Basis e) des angegebenen Werts.

EXP(<Wert>)

Diese Funktion liefert den Wert der Exponentialfunktion von e mit dem angegebenen Wert als Exponent.

EXP(1) = e

LO

Diese Funktion liefert die untere Grenze eines Bereiches.

LO {1 to 5} ergibt 1

UP

Diese Funktion liefert die obere Grenze eines Bereiches.

UP {1 to 5} ergibt 5

OPLO

Diese Funktion liefert den Operator der unteren Grenze eines Bereiches.

OPLO {1 to 5} ergibt >=

OPLO {>1 to 5} ergibt >

OPUP

Diese Funktion liefert den Operator der oberen Grenze eines Bereiches.

OPUP {1 to 5} ergibt <=

ANY(<Listenfakt>)

Diese Funktion liefert jeweils einen Einzelwert und bewirkt dadurch die Regelanwendung für jedes einzelne Element der Menge des Listenfakts. Die Verwendung dieser Funktion in einer Regel entspricht somit einer FOR-EACH-Schleife um die Regel.

siehe folgenden Abschnitt

FACTS

RPHRASES := ["R10","R20","R21"]

RULES

RULE R1

IF ANY(RPHRASES) = "R20"

THEN ...

END

Die Aktion im THEN-Teil wird ausgeführt, da "R20" im Listenfakt RPHRASES enthalten ist.

Mit Hilfe der Funktion ANY können Sie auch aus einer Menge einen (temporären) Record erzeugen:

FACTS

LISTVALUES := ["A","B","C"]

RECORD TMP

VALUE

END

RULES

RULE R1

IF TRUE()

THEN

TMP.NEW.VALUE := ANY(LISTVALUES)

COMMIT( TMP)

END

Es werden drei Instanzen des Records TMP erzeugt, mit TMP.1.VALUE = "A", TMP.2.VALUE = "B" und TMP.3.VALUE = "C".

Besonderheiten bei der Verwendung von Bereichen

Negation

Entspricht der Spiegelung des Bereiches an der Null. Hierzu werden sowohl die Vorzeichen als auch die Positionen von unterer und oberer Grenze vertauscht.

- {1 to 3} ergibt {-3 to -1}

- {-1 to 2} ergibt {-2 to 1}

Vereinigung

Die Vereinigung zweier Bereiche z.B. A = {1 to 3} und B = {5 to 8} zu einem Bereich {1 to 8} kann mit den Funktionen MINLIST und MAXLIST sowie LO und UP erreicht werden.

{MINLIST ([LO(A), LO(B)]) to MAXLIST ([UP(A), UP(B)])}