Leere Elementdaten setzen

Aktionen - Kurzfassung

Setzt ein neues leeres Objekt als Elementdaten des Zielelements. Wird kein Zielelement angegeben, so wird das Formular selbst als Zielelement herangezogen.

Siehe auch: Elementdaten setzen

images/download/attachments/189434830/image-2024-10-17_10-2-19-version-1-modificationdate-1729152139323-api-v2.png

Die Aktion Leere Elementdaten setzen erzeugt ein neues leeres Objekt und weist dieses einem bestimmten Zielelement als Elementdaten zu.

  • Das Zielelement kann optional durch eine Verknüpfung ausdrücklich zugewiesen werden.

  • Wird kein Zielelement verknüpft gilt das komplette Formular als Zielelement.

Diese Aktion wird typischerweise zum Zurücksetzen von Elementdaten eines Objekts herangezogen, das über ein Datenfeld mit einem Element Container verknüpft ist, der mehrere Formularelemente mit Bezug zu Datenfeldern des Objekts enthält.

  • Die Option Keine Standardwerte anwenden entscheidet darüber, ob den Datenfeldern ein ggf. für die Formularelemente definierter Standardwert ($init) zugewiesen wird oder "Kein Wert" ($null).

  • Durch das Setzen leerer Elementdaten werden immer auch alle Datenfelder des betreffenden Datenobjekts gelöscht, die nicht durch Formularelemente repräsentiert sind.

  • Formularelemente, die sich nicht innerhalb der Teilstruktur abwärts vom Zielelement befinden und sich trotzdem auf durch die Aktion geänderte Formulardaten beziehen, werden durch die Aktion Leere Elementdaten setzen nicht automatisch aktualisiert. Sie zeigen also eventuell vom "Datenstand" abweichende Werte an, bis sie erneut mit Elementdaten "beladen" werden (Details s. drittes Beispiel unten).


images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg ACHTUNGimages/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg : Das Verwenden der Aktion Leere Elementdaten setzen kann in Erfassungsmasken zum "Aufbrechen" der Datenstruktur führen, die dort grundsätzlich durch den Entitätstyp verbindlich vorgegeben ist. Beispielsweise würde das Setzen von "leeren Elementdaten" auf eine Erfassungsmaske für Benutzer dafür sorgen, dass enthaltene Formularelemente sich nicht mehr auf den Entitätstyp beziehen, für den die Erfassungsmaske geöffnet wurde. Eingaben können dann zwar vorgenommen aber nicht mehr gespeichert werden.


Beispiele

Einfacher Anwendungsfall

Ein einfaches Portal (s. Portale) dient zur "Vorerfassung" von Eckdaten, aus denen in einem zweiten Schritt des Workflows eine Entität erstellt werden kann, die eine "Sendung" repräsentiert". Um Duplikate zu vermeiden, soll vorher allerdings geprüft werden, ob bereits eine "Sendung" vorliegt, für die Schlüsselwerte aus dem Portal übereinstimmen.

Für den Screenshot wurden die Namen der verwendeten Datenfelder als Beschriftungen der betreffenden Formularelemente eingetragen. Die JSON-Struktur rechts zeigt den "Strukturexport" für das Portal, also seine Formulardaten.

Laufzeitansicht des Portals

JSON-Abbild der Formulardaten
blau: Daten von Formularelementen im Container "Details"

images/download/attachments/189434830/image-2023-7-31_18-17-59-version-1-modificationdate-1729152132888-api-v2.png

{
"trackingId": "XQ10245122561286432",
"requestedDate": {
"clazz": "de.lobster.scm.utils.date.DateRange",
"timeZone": "Africa/Cairo",
"start": "1593820800000",
"end": "1593820800000"
},
"cne": {
"clazz": "java.lang.Long",
"value": "4101"
}
}

Wenn der Button "RESET" unterhalb des trackingId-Textfelds geklickt wird sollen die Formularelemente rechts vom Button-Element, die sich mit diesem in einem Spaltenlayout-Container befinden, "zurückgesetzt" werden.

Soweit vorhanden sollen den Datenfeldern die Standardwerte der enthaltenen Formularelemente zugewiesen werden. Sonst: "Kein Wert" ($null).

Konfiguration:


images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg ACHTUNGimages/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg Die folgende Konfiguration funktioniert nur "fast". Sie soll eine verbreitete Fehleinschätzung dokumentieren, die zu unerwarteten Ergebnissen führen kann. Der Abschnitt "Abhilfe" verweist auf funktionierende Lösungswege.


Für den Button wird ein Verhalten mit dem Name "reset" eingerichtet und wie rechts abgebildet konfiguriert:

  • Wie für den Button typisch wird der Auslöser Angeklickt ausgewählt.

  • Die Verhaltensweise Statisch mit dem (Standard-)Wert "ON/Wahr" stellt sicher, dass bei jedem Klick auf den Button bedingungslos die Aktionen bei "wahr" ausgeführt werden.

  • Als einzige Aktion soll eine Leere Elementdaten setzen-Aktion ausgeführt werden. Diese bezieht sich per Verknüpfung auf das Zielelement "Details", bei dem es sich hier um den Container handelt der "zurückgesetzt" werden soll.

  • Abweichen vom Standard (ausgewählt) wird die Option Keine Standardwerte anwenden abgewählt, damit diese ggf. berücksichtigt werden.

images/download/attachments/189434830/image-2024-10-17_10-5-5-version-1-modificationdate-1729152304712-api-v2.png

Laufzeitbeispiel:

Ablaufschritt

Laufzeitansicht der Portals

JSON-Abbild der Formulardaten
blau: Daten von Formularelementen im Container "Details"
rot: abweichender ("veralteter") Datenstand für "Details"

Das Portal wurde gerade geöffnet:

Der Screenshot rechts zeigt das Portal mit den im Layout definierten Standardwerten:

Für die anderen Felder ("confirmedDate", "cne") ist kein Standardwert vorgesehen.

images/download/attachments/189434830/image-2023-8-1_7-7-1-version-1-modificationdate-1729152132877-api-v2.png

{
"trackingId": "XQ",
"requestedDate": {
"clazz": "de.lobster.scm.utils.date.DateRange",
"timeZone": "Africa/Cairo",
"start": "1691013600000",
"end": "1691013600000"
}
}

Das Portal wurde bearbeitet:

  • Eine "trackingId" wurde eingetragen,

  • Das "requestedDate" wurde geändert.

  • Ein "cne" (Empfänger) wurde ausgewählt.

Die Formulardaten (s. letzte Spalte) spiegeln die Änderungen an den Formularelemente innerhalb (blau) und außerhalb (schwarz) des Containers "Details".

images/download/attachments/189434830/image-2023-8-1_7-19-51-version-1-modificationdate-1729152132866-api-v2.png

{
"trackingId": "XQ10245122561286432",
"requestedDate": {
"clazz": "de.lobster.scm.utils.date.DateRange",
"timeZone": "Africa/Cairo",
"start": "1593993600000",
"end": "1593993600000"
},
"confirmedDate": null,
"cne": {
"clazz": "java.lang.Long",
"value": "4402"
}
}

Der Button "RESET" wurde geklickt:

  • Die Formularelemente innerhalb des (unsichtbaren) Containers "Details" zeigen dieselben Werte wie nach dem Öffnen des Portals (s. erster Schritt).

  • Das Feld "trackingId" zeigt immer noch die eingegebene Zeichenfolge.

Es sieht also so aus, als hätte der Button "RESET" über die Leere Elementdaten setzen-Aktion die gewünschte Wirkung erzielt und nur die "Details" zurückgesetzt.

Das ist allerdings ein Trugschluss, wie ein Blick auf die Formulardaten belegt!

images/download/attachments/189434830/image-2023-8-1_7-25-39-version-1-modificationdate-1729152132863-api-v2.png

{
"trackingId": "XQ10245122561286432",
"requestedDate": {
"clazz": "de.lobster.scm.utils.date.DateRange",
"timeZone": "Africa/Cairo",
"start": "1593993600000",
"end": "1593993600000"
},
"confirmedDate": null,
"cne": {
"clazz": "java.lang.Long",
"value": "4402"
}
}

Die bisher blau dargestellten Formulardaten für Elemente im Container "Details" weichen jetzt von den aktuellen Werten im Container ab und werden deshalb rot dargestellt.
Für die vermeintlich "zurückgesetzten" Datenfelder beinhalten die Formulardaten immer noch die Werte aus dem vorherigen Schritt.

Im Textfeld "trackingId" wurde eine geänderte Zeichenfolge eingegeben:

  • Die Formulardaten für das Feld "trackingId" spiegeln die Änderung weiterhin, was den falschen Eindruck verstärken kann, dass der "RESET" erfolgreich funktioniert.

  • Die Daten für Elemente im "Details"-Container weichen immer noch von den Formulardaten ab, die hier deshalb rot dargestellt werden.

images/download/attachments/189434830/image-2023-8-1_7-38-34-version-1-modificationdate-1729152132855-api-v2.png

{
"trackingId": "XQ123456789",
"requestedDate": {
"clazz": "de.lobster.scm.utils.date.DateRange",
"timeZone": "Africa/Cairo",
"start": "1593993600000",
"end": "1593993600000"
},
"cne": {
"clazz": "java.lang.Long",
"value": "4402"
}
}

Was ist passiert?

  • Da die Aktion Leere Elementdaten setzen hier auf einen Container angewendet wurde, dem kein eigenes Datenfeld zugeordnet ist, zerstört die Aktion die Verbindung der Formularelemente innerhalb des Containers zu den Formulardaten.

  • Formularelemente im "geleerten" Container funktionieren oberflächlich einwandfrei, haben aber keinen Einfluss mehr auf die Formulardaten.

  • Formularelemente außerhalb des "geleerten" Containers stehen weiter wie gewohnt in Beziehung zu den Formulardaten.

Abhilfe:

  • Man kann dem Container "Details" ein Datenfeld (details) zuordnen. Dann bezieht sich die Aktion Leere Elementdaten setzen auf dieses Datenfeld, weil es mit "Details"-Element verknüpft ist.

    • Die Aktion löscht dann alle Daten im details-Feld, auch Daten in Feldern, die im Portal überhaupt nicht durch Formularelemente repräsentiert sind, aber bereits beim Öffnen in den Formulardaten enthalten waren.

    • Liegen Formularelemente im Container vor, werden deren Standardwert-Zuweisungen für Datenfelder berücksichtigt, wenn die Option Keine Standardwerte anwenden abgewählt ist.

    • Natürlich taucht das Datenfeld (details) dann auch als Objekt ("details":{ ... }) in der Struktur der Formulardaten auf und fasst die zugehörigen Elementdaten zusammen.

  • Alternativ könnte man auch die Verknüpfung für das Zielelement entfernen. Dann bezieht sich die Aktion Leere Elementdaten setzen auf das gesamte Formular.

    • Die Aktion erzeugt dann ein komplett neues "Client-Objekt" und weist dieses als Formulardaten (formData) zu. Dabei werden alle Formularelemente mit diesem neuen Datenobjekt verknüpft.

    • Wenn die Option Keine Standardwerte anwenden abgewählt ist, werden außerdem die für Formularelemente ggf. definierten Standardwerte gesetzt.

    • Die Eingabe für das Textfeld "trackingId" geht dabei natürlich auch verloren. Im Beispiel erscheint stattdessen der als Standardwert hinterlegte Text "XQ".

Komplexerer Anwendungsfall

Im Anwendungsfall aus dem vorherigen Beispiel soll das Portal zusätzliche Anforderungen erfüllen:

Neben den oben gezeigten "Details" zum Versand sollen noch einige spezifische Merkmale für den Inhalt der Sendung als Kennzeichen (flags) aus-/abwählbar sein:

  • "Gefahrgut" (danger)

  • "Biologische Gefahren" (bioHazard)

  • "Tiertransport" (livestock)

  • "Mehrweg-Verpackung" (returnable)

  • "Versicherung" (insurance)

Im Screenshot rechts werden wiederum die Namen der Datenfelder als Beschriftung angezeigt.

Im JSON-Abbild der Formulardaten (ganz rechts) sind die Daten der in einem Feld/Objekt flags zusammengefassten Kennzeichen blau hervorgehoben.

Das Kennzeichen "Versicherung" (insurance) soll per Standard ausgewählt sein. Alle anderen abgewählt.

images/download/attachments/189434830/image-2023-8-1_17-28-40-version-1-modificationdate-1729152132852-api-v2.png

{
"details": {
...

},
"flags": {
"insurance": true,
"danger": null,
"bioHazard": true,
"livestock": true, "returnable": false,

},
"trackingId": "XQ123456789"
}

Wie im Screenshot zu sehen, soll das Portal stufenweise zurückgesetzt werden können:

  • Der "RESET"-Button ganz oben soll das Portal insgesamt zurücksetzen.

  • Der "RESET"-Button links neben dem Tab Panel (Registerkarten)-Element soll die Inhalte der Tabs für "details" und "flags" zurücksetzen.

  • Der "RESET"-Button im "flags"-Tab soll exklusiv die in diesem Reiter verfügbaren Kennzeichen zurücksetzen.

Konfiguration:

Wie im vorherigen Beispiel ausgeführt, sollte die Aktion Leere Elementdaten setzen auf Element Container angewendet werden, wenn sich diese über ein Datenfeld mit einem Datenobjekt in Beziehung stehen, dessen Daten "gelöscht" und danach ggf. mit Standardwerten aus den Formularelementen im Container angereichert werden sollen.

  • Wie die oben dargestellten Foromulardaten zeigen, existiert neben dem Feld "details" (s. vorheriges Beispiel) ein Feld "flags", das alle Kennzeichen als Boolean-Felder in einem Objekts zusammenfasst.

  • Offensichtlich existiert kein übergeordnetes Feld/Objekt das "alle Daten im Tab Panel (Registerkarten)-Element" zusammenführt.

Das Verhalten "resetFlags" rechts ist für den Button "RESET ▼" im "flags"-Tab konfiguriert:

  • Wie für einen Button üblich wird auch hier der Auslöser Angeklickt zugewiesen.

  • Das Verhalten Statisch (mit der Option "true") sorgt auch hier dafür dass die Aktionen bei "wahr" bedingungslos ausgeführt werden.

  • Die Aktion Leere Elementdaten setzen bezieht sich auf das Tab-Element "flags" als Zielelement. Die Option Keine Standardwerte anwenden ist wie im ersten Beispiel abgewählt.

HINWEIS◄ Der Screenshot zeigt die Standardwerte für die Checkbox-Elemente im "flags"-Tab:

  • Die "insurance" -Checkbox ist "ON".

  • Alle anderen sind per Standard "OFF".


images/download/attachments/189434830/image-2023-8-1_18-0-46-version-1-modificationdate-1729152132850-api-v2.png

Solange kein übergeordnetes Datenfeld für alle Daten im Tab Panel (Registerkarten)-Element existiert, muss das "Zurücksetzen" der beiden Tabs so gelöst werden:

Das Verhalten "resetFlags" rechts ist für den Button "RESET ►" links neben dem Tab Panel (Registerkarten)-Element bekonfiguriert:

  • Wie für einen Button üblich wird auch hier der Auslöser Angeklickt zugewiesen.

  • Das Verhalten Statisch (mit der Option "true") sorgt auch hier dafür dass die Aktionen bei "wahr" bedingungslos ausgeführt werden.

  • Die Aktion Leere Elementdaten setzen wird hier zwei Mal mit unterschiedlichen Zielelement-Verknüpfungen beansprucht, um jeden Tab individuell "zurückzusetzen". In beiden Fällen wird die Option Keine Standardwerte anwenden abgewählt.

ANMERKUNG◄ Vereinfachen ließe sich das Vorgehen nur, indem ein übergeordnetes Datenfeld adressiert wird. Dann würde dieses aber auch zwangsläufig in der Datenstruktur der Formulardaten auftauchen.

Anstelle des zweiten Aufrufs der Aktion Leere Elementdaten setzen könnte man auch über eine Verhalten ausführen-Aktion das Verhalten "resetFlags" aufrufen. Dann wäre sichergestellt, dass für das Zurücksetzen der Flags in beiden Fällen zuverlässig dieselbe Logik (etwa für die Option Keine Standardwerte anwenden) greift.

images/download/attachments/189434830/image-2024-10-30_15-45-18-version-1-modificationdate-1730299517563-api-v2.png

Laufzeitbeispiel:

images/download/attachments/189434830/image-2023-8-1_17-28-40-version-1-modificationdate-1729152132852-api-v2.png







─ Klick ─►

images/download/attachments/189434830/image-2023-8-1_18-9-23-version-1-modificationdate-1729152132847-api-v2.png

{
"details": {
"requestedDate": {
"clazz": "de.lobster.scm.utils.date.DateRange",
"timeZone": "Africa/Cairo",
"start": "1691013600000",
"end": "1691013600000"

}
},
"flags": {
"insurance": true
},
"trackingId": "XQ123456789"
}

Der Klick auf den "RESET"-Button im "flags"-Tab setzt exklusiv die Daten des "flags"-Felds zurück, während die Daten im "details"-Feld und die "trackingId" erhalten bleiben.

Noch komplexerer Anwendungsfall

Der Anwendungsfall aus dem vorherigen Beispiel soll nun noch "komplizierter" gemacht werden, um ein weiteres Konfliktpotenzial im Kontext der Aktion Leere Elementdaten setzen und eine Entschärfungsmöglichkeit aufzuzeigen:

Auf Kopfebene des Portals soll ein zusätzliches Kennzeichen "test" angeboten werden, mit dem signalisiert werden kann, dass es sich bei den Eingaben um Testdaten handelt. Das Merkmal kann z. B. steuern ob bestimmte Schritte in einem ausgelösten Workflow stattfinden oder nicht.

Wie im Screenshot rechts zu sehen, orientiert sich nicht nur die Mimik (Icon und Checkbox mit Darstellungsart "Togglebox") an den Konfigurationen im "flags"-Tab. Auch der Hinweis auf den Datenfeld-Namen "flags.text" in der Beschriftung verdeutlicht, dass das Kennzeichen zusammen mit den anderen im Feld/Objekt "flags" lokalisiert sein soll, obwohl es im Formularkopf platziert ist.

images/download/attachments/189434830/image-2023-8-2_10-17-52-version-1-modificationdate-1729152132839-api-v2.png

{
"details": {
...
},
"flags": {
"test": true,
"insurance": true
},
"trackingId": "XQ"
}

HINWEIS◄ Wie das JSON-Abbild der Formulardaten oben zeigt, erscheint das "test"-Kennzeichen (oben blau hervorgehoben) wie gewünscht zusammen mit den anderen Kennzeichen im "flags"-Feld, wenn es wie im Bild ausgewählt bzw. "eingeschaltet" wird.

Die Erweiterung scheint zunächst wie gewünscht zu funktionieren. Der Einsatz der Aktion Leere Elementdaten setzen innerhalb des "flags"-Tabs wirft allerdings dann doch kritische Fragen auf:

  • Wird das "test"-Kennzeichen gelöscht, wenn der Button "RESET ▼" im "flags"-Tab betätigt wird?

  • Wird die Beziehung zwischen den Formulardaten und dem Checkbox-Element im Kopf durch das Zurücksetzen beschädigt?

  • Wird ein Standardwert (ON) für das Checkbox-Element gesetzt, wenn der Button "RESET ▼" im "flags"-Tab die Aktion Leere Elementdaten setzen mit abgewählter Funktion Keine Standardwerte anwenden ausführt?

Wir klären das nachfolgend Schritt für Schritt:

Laufzeitbeispiel:

images/download/attachments/189434830/image-2023-8-2_10-17-52-version-1-modificationdate-1729152132839-api-v2.png

Ausgangssituation:

  • Dem "test"-Kennzeichen ist der Standardwert "Ausgewählt" zugewiesen.

  • Im "flags"-Tab ist nur das "insurance"-Kennzeichen ausgewählt. Dies entspricht unserem Standardzustand, der auch nach einem "RESET" erwartet wird.

Ein Klick auf den Button "RESET ▼" im "flags"-Tab ändert in dieser Situation nichts am Erscheinungsbild des Portals.

JSON-Abbild der Formulardaten nach dem "RESET":

{
"details": {
... },
"flags": {
"insurance": true
},
"trackingId": "XQ"
}


WICHTIG

  • Die Aktion Leere Elementdaten setzen weist dem "flags"-Feld ein neues "leeres" Datenobjekt mit dem Standardwert (true) für das "insurance"-Kennzeichen zu. Dadurch wird auch das "test"-Flag aus den Formulardaten gelöscht.

  • Die Checkbox außerhalb des "flags"-Tabs wird durch die Aktion weder aktualisiert noch wird ihr Standardwert berücksichtigt.

Der entstandene "Schiefstand" zwischen der Anzeige der "test"-Checkbox und den Formulardaten, behebt sich nicht von selbst:

  • Das Datenfeld verweist auf "flags.test" und würde den aktuellen Wert (false/null) aus den "zurückgesetzten" Daten für das flags-Feld/Objekt ziehen, wenn das Checkbox-Element überhaupt "fragen" würde.

  • Interaktiv könnte man die Checkbox ausschalten. Dann wären das Checkbox-Element und die Formulardaten wieder synchron. Aber dem Anwender sollte man diesen Schritt sicher nicht überlassen.

Abhilfe:

Um sicherzustellen, dass nach einem "RESET" im "flags"-Tab auch alle Formularelemente außerhalb des Tabs die dadurch geänderten Formulardaten berücksichtigen, sollte direkt nach der Aktion Leere Elementdaten setzen die Aktion Elementdaten neu laden ausgeführt werden:

  • Als Zielelement verknüpfen wir hier explizit das gesamte Formular.

  • Die Option Keine Standardwerte anwenden ist hier abgewählt, damit leeren Feldern ggf. definierte Standardwerte zugewiesen werden.

WICHTIG◄ Die Zuweisung von Standardwerten betrifft alle Formularelemente, die sich auf Datenfelder beziehen, für die die Formulardaten keinen Wert ($null) beinhalten und nicht etwa nur die durch die vorherige Aktion "geleerten". Insofern gibt es sicher auch Szenarien, in denen es sinnvoll sein kann die Option Keine Standardwerte anwenden in beiden Aktionen unterschiedlich zu behandeln.

images/download/attachments/189434830/image-2024-11-7_10-41-54-version-1-modificationdate-1730972513190-api-v2.png