Expression
Funktionsbeschreibung und Anwendung
Der Expression Evaluator-Block (ExpEval) kann Berechnungen und sonstige mathematische oder logische Verknüpfungen auf Grundlage einlaufender Nachrichten durchführen. Der Processing-Block hat Zugriff auf einlaufende Nachrichten-Payloads.
Die folgenden Skizze veranschaulicht die Funktionsweise.
Im Beispiel der Skizee wird laut Konfiguration die Berechnung eines Wertes result
durchgeführt.
Dafür wird auf die einlaufenden Datenfelder a
und b
zugegriffen. Nach Verarbeitung, wird die einlaufende Nachricht mit dem Wert result
erweitert und ausgegeben.
In der folgenden Tabelle werden die Konfigurationsparameter erläutert.
Parameter | Beschreibung |
---|---|
Name |
Name der Blockinstanz. |
Into |
Name der Blockinstanz des Folgeblocks an welchen Ausgabenachrichten weitergeleitet werden sollen. |
Expressions - Name |
Name des Ergebnis (Key) für einen angegebenen Ausdruck. |
Value |
string, Auszuwertender Ausdruck. Die Syntax ist unter Ausdrücke beschrieben. |
Preserve input properties |
optional, boolean, default=false, |
Results in object |
optional, string, Wenn an dieser Stelle etwas angegeben wird, werden Ergebnisse in einem Unterobjekt der Ausgangsnachricht eingefügt. |
Ausdrücke
Folgende Operatoren und Ausdrücke stehen zur Verfügung und können ausgewertet werden:
-
mathematische Verknüpfungen mit den Operatoren
+, -, *, /
-
Modulo mit Operator
%
-
mathematische Funktionen aus .NET Math. Bspw.
Round(..), Abs(..), Pow(..), Sqrt(..), ..
-
binäre Verknüpfungen mit den Operatoren
| , &, ^, ~
-
logische Verknüpfungen mit den Operatoren
||, &&, or, and, !, not
-
mathematische Vergleiche mit den Operatoren
<, >, <=, >=, ==, !=
Neben numerischen Konstanten (wie 12
oder 7.91
) oder booleschen true
/false
kann auf die Properties der einlaufenden Nachricht per JSON Key zugegriffen werden.
Die folgende Tabelle zeigt einige Beispiele.
Expression (JSON Value) | Variables (aus einlaufender Nachricht) | Ergebnis (JSON Value) |
---|---|---|
"1.1*6" |
6.6 |
|
"20 % 10" |
0 |
|
"not true" |
false |
|
"true && true" |
true |
|
"true || false" |
true |
|
"not(2>8)" |
true |
|
"foo*bar" |
foo:20; bar:4 |
80 |
"foo-bar" |
foo:20; bar:4 |
16 |
"foo/bar" |
foo:20; bar:4 |
5 |
"foo+bar" |
foo:20; bar:4 |
24 |
"foo%bar" |
foo:20; bar:4 |
0 |
"foo-(bar * 100)" |
foo:20; bar:4 |
-380 |
Zu beachten ist, dass dieser Processing-Block über keinen Zustand verfügt. Jede Berechnung erfolgt anhand der Konfiguration und der einlaufenden Nachrichten!
.Net Math Operations Syntax: Auf die Funktionen aus dotnet math kann folgendermaßen zugegriffen werden:
-
Potenzieren:
y = x^a
⇒ "y": "Pow(x,a)" -
Runden:
y = x (auf zwei Nachkommastellen)
⇒ "y": "Round(x,2)" -
Quadratwurzel:
y = sqrt(x)
⇒ "y": "Sqrt(x)" -
Abrunden auf Ganzzahl: x ⇒ "y": "Floor(x)"
-
Aufrunden auf Ganzzahl: x ⇒ "y": "Ceiling(x)"
-
Betrag einer Zahl: x ⇒ "y": "Abs(x)"
Weitere Details sind in der Dokumentation der Math Klasse .Net Core zu finden: https://docs.microsoft.com/de-de/dotnet/api/system.math.sqrt?view=netcore-3.1
Beispielkonfiguration
Die Berechnung im Beispiel in Abbildung 2, ergibt sich aus dem Feld „a“ einer einlaufenden Nachricht und Addition mit einem konstanten Wert 1. Das Ergebnis wird in dem Feld „aPlus1“ abgelegt. Im Weiteren sollen alle vorhandenen Felder auf der Eingangsseite erhalten bleiben (→ Preserve input properties: true). Das Ergebnis soll direkt in das Top Level JSON-Objekt eingefügt werden (→ Results in object: null).