Wertauflöser - Kurzfassung
Zweck: Führt mathematische Operationen mit numerischen Werten (mit und ohne Einheit) aus, und liefert in der Regel das Berechnungsergebnis als "Zahl mit Einheit" als Rückgabewert.
Tooltip
Verwendung: Der Wertauflöser beinhaltet eine statische Definition für einen Berechnungsausdruck, der Variablen aus dem inneren und äußeren Kontext des Wertauflösers einbeziehen kann, sofern diese die numerische Werte oder Textinhalt bereitstellen, der als Zahlenwert interpretierbar ist.
Parameter: Zum Editieren eines Berechnungsausdrucks (mit Konstanten, Variablen, Operatoren, Funktionen) steht ein mehrzeiliges Code-Eingabefeld zur Verfügung, dessen Größe nach Bedarf verändert werden kann.
Optional können beliebig viele Wertzuweisungen für Variablen über Wertauflöser hinzugefügt werden. Der Variablenname sollte sich dabei möglichst nicht identisch mit dem Alias von Einheiten (z. B. b, l, m, D, H, M, usw.) gewählt werden.
Variablen aus dem äußeren Kontext des Wertauflösers (
storage) stehen auch ohne Zuweisung direkt zur Verfügung, sofern kein Namenskonflikt mit den Alias von Einheiten besteht.Auch der Eingabewert (
input) und das Bezugsobjekt (entity) können direkt im Berechnungsausdruck referenziert werden, sofern sie numerisch interpretierbare Werte beinhalten.Exklusiv für den Eingabewert (
input) werden im Berechnungsausdruck außerdem Datenfeldpfade für den Zugriff auf numerisch interpretierbare Feldwerte aufgelöst (z. B.input.numericProperty).Hinweis: Bei syntaktischen Fehlern (z. B. fehlerhafter Klammersetzung) lautet der Rückgabewert
$null. Mathematische "Unmöglichkeiten" (z. B. eine "Division durch Null") werdend dagegen als Fehler (ggf. mit Rollback) behandelt.Warnung: Der Wertauflöser unterstützt Umrechnungen zwischen Einheiten desselben Typs (per
convert()-Funktion und teilweise automatisch), hat aber weder hellseherische Fähigkeiten noch ein Ingenieur-Studium absolviert. Ein Produkt aus drei Werten mit Längeneinheiten erscheint daher nicht automatisch als "Volumen" sondern formal als "Länge".

Der Berechne Wert-Wertauflöser ermöglicht mathematische Operationen mit numerischen Werten (mit und ohne Einheit), und liefert in der Regel das Berechnungsergebnis als "Zahl mit Einheit" als Rückgabewert.
Ausnahmen:
Der Berechnungsausdruck ist leer oder syntaktisch fehlerhaft (z. B. bzgl. Klammersetzung). Dann lautet der Rückgabewert "Kein Wert" (
$null), es tritt aber kein Fehler auf.Der Berechnungsausdruck ist syntaktisch einwandfrei, aber nicht berechenbar. Dann tritt zur Laufzeit ein Fehler auf (z. B.
ArithmeticException: Division by zero).
Prinzipiell kann ein Berechnungsausdruck ausschließlich dem Zweck dienen, eine "Zahl mit Einheit" statisch (per Texteingabe in der Konfiguration) zu definieren, etwa: 7.5t für die Definition eines Maximalgewichts von "7,5 Tonnen".
In den meisten Fällen verknüpft die Berechnung aber variable Eingangsgrößen, die mindestens teilweise über Variablen bereitgestellt werden.
Der Berechnungsausdruck kann aus unterschiedlichen Komponenten aufgebaut werden:
Komponententyp | Syntax / Beispiel | Beschreibung | Beispielausdrücke | Ergebnis (Beispiel) |
|---|---|---|---|---|
Konstante numerische Werte |
oder
| ►WICHTIG◄ Unabhängig von Einstellungen für die Aktuelle Sprache ist die Eingabe des Punkts als Dezimaltrenner im verpflichtend. Die Einheit einer Konstante muss nachgestellt erscheinen und über den Alias aus der betreffenden Dynamischen Aufzählung identifiziert werden. Leerzeichen zwischen Wert und Einheit sind optional. |
| Konstante "Zahl mit Einheit" ( |
Vorbelegte Konstanten |
| Kreiszahl π (3.1415926535897932384...) |
| Kreisfläche für einen Kreis mit dem per Variable |
e | Eulersche Zahl e (2.7182818284590452353...) |
|
| |
Automatisch vorbelegte Variablen |
Eingabewert | Per Standard wird die Variable |
| Berechnet einen Bruttobetrag (mit einem Steuersatz von 19%), wenn als Eingabewert ( |
►HINWEIS◄ Exklusiv für den Eingabewert ( |
| Berechnet die Zeitspanne für einen Eingabewert vom Typ "Datumsbereich" (
| ||
►HINWEIS◄ Für Rückgabewerte des Relatives Datum mit Zeit-Wertauflösers sollte der Ausdruck für die Zeitspanne in Millisekunden in der Regel | ||||
| Sofern das Bezugsobjekt im Kontext des Wertauflösers ein Zahlenwert (mit oder ohne Einheit) ist oder in einen Zahlenwert umgewandelt werden kann, steht dieser über den Variablennamen |
| Rechnet den Eingabewert in die Einheit einer "Zahl mit Einheit" um, die als Bezugsobjekt vorliegt | |
| Aktueller Iterationsindex ( |
| "Fortschritt": Abarbeitungsgrad bzgl. der Iterationen beim Ausführen einer Schleife (in Prozentpunkten) | |
►HINWEIS◄ Abhängig vom Kontext (z. B. abhängig von Ereignissen oder der Auswahl in einer Übersicht) können weitere Variablen automatisch vorbelegt sein. Allerdings können diese (wie auch die Variable | ||||
Variablen aus dem äußeren Kontext ( | Grundsätzlich können beliebige Variablennamen innerhalb von Beschriftungsausdrücken verwendet werden. Allerdings sind die rechts aufgeführten Einschränkungen zu beachten. Um zu verhindern, dass Variablennamen wie "17+4" oder "2022m3" im Ausdruck berechnet bzw. geparst werden, können sie im Ausdruck in einfache oder doppelte Hochkommas eingeschlossen werden. Das ermöglich auch den Einsatz von Leerzeichen im Variablennamen. Als Escape-Zeichen (z. B. für Hochkommas als Textzeichen) kann innerhalb von Hochkommas außerdem der Backslash genutzt werden. | ►WICHTIG◄
|
| Falls der Wert einer Variable kein Zahlenwert oder eine "Zahl mit Einheit" ist, wird versucht, deren Inhalt als Zahl zu interpretieren. Dabei wird für komplexere Datenobjekte (z. B. Werte von Dynamischen Aufzählungen) nicht automatisch das String-Abbild herangezogen. Nur wenn die Variable bereits einen String wie Scheitert die Umwandlung in einen Zahlenwert, dann wird als Wert der Variablen stattdessen der Wert 0 (ohne Einheit) verwendet. |
Eigens definierte Variablen | Innerhalb der Konfiguration des Wertauflösers können per Klick auf das Zuweisungen für den Kontext der Berechnung verändern den Wert von im äußeren Kontext bereits definierten Variablen nicht. Sie werden im inneren Kontext nur temporär übersteuert, so dass die "äußeren Werte" nicht in die Berechnung einfließen können. | ►WICHTIG◄
|
►WICHTIG◄ Um das Berechnungsergebnis in Tagen auszugeben, kann hier nicht einfach die Umrechnung per | |
Das Beispiel rechts demonstriert, wie der Alias | ||||
Klammern | ( <Ausdruck> ) | Paare von Klammern strukturieren Aggregate bzw. grenzen enthaltene Ausdrücke aus Operatoren und Operanden (Konstanten, Variablen, Funktionen) gezielt voneinander ab, um den Vorrang zwischen Operatoren explizit zu regeln. |
|
|
|
| |||
|
| |||
|
| |||
|
| |||
|
| |||
| Diagonale eines 16:9-proportionierten Rechtecks mit der Breite laut Variable | |||
Operatoren |
| Addition bzw. positives Vorzeichen |
|
|
| Subtraktion bzw. negatives Vorzeichen |
| Differenz zwischen Ist- und Sollwert in je einer Variablen | |
| Multiplikation |
| Aufschlag von 25% auf einen Saldowert in der Variablen | |
| Division |
| "Gewinn pro Kopf" "Wechselkurs" für Schweizer Franken (CHF) im Sinne einer Mengennotierung (mit 1 EUR als Bezugsgröße in "Heimatwährung") anhand der Umrechnungsfaktoren in der Aufzählung Währung; | |
| Modulo (Rest der Ganzzahl-Division) |
| Anzahl der Paletten für eine Teilladung, wenn das in der Variablen | |
| Potenzieren |
| Quadratwurzel ("hoch 1/2") der in der Variablen | |
Funktionen |
| Absolutbetrag ohne Vorzeichen (math.: |a|) |
| Absolutbetrag der Differenz von Soll- und Ist-Werten in Variablen |
| Signum-Wert: 1 für (a>0), -1 für (a<0), 0 für (a=0) |
| "Vorzeichenwert" der Differenz von Soll- und Ist-Werten in Variablen | |
| Aufrunden zur nächsthöheren Ganzzahl |
| Anzahl der benötigten Container (mit je 24 Palettenplätzen) für die in der Variablen | |
| Abrunden zur nächstkleineren Ganzzahl |
| Anzahl der komplett beladenen Container (mit je 24 Palettenplätzen) für die in der Variablen | |
| ganzzahliges Runden (ab 0.5 wird aufgerundet) |
| "Gewinn pro Kopf" (aus Variablen) gerundet auf 1000 Währungseinheiten | |
| Minimum von zwei Werten |
| der kleinere Wert aus zwei Variablen für "Ist" und "Schätzung" einer Größe | |
| Liefert den größeren der beiden Werte |
| der größere Wert aus zwei Variablen für "Ist" und "Schätzung" einer Größe | |
| Quadratwurzel, sinngemäß: |
| Quadratwurzel der in der Variablen | |
| Kubikwurzel, sinngemäß: |
| Radius einer Kugel mit dem in der Variablen | |
| Natürlicher Logarithmus von a |
| Der Binärlogarithmus des Werts in der Variablen | |
| Logarithmus zur Basis 10 |
| Die "Größenordnung" der Abweichung zwischen einem Ist- und einem Soll-Wert (in Variablen) als signierte Zehnerpotenz (z. B. - | |
| Umrechnen von Wert a in die Einheit von Wert b |
| Umrechnen der Fracht(menge) in der Variablen | |
| Umrechnen der Gesamtkosten in der Variablen | |||
| Bogenmaß-Winkel a in Winkelgrad umrechnen |
|
| |
| Grad-Winkel a in Bogenmaß umrechnen |
|
| |
| Sinus-Wert für Bogenmaß-Winkel a |
|
| |
| Cosinus-Wert für Bogenmaß-Winkel a |
|
| |
| Tangens für Bogenmaß-Winkel a |
|
| |
| Arkussinus-Wert (im Bogenmaß) für a (Sinuswert) |
|
| |
| Arkuscosinus-Wert (im Bogenmaß) für a (Cosinuswert) |
|
| |
| Arkustangens-Wert (im Bogenmaß) für a (Tangenswert) |
|
| |
| Sinus-hyperbolicus-Wert für a |
|
| |
| Consinus-hyperbolicus-Wert für a |
|
| |
| Tangens-hyperbolicus-Wert für a |
|
| |
Beispiele
Berechnen einer Zeitspanne in Tagen mit Dezimalen
Über den Lobster Data Platform / Orchestration-Server können Benutzer besondere betriebliche Vorfälle (Störungen, Unfälle, Verzögerungen usw.) melden, indem sie eine Entität eines eigens definierten Typs ("Ereignis") erstellen und dabei den Vorfall durch spezifische Merkmale klassifizieren.
Beim Erstellen der Ereignis-Entität soll das System prüfen, wann zuletzt ein Vorfall mit vergleichbarer Klassifikation gemeldet wurde. Liefert diese Recherche einen Treffer, soll eine Meldung angeben, wie viel Zeit (in Tagen mit einer Dezimale) seit diesem Vorfall vergangen ist.
Laufzeitbeispiel:

Konfiguration:
Die rechts abgebildete Ereignisbehandlung reagiert auf das Auslösende Ereignis (s. Allgemein (Ereignisse)) "Erstellen", das u. a. beim Speichern einer Entitäten durch den Benutzer in einer Erfassungsmaske ausgelöst wird . In der Prüfenden Regel wird Typprüfung sichergestellt, dass eine Enität des Typs "Ereignis" erstellt werden soll. Als Aktion bei bestandener Regel wird zunächst die Suche (Ereignisaktion) ausgeführt, die unter allen bisher erstellten Ereignissen nach "vergleichbaren" Vorfällen sucht. Details zu den Kriterien für die Suche sind für den weiteren Workflow unerheblich.
|
|
Rechts sind Details zur Konfiguration des Berechne Wert-Wertauflösers zu sehen:
►HINWEIS◄ Der Datentyp ►ANMERKUNG◄ Die Umrechnung der Millisekunden-Differenz in Tage stützt sich auf Umrechnungsregeln in der Dynamischen Aufzählung Zeiteinheit, die keine kalenderspezifischen Operationen sind, sondern nur zwischen den Zeiteinheiten Millisekunde ( Allerdings fällt mit der |
|
Berechnen des Packstückvolumens aus Länge x Breite x Höhe (mit variabler Längeneinheit)
Zu einem Packstück liegen für die Dimensionen als "Länge", "Breite" und "Höhe" Angaben in numerischen Feldern vor, deren Längeneinheit vom Benutzer - ggf. für jede Dimension anders - ausgewählt werden kann.
Aus diesen Angaben soll innerhalb einer Ereignisbehandlung das Volumen der quaderförmig idealisierten Packstücks in einer wählbaren Volumeneinheit berechnet und als Wert des Typs "Zahl mit Einheit" in die Variable Volume geschrieben werden.
Zur Vorgabe der gewünschten Volumeneinheit wird diese der Variable Volume vorab zugewiesen, sodass diese bereits vor der Berechnung einen Wert wie "0 Liter" oder "0 Gallonen" enthält.
Konfiguration:
Die geeignet initialisierte Ziel-Variable
|
|
Der Screenshot rechts zeigt wie in unserem Beispiel zu Testzwecken die Belegung der Variablen für die Eingangsdaten
Für die operative Praxis macht die Zuweisung von statischen Werten für die drei Variablen natürlich keinen Sinn. Ausgehend von der Annahme, dass die Angaben für die drei Dimensionen des Packstücks z. B. als Felder (oder Attribute) eines gemeinsamen Datenobjekts vorliegen, könnte man dieses durch eine Ausführen mit-Ereignisaktion als Bezugsobjekt im Kontext des Wertauflösers definieren, um dann in den Zuweisungen für die Variablen
|
|
►ANMERKUNG◄ Hier wird nicht beschrieben, wie die Variablen length, width und height - abgesehen vom Test mit statischen Werten - eigentlich mit Werten versorgt werden.
Typischerweise würden hier Objekt-Feld-Wertauflöser verwendeten werden, die den Variablen geeignete Werte aus dem äußeren Bezugsobjekt zuweisen.
Wenn aus demselben Bezugsobjekt mehrere Werte gelesen und direkt "verrechnet" werden sollen, läge es eigentlich nahe, das Bezugsobjekt als Eingabewert zu verwenden und die einzelnen Felder im Berechnungsausdruck über die input-Variable zu adressieren.
Konfigurationsvariante:
Der Screenshot rechts zeigt eine Wertauflöserkette, der als Eingabewert das Datenobjekt für das Packstück direkt (hier: als Bezugsobjekt) zugeführt wird. Die zu verrechnenden Abmessungen sollen in den Feldern "Länge" ( Der Berechnungsausdruck ist grundsätzlich aufgebaut wie oben beschrieben, allerdings mit folgenden Anpassungen:
►HINWEIS◄ Die explizite "Zuordnung" der numerischen Eingangsgrößen in Variablen entfällt hier komplett. Allerdings funktioniert dieser Zugriff nur, solange die gelesenen Daten direkt als numerische Werte (hier: mit Einheit) im input vorliegen. ►ANMERKUNG◄ Für Tests kann z. B. ein Erzeuge Instanz mit Werten-Wertauflöser als Start für die Wertauflöserkette ergänzt werden, um ein "Packstück" als Client-Objekt bereitzustellen. |
|
"Reichweite" des angemeldeten Benutzerkontos in einem Zuordnungskriterium bewerten
Benutzer sollen über eine Kennzahl "Reichweite" klassifiziert werden, die als Produkt aus den Anzahlen für die beim Login auswählbaren Rollen und Firmen/Mandanten definiert ist.
Ein Zuordnungskriterium soll genau dann zutreffen, wenn die "Reichweite" eines Benutzers mindestens 3 beträgt.
Konfiguration:
Im Kontext einer Mit-Regel, die den zu bewertenden Benutzer als Bezugsobjekt definiert (z. B. den Benutzer der Session), wird das im Screenshot rechts abgebildete Kriterium geprüft:
►ANMERKUNG◄ Dass der Wert im Objekt-Feld |
|
Berechnungen mit Daten aus einer Map
Der Zugriff über Datenfeldpfade für Details aus einem komplexen Eingabewert gelingt auch, wenn es sich dabei um eine Map geht.
Für das folgende Beispiel soll eine Map in einer Variablen sales vorliegen, in die unter Verwendung systematisch benannter Schlüsselwerte ("Q1", "Q2", "Q3", "Q4") Absatzzahlen (Stückzahlen) für die bereits abgeschlossenen Quartale des laufenden Jahres geschrieben wurden.
Die Summe aller Quartale zum aktuellen Stand soll berechnet und unter dem Schlüssel "TOTAL" als weiterer Wert in die Map geschrieben werden.
Konfiguration:
Der Screenshot rechts zeigt eine Ausführen mit-Ereignisaktion, für deren Aktionsblock die Map in der Berechnung und Wertzuweisung können innerhalb derselben Setze Wert-Ereignisaktion abgewickelt werden:
|
|
Berechnungen mit Daten aus Listen
Zugriff auf Listenwerte per Index
Sofern der Eingabewert eine Liste ist oder Listenwerte enthält, kann der Berechnungsausdruck auf individuelle Listenwerte über deren absolute Indexposition zugreifen.
Der Index startet jeweils bei
0.
Der erste Listenwert einer als Eingabewert vorliegenden Liste von numerischen Werten kann damit als
input.0im Berechnungsausdruck adressiert werden.Handelt es sich bei einem Listenwert um ein komplexes Objekt, kann der Datenfeldpfad nach dem Indexwert fortgesetzt werden, um dessen Struktur weiter aufzulösen.
Der Ausdruck
input.2.maxCapacityliest den Wert des FeldsmaxCapacityeines Objekts, das der dritte Eintrag in der als Eingabewert bereitgestellten Liste ist (sofern vorhanden).►WICHTIG◄ Anders als im Kontext eines Formulars, wo die get (Wert aus Datenfeld lesen)-Funktion den Zugriff auf Listenwerte über einen variablen Indexwert ermöglicht, ist dies hier nicht möglich. Indexwerte können im Berechnungsausdruck ausschließlich statisch und absolut definiert werden.
Ein Eigener Entitätstyp "Aircraft" (Aircraft) listet im Listenfeld areas Ladebereiche eines Luftfahrzeugs auf, die über ein weiteres Listenfeld zones weiter untergliedert sein können.
Per Konvention is festgelegt, dass jedes relevante Luftfahrzeug durch maximal vier Ladebereiche (areas) beschrieben werden kann, denen je 1-2 Zonen (zones) zugeordnet sind.
Jeder Zone kann über das Feld weight ein "Ladungsgewicht" (weight) zugeordnet werden. Gleichzeitig ist je Zone ein fiktiver "Hebelarm" (arm) angegeben, über den das Moment abhängig von der Zuladung berechnet werden soll.
Vor dem Start des Luftfahrzeugs ist zu prüfen, ob die Gesamtmasse und das Gesamtmoment unter Berücksichtigung der konkreten Beladung und Betankung (hier: modelliert über die Zonen) im zulässigen Betriebsbereich liegen.
Die folgende Konfiguration zeigt wie das Gesamtmoment für ein in einer Variablen acft definiertes Aircraft-Objekt berechnet werden kann.
Konfiguration:
Der Screenshot rechts zeigt eine Wertauflöserkette (s. Verketteter Wertauflöser), über die das "Gesamtmoment" z. B. als Meldung in einer Hinweis anzeigen-Ereignisaktion ermittelt werden kann:
|
|
►ANMERKUNG◄ Dieses Beispiel soll aufzeigen, wie der Indexzugriff für Listenwerte für Berechnungen mit einer definierten (oder zumindest endlichen) Anzahl von Listenwerten ausgeführt werden kann. Berechnungen für Listen mit variabler Länge ermöglicht immer eine Für jeden Eintrag wiederholen (Schleife)-Ereignisaktion und - in besonderen Fällen - das Ausführen einer Berechnung (per Wertauflöser, z. B. Berechne Wert oder Einfache Berechnung (+,-,*,/,%)) in einem Sammle Werte-Wertauflöser.









