Berechnete Felder
Berechnete Felder sind Attribute, deren Wert nicht eingegeben, sondern automatisch aus anderen Feldern abgeleitet wird. Die Berechnung erfolgt serverseitig beim Speichern eines Datensatzes – das Ergebnis ist konsistent, nachvollziehbar und unabhängig davon, wo der Datensatz erzeugt wird (Formular, Prozess, Import).
So bleiben abgeleitete Werte wie Bruttobeträge, Vollnamen oder Fälligkeitsdaten immer synchron zu den Quelldaten – ohne dass eine separate Service-Aufgabe modelliert werden muss.
Wann ist ein berechnetes Feld sinnvoll?
Ein berechnetes Feld ist die richtige Wahl, wenn ein Wert eindeutig aus anderen Feldern desselben Datensatzes ableitbar ist und immer aktuell sein soll.
Typische Beispiele:
- Bruttopreis aus Nettopreis und Umsatzsteuersatz.
- Vollname aus Vor- und Nachname.
- Fälligkeitsdatum aus Rechnungsdatum plus Zahlungsziel.
- Status-Kennzeichen aus mehreren Bedingungen (z. B. „überfällig", wenn Fälligkeit überschritten und Status nicht „bezahlt").
- Gesamtmenge aus Einzelposten.
Berechnetes Feld anlegen
- Im Daten-Designer eine Datenstruktur öffnen und auf „+ Attribut hinzufügen" klicken.
- Name, Typ und Eigenschaften wie bei einem normalen Attribut wählen.
- Den Bereich „Berechnung" öffnen und aktivieren.
- Eine Sprache wählen (JSONata oder JavaScript) und den Ausdruck eingeben.
- Speichern.
Berechnete Felder sind im Formular automatisch schreibgeschützt und werden visuell hervorgehoben (dezenter Farbverlauf, gestrichelter Rahmen, Hinweis „Wird automatisch berechnet").
Welche Typen werden unterstützt?
Berechnete Felder sind für Text, Zahl, Ganzzahl, Wahrheitswert, Datum und Zeitstempel verfügbar. Listen (Array-Felder) werden derzeit nicht als berechnet unterstützt.
Sprachen für die Berechnung
JSONata
JSONata ist eine kompakte Abfragesprache für JSON-Strukturen. Sie eignet sich besonders für einfache Verknüpfungen, Formatierungen und Aggregationen.
$.netto * (1 + $.ustSatz / 100)
$.vorname & " " & $.nachname
JavaScript
Für komplexere Logik kann JavaScript verwendet werden. Der Ausdruck erhält das aktuelle Objekt als Variable obj.
obj.netto * (1 + obj.ustSatz / 100)
obj.status === 'offen' && new Date(obj.faelligkeit) < new Date() ? 'überfällig' : obj.status
Wann welche Sprache?
JSONata ist kompakter und für reine Datentransformationen oft die bessere Wahl. JavaScript empfiehlt sich für Bedingungen, Datumsarithmetik oder mehrstufige Logik.
Reihenfolge mehrerer berechneter Felder
Wenn mehrere berechnete Felder existieren, werden sie in der Reihenfolge der Attribute ausgewertet. Ein späteres berechnetes Feld kann auf das Ergebnis eines früheren zugreifen.
Beispiel: Eine Rechnung enthält drei berechnete Felder:
nettoSumme– Summe aller Positionen.ustBetrag–nettoSummemal Steuersatz.bruttoSumme–nettoSummeplusustBetrag.
Da Felder nacheinander berechnet werden, kann bruttoSumme direkt auf nettoSumme und ustBetrag zugreifen.
Die Reihenfolge lässt sich im Daten-Designer per Drag-and-drop anpassen.
Beispiel: Bruttopreis aus Netto + USt
| Attribut | Typ | Berechnung |
|---|---|---|
netto |
Zahl | – |
ustSatz |
Zahl | – |
brutto |
Zahl | $.netto * (1 + $.ustSatz / 100) (JSONata) |
Beim Speichern eines Datensatzes mit netto = 100 und ustSatz = 19 wird brutto automatisch auf 119 gesetzt – auch wenn der Datensatz über einen Prozess oder Import erzeugt wird.
Beispiel: Fälligkeitsdatum aus Rechnungsdatum
new Date(new Date(obj.rechnungsdatum).getTime() + obj.zahlungsziel * 86400000).toISOString().slice(0, 10)
Setzt das Fälligkeitsdatum auf das Rechnungsdatum plus die in zahlungsziel angegebene Anzahl an Tagen.
Hinweise
- Berechnete Felder werden bei jedem Speichern neu ausgewertet. Auch nachträgliche Korrekturen an Quellfeldern wirken sich automatisch aus.
- Ergebnisse werden dauerhaft im Datensatz gespeichert und stehen für Dashboards, Reports, Tabellen und Exporte zur Verfügung – wie jedes andere Attribut.
- Greift ein berechnetes Feld auf ein anderes berechnetes Feld zu, muss dieses vorher in der Attributliste stehen.
- Fehlerhafte Ausdrücke (z. B. ungültige Syntax) werden geloggt – das Feld bleibt in diesem Fall leer.
- Ein bestehender Wert kann jederzeit durch Deaktivieren der Berechnung wieder zu einem regulären Eingabefeld werden.
Abgrenzung zu Expressions in Formularen
Expressions im Datendesigner steuern das Verhalten eines Feldes im Formular (sichtbar, deaktiviert, Pflichtfeld). Berechnete Felder dagegen erzeugen einen dauerhaften Wert im Datensatz selbst.
| Aspekt | Expressions | Berechnete Felder |
|---|---|---|
| Wirkungszeitpunkt | Bei Anzeige des Formulars | Beim Speichern des Datensatzes |
| Wirkungsort | Formular (UI) | Datensatz (gespeicherter Wert) |
| Ergebnis | Sichtbarkeit, Pflichtstatus etc. | Konkreter Feldwert |
| Persistiert? | Nein | Ja |