Literal Expressions (Funktionen in DMN-Entscheidungen) verwenden

Falls Sie bereits Ihr erstes DMN-Diagramm modelliert haben, kennen Sie schon die Vergleichsoperatoren, die zur Erstellung von Entscheidungstabellen verwendet werden - zum Beispiel den kleiner-gleich Ausdruck. Diese Ausdrücke werden in dem Kapitel DMN-Diagramme erstellen und bearbeiten erklärt.

Diese Operatoren können Sie aus einer Drop-down-Liste auswählen:

In vielen Fällen reichen diese Operatoren jedoch nicht aus, um die gewünschte Entscheidungslogik darzustellen.

Ein einfaches Beispiel hierfür ist die Rabattermittlung auf Basis der Gesammtsumme von gekauften Objekten.

Um die Gesamtsumme zu berechnen, können wir zusätzliche Literal Expressions verwenden. Die Ausdrücke basieren auf FEEL, die friendly enough expression language, die als Teil des DMN-Standards spezifiziert wurde, den Sie als PDF unter http://www.omg.org/spec/DMN/1.0/PDF herunterladen können .

Die einzelnen Befehle können in Kombination verwendet werden, wie im folgenden Beispiel:

Produkt((1 - Rabattrate) * Sum(Einkaufsliste))

Im Beispiel berechnen wir die Summe der Einkäufe einer Liste von Artikeln unter Berücksichtigung eines Rabatts. Die Variablen beziehen sich auf die entsprechenden Attribute der Input Data-Elemente und können während der Simulation des Diagramms festgelegt werden.

Die Dokumentation aller Ausdrücke finden Sie unter Dokumentation aller Literal Expressions.

Natürlich können Sie innerhalb der literalen Ausdrücke die Standardoperatoren ( +, -, *, /, and, or) benutzen.

Das obige Beispiel lässt sich so noch etwas kürzer gestalten:

(1 - Rabattrate) * Sum(Einkaufsliste)``

Literal Expressions in Entscheidungstabellen verwenden

In unserem Beispiel ermitteln wir - wie bereits erwähnt - einen Rabatt auf Basis der Gesamtsumme einer Liste von gekauften Objekten.

Hierfür erstellen wir zuerst den Data Input gekaufte Waren. Der Data Input ist eine Liste von Zahlwerten mit der Einheit Währung:

Erstellen Sie ein Data Input-Element und konfigurieren Sie es dem Screenshot entsprechend.

Erstellen Sie nun ein Entscheidungselement, verbinden Sie es mit dem Data Input und nennen Sie es Rabatt ermitteln. Klicken Sie auf das Tabellen-Symbol in der oberen linken Ecke um den Entscheidungstabelleneditor zu öffnen:

Erstellen Sie ein Entscheidungselement, verknüpfen Sie es mit dem Data Input und öffnen Sie den Entscheidungstabelleneditor.

Um die Eingabe von Literal Expressions zu aktivieren, klicken Sie auf die Kopfzeile des Data Inputs und löschen Sie die Data Input-Referenz:

Löschen Sie die Data Input-Referenz, um die Literal Expression einfügen zu können.

Tippen Sie =. Ihnen wird nun eine Übersicht über verfügbare Variablen und Funktionen angezeigt:

Nachdem Sie ein '='-Zeichen eingegeben haben, werden Ihnen verfügbare Variablen und Funktionen angezeigt.

Während Sie tippen, werden Ihnen automatisch passende Vorschläge angezeigt. Geben Sie Sum ein und wählen Sie die Sum-Funktion aus. Fügen Sie anschließend die Variable GekaufteWaren als Parameter von Sum ein:

Geben Sie die Literal Expression 'Sum(GekaufteWaren)' ein.

Die Input Data der Entscheidungstabellen ist nun die Summe der Werte der gekauften Waren. Sie können nun die Entscheidungslogik wie gewohnt definieren (siehe: create_dmn`).

Beachten Sie, dass im Beispiel eine First Hit Policiy konfiguriert ist:

Entscheidungslogik zur Bestimmung eines Rabatts auf der Grundlage der Gesamtsumme der eingekauften Artikel

Literal Expressions in Entscheidungstabellen verwenden

Sie können auch Literal Expressions anstelle der Entscheidungstabellen verwenden.

Zum Beispiel können wir eine Entscheidung in zwei Entscheidungselemente aufteilen, von denen das eine ein Entscheidungstabelle und das andere eine Literal Expression enthält.

'Gesammtsumme bestimmen' und 'Rabatt ermitteln' als zwei separate Entscheidungselemente.

  • Die erste Entscheidung berechnet den Gesamtwert des Einkaufs auf Basis der gekauften Waren.
  • Die zweite Entscheidung bestimmt den Rabatt auf Basis des Gesamtwerts.

Um die erste Entscheidung abzubilden benötigen wir keine Entscheidungstabelle.

Öffnen Sie den Entscheidungstabelleneditor und wechseln Sie zum Literal Expressions-Tab. Hier können Sie den Ausdruck hinterlegen, der den Gesamtwert der gekauften Waren berechnet:

Öffnen Sie das 'Literal Expression-Tab' und geben Sie den gewünschten Ausdruck ein.

Das Entscheidungselement gibt nun die Wertsumme der gekauften Waren zurück und kann vom referenzierenden Entscheidungselement konsumiert werden.

Wenn wir komplexe Literal Expressions erstellen, können wir zudem Variablen - sogenannte Boxed Context - definieren.

Verwalten Sie komplexe Ausdrücke mit Boxed Contexts.

Verbessern Sie die Lesbarkeit komplexer Ausdrücke mit Boxed Contexts.

Wichtig

Wenn Sie eine Literal Expression hinterlegen, überschreibt diese die Logik in der Entscheidungstabelle.

Dokumentation aller Literal Expressions

In diesem Abschnitt sind alle Literal Expressions dokumentiert.

Arithmetische Operatoren

Abs

Abs(number):NUMERIC

Gibt den absoluten Wert einer Zahl zurück

Beispiel: Abs(-5) gibt 5 zurück.

Count

Count([num1 ,num2, num3]):NUMERIC

Gibt die Anzahl der Elemente der angegebenen Liste zurück.

Beispiel: Count(["item1", "item2", "item3"]) gibt 3 zurück.

Round

Round(number,digits):NUMERIC

Gibt eine Zahl zurück, die auf die entsprechende Anzahl von Ziffern gerundet ist.

Beispiel: Round(3.44,1) gibt 3.4 zurück.

Ceiling

Ceiling(number):NUMERIC

Gibt eine Zahl zurück, die bis zur nächsten Ganzzahl gerundet ist.

Beispiel: Ceiling(1.3) gibt 2 zurück.

Floor

Floor(number):NUMERIC

Gibt eine Zahl zurück, die bis zur nächsten Ganzzahl abgerundet ist.

Beispiel: Floor(1.6) gibt 1 zurück.

Integer

Integer(number): NUMERIC

Gibt den ganzzahligen Teil einer Zahl zurück.

Beispiel: Integer(1.34) gibt 1.

Modulo

Modulo(divident, divisor):NUMERIC

Gibt den Rest der Division, geteilt durch den Divisor. zurück.

Beispiel: Modulo(4, 3) gibt 1 zurück.

Percent

Percent(number):NUMERIC

Gibt die Zahl geteilt durch 100 zurück.

Beispiel: Percent(10) gibt 0.1 zurück.

Power

Power(base, exponent):NUMERIC

Gibt die Basis potenziert mit dem Exponenten zurück.

Beispiel: Power(2, 3) gibt 8.

Product

Product([factor1, factor2, factor3]):NUMERIC

Gibt das Produkt einer Liste von Faktoren zurück.

Beispiel: Product([2, 3, 4]) gibt 24 zurück.

RoundDown

RoundDown(number, digits):NUMERIC

Gibt eine auf die entsprechende Stellenzahl abgerundete Zahl zurück.

Beispiel: RoundDown(1.3674, 2) gibt 1.36 zurück.

RoundUp

Round(number,digits):NUMERIC

Gibt eine Zahl zurück, die auf die entsprechende Stellenanzahl abgerundet ist.

Beispiel: Abs(1.344, 2) gibt 1.35 zurück.

Sum

Sum([number1, number2, number3]):NUMERIC

Gibt die Summe der Werte einer Liste zurück.

Beispiel: Sum([1, 2, 3, 4, 5]) gibt 15 zurück.

Datum- & Zeit-Operatoren

Day

Day(datetime):NUMERIC

Gibt das Tag eines Datums zurück.

Beispiel: Day(2015-12-24T12:15:00.000+01:00) gibt 24 zurück.

DayAdd

DayAdd(datetime, days to add):DATE

Gibt das Datum plus die angegebene Anzahl von Tagen zurück.

Beispiel: DayAdd(2015-12-24T12:15:00.000+01:00, 1) gibt 2015-12-25T12:15:00.000+01:00 zurück.

DayDiff

DayDiff(datetime1, datetime2):NUMERIC

Gibt die Anzahl der ganzen Tage zwischen zwei Datumsangaben zurück.

Beispiel: DayDiff(2015-12-24T12:15:00.000+01:00, 2015-12-25T12:15:00.000+01:00) gibt 1 zurück.

Datum

Date(year, month, day):DATE

Gibt ein Datum unter Verwendung der Standardparameter eines Datums zurück:Jahr, Monat, Tag

Beispiel: Date(2015, 12, 25) gibt 2015-12-25 zurück.

DateTime

DateTime(day, month, year, hour, minute, second, hourOffsett):DATE

Gibt das DatumUhrzeit unter Verwendung der Standardparameter einer Datenzeit zurück. Der letzte Parameter 'hourOffset' ist optional.

Beispiel: DateTime(25, 12, 2015, 12, 15, 0, 1) gibt 2015-12-24T12:15:00.000+01:00 zurück.

Hour

Hour(datetime):NUMERIC

Gibt die Stunde eines Datums zurück.

Beispiel: Hour(2015-12-24T12:15:00.000+01:00) gibt 12 zurück.

HourDiff

Hour(time):NUMERIC

Gibt den Betrag der vollen Stunden zwischen zwei Datumsangaben zurück.

Beispiel: HourDiff(2015-12-24T12:15:00.000+01:00, 2015-12-24T14:15:00.000+01:00) gibt 2 zurück.

Minute

Minute(time):NUMERIC

Gibt den minutengenauen Teil eines Datums zurück.

Beispiel: Minute(2015-12-24T12:15:00.000+01:00) gibt 15 zurück.

MinutesDiff

MinutesDiff(datetimes1, date2times):NUMERIC

Gibt den Betrag der vollen Minuten zwischen zwei Datumsangaben zurück.

Beispiel: MinutesDiff(2015-12-24T12:15:00.000+01:00, 2015-12-24T13:15:00.000+01:00) gibt 60.

Month

Month(datetime):NUMERIC

Gibt den Monat eines Datums zurück.

Beispiel: Month(2015-12-24T12:15:00.000+01:00) gibt 12 zurück.

MonthAdd

MonthAdd(datetime, months_to_add):DATE

Gibt das Datum plus die Anzahl der Monate zurück.

Beispiel: MonthAdd(2015-10-10T12:15:00.000+01:00, 1) gibt 2015-11-10T12:15:00.000+01:00 zurück.

MonthDiff

MonthDiff(datetime1, datetime2):NUMERIC

Gibt den Betrag der vollen Monate zwischen zwei Datumsangaben zurück.

Beispiel: MonthDiff(2015-10-10T12:15:00.000+01:00, 2015-11-10T12:15:00.000+01:00) gibt 1 zurück.

Now

Now():DATE

Gibt das aktuelle Datum/Uhrzeit zurück.

Beispiel: Now() gibt beispielsweise 2015-11-10T12:15:00.000+01:00 zurück.

Today

Today():DATE

Gibt das aktuelle Datum zurück.

Beispiel : Today()gibt beispielsweise 2015-11-10 zurück.

Weekday

Weekday(datetime):NUMERIC

Liefert eine Zahl (1 bis 7), die den Wochentag angibt.

Beispiel: weekday(2016-02-09T12:15:00.000+01:00) gibt 3 zurück.

Year

Day(datetime):NUMERIC

Liefert das Jahr, das Teil eines Datums ist.

Beispiel: Year(2016-02-09T12:15:00.000+01:00) gibt 2016 zurück.

YearAdd

YearAdd(datetime, years_to_add):DATE

Gibt das Datum plus die Anzahl der Jahre zurück.

Beispiel: YearAdd(2016-02-09T12:15:00.000+01:00, 1) gibt 2017-02-09T12:15:00.000+01:00 zurück.

YearDiff

DayDiff(datetime1, datetime2):NUMERIC

Gibt den Betrag von ganzen Jahren zwischen zwei Datumsangaben zurück.

Beispiel: YearDiff(2016-02-09T12:15:00.000+01:00, 2017-02-09T12:15:00.000+01:00) gibt 1 zurück.

Listenoperatoren

Append

Append(list, element): LIST

Fügt das Element zu einer Kopie der Liste hinzu. Gibt die veränderte Kopie zurück.

Beispiel : Append([2.5, 5.8, 4.3], 6.7) gibt [2.5, 5.8, 4.3, 6.7] zurück.

AppendAll

AppendAll(list1, list2): LIST

Fügt alle Elemente der zweiten bereitgestellten Liste zu einer Kopie der ersten Liste hinzu. Gibt die veränderte Kopie zurück.

Beispiel: AppendAll([2.5, 5.8, 4.3], [2.1, 3.5, 7.4]) gibt [2.5, 5.8, 4.3, 2.1, 3.5, 7.4] zurück.

Zip

Zip(attributes, values1, ..., valuesN):LIST

Stellt eine Liste von Objekten aus einer Liste von Attributen zusammen und mehrere Listen von Werten. : Zip(["id", "value"], [23a3e98, c45da1b], [40, 120]) gibt [{id: 23a3e98, value: 40},{ id: c45da1b, value: 120}].

Wichtig

Wichtig

Vor Version 10.11.0 des Decision Managers wurden die Werte als eine Liste von Listen an die Funktion übergeben:

Zip(["id", "value"], [[23a3e98, c45da1b], [40, 120]])

Literale Ausdrücke, die die alte Zip-Funktion verwendet haben, wurden automatisch in die neue Syntax umgewandelt.

NotContainsAny

NotContainsAny(list1, list2): BOOLEAN

Bestimmt, ob die Liste1 ein Element der Liste2 enthält.

Beispiel : NotContainsAny(["item1", "item2"], ["item2", "item3"]) gibt false zurück.

ContainsOnly

ContainsOnly(list1, list2): BOOLEAN

Bestimmt, ob die Liste1 ein Element der Liste2 enthält.

Beispiel: ContainsOnly(["item1", "item2"], ["item2", "item3"]) gibt false zurück.

AreElementsOf

AreElementsOf(list1, list2): BOOLEAN

Bestimmt, ob die Liste1 ein Element der Liste2 enthält.

Beispiel: AreElementsOf(["item2, item3"], ["item1", "item2", "item3"]) gibt true zurück.

Remove

Diese Funktion ist ausschließlich im Literal Expressions Editor (und nicht im Decision Table Editor) verfügbar.

Remove(list, element): LIST

Entfernt das angegebene Element aus der angegebenen Liste.

Beispiel: Remove(["item1", "item2"], "item1") gibt ["item2"] zurück.

RemoveAll

Diese Funktion ist ausschließlich im Literal Expressions Editor (und nicht im Decision Table Editor) verfügbar.

RemoveAll(list1, list2): LIST

Entfernt alle Elemente der Liste2 -aus der Liste1.

Beispiel: Remove(["item1", "item2", "item3"], ["item1", "item2"]) gibt ["item3"] zurück.

Statistische Operatoren

Avg

Sum([number1, number2, number3]):NUMERIC

Gibt den Durchschnitt der Wert in der angegebenen Liste zurück.

Beispiel: Avg([3,5]) gibt 4 zurück.

Max

Max([number1, number2, number3]):NUMERIC

Gibt den Maximalwert der gegebenen Liste zurück.

Beispiel: Max([5, 4, 10]) gibt 10 zurück.

Median

Max([number1, number2, number3]):NUMERIC

Gibt den Medianwert der gegebenen Liste zurück.

Beispiel: Median([2, 5, 10, 12, 34, 35]) gibt 11 zurück.

Min

Max([number1, number2, number3]):NUMERIC

Gibt das Minimum der gegebenen Liste zurück.

Beispiel : Min([5, 4, 10]) gibt 4 zurück.

Mode

Mode([number1, number2, number3]):NUMERIC

Liefert den am häufigsten vorkommenden Wert der gegebenen Liste. Gibt den am häufigsten auftretenden Wert (links stehend) zurück.

Beispiel: Mode([1, 2, 4, 4, 5, 6]) gibt 4 zurück.

Texthandling

Concat

Concat([text1, text2, text3]):TEXT

Gibt die Verkettung der gegebenen Liste von Textwerten zurück.

Beispiel: Concat(["Hello ", "World", "!"]) gibt "Hello World!" zurück.

IsAlpha

IsAlpha(text):BOOLEAN

Bestimmt, ob der Text nur alphabetische Zeichen (A-Z,-a-z) enthält. Umlauts und ähnliche Buchstaben (e.g.Ä, Å ß) sind nicht eingeschlossen.

Beispiel: IsAlpha("abcdefg5") gibt false zurück.

IsAlphanumeric

IsAlphanumeric(text):BOOLEAN

Bestimmt, ob der Text nur alphabetische Zeichen (A-Z,-a-z) enthält. Umlauts und ähnliche Buchstaben (e.g.Ä, Å ß) sind nicht eingeschlossen.

Beispiel: isAlphanumeric("abcdefg5") gibt true zurück.

IsNumeric

IsNumeric(text):BOOLEAN

Bestimmt, ob der Text eine valide Zahl ist, die nur Plus- oder Minus-Präfix, numerische Zeichen und ein Trennungskomma/einen Trennungspunkt enthalten darf.

Beispiel: IsNumeric("2.3.5") gibt false zurück.

IsSpaces

IsSpaces(text):BOOLEAN

Bestimmt, ob der Text nur Leerzeichen enthält.

Beispiel: IsSpaces(" ") gibt true zurück.

Len

Len(text):NUMERIC

Gibt die Anzahl der Elemente des angegebenen Strings zurück.

Beispiel : Len("five") gibt 4 zurück.

Lower

Lower(text):TEXT

Gibt den Text mit allen Zeichen als Kleinbuchstaben zurück.

Beispiel: Lower("UPPER") gibt upper zurück.

Trim

Trim(text):TEXT

Gibt den Text mit allen Leerzeichen außer einzelnen Leerzeichen zwischen Worten zurück.

Beispiel: Trim("Hello World! ") gibt "Hello World!" zurück.

Upper

Upper(text):TEXT

Gibt den Text mit allen Zeichen als Großbuchstaben zurück.

Beispiel: Upper("lower") gibt "LOWER".

Number

Number(text):NUMERIC

Gibt den Zahlenwert, den der Text abbildet, als Zahl zurück. Als Trennzeichen ist ausschließlich ein Punkt (.) erlaubt.

Beispiel: Number("5") gibt 5 zurück.

Number

Number(text, default_value):NUMERIC

Gibt den Zahlenwert, den der Text abbildet, als Zahl zurück. Als Trennzeichen ist ausschließlich ein Punkt (.) erlaubt. Gibt default_value zurück, falls der Text nicht in eine Zahl umgewandelt werden kann.

Beispiel: Number("5,5", 10) gibt 10 zurück (Number("5.5", 10) gibt 5.5) zurück.

Mid

Mid(text, start, num_chars):TEXT

Gibt die Zeichenkette der Länge num_chars vom Beginn des Text-Strings zurück.

Beispiel: Mid("Hello World!", 6, 5) gibt "World" zurück.

Left

Left(text, num_chars):TEXT

Gibt die Zeichenkette num_chars vom Beginn des Text-Strings zurück.

Beispiel: Left("Hello World!", 5) gibt "Hello" zurück.

Right(text, num_chars):TEXT

Gibt die Zeichenfolge der Länge num_chars von der entsprechenden Startposition eines Text-Strings zurück.

Beispiel: Right("Hello World!", 7) gibt "World!" zurück.

Text

Text(num, format_text):TEXT

Liefert einen numerischen Wert als Textzeichenkette in einem spezifischen Format. Das Format wird über die Platzhalter # und 0, sowie über den Dezimalpunkt . spezifiziert.

Beispiel: Text(1, "#.000") gibt "1.000" zurück.

TextOccurrences

TextOccurrences(find_text, within_text):NUMERIC

Gibt die Anzahl der Vorkommen von find_text - innerhalb von within_text zurück.

Beispiel: TextOccurrences("can", "Can you can a can as a canner can can a can?") gibt 6 zurück.

Contains

Contains(text, substring): BOOLEAN

Bestimmt, ob der text den substring enthält.

Beispiel: Contains("Hello World!", "o World") gibt true zurück.

StartsWith

StartsWith(text, prefix): BOOLEAN

Bestimmt, ob text mit dem prefix beginnt.

Beispiel: StartsWith("Hello World!", "Hello") gibt true zurück.

EndsWith

EndsWith(text, suffix): BOOLEAN

Bestimmt, ob der text mit dem suffix endet.

Beispiel: endsWith("Hello World!", "!") gibt true zurück.

Logische Operatoren

Not

Not(boolean): BOOLEAN

Negates the input boolean.

Beispiel: Not(true) gibt false zurück.