Elementdaten setzen
Siehe auch: Wert setzen, Leere Elementdaten setzen
Die Aktion Elementdaten setzen setzt die als $input anliegenden Eingabedaten als Elementdaten für ein bestimmtes Zielelement bzw. das gesamte Formular.
Ist kein Zielelement verknüpft, gilt das gesamte Formular als Zielelement.
Ist ein Zielelement verknüpft, werden die Elementdaten für dieses Element gesetzt.
Im Unterschied zur grundsätzlich verwandten Aktion
"Wert setzen", die ausschließlich Zuweisungen einzelner Feldwerte ermöglicht, dient die Aktion Elementdaten setzen
meist dazu, komplexe Datenstrukturen auf ein bestimmtes Zielelement zu übertragen.
Häufig ist dabei als Zielelement ein Element Container verknüpft, der als "Kindelemente" weitere Formularelemente mit Datenfeld-Zuordnung enthält, in denen konkrete Feldwerte aus den zugewiesenen Daten erscheinen sollen. Diese Vorgehensweise ist u. a. für den Transfer von Daten beim Formulare einbetten (Sub-Formulare) nützlich. Allerdings eignet sich als Zielelement für die Aktion Elementdaten setzen auch das Variable-Element, wenn Datenobjekte nur "deponiert" werden sollen, ohne Inhalte zu visualisieren.
Konfigurationsoptionen:
Option |
Beschreibung |
Ignoriere Datenfeld |
Ist diese Option gesetzt, wird das für das Zielelement optional definierte "Datenfeld" beim Zuordnen der Eingabedaten ignoriert. Ist die Option nicht gesetzt, muss das für ein Zielelement optional definierte "Datenfeld" in den Eingabedaten benannt sein, damit Daten zugeordnet werden. |
Keine Standardwerte anwenden |
Diese Option ist per Standard gesetzt, so dass im Zielelement enthaltene Elemente effektiv geleert werden, sofern aus den Eingabedaten kein Wert zugewiesen wird. Ist die Option nicht gesetzt, dann werden alle im Zielelement enthaltenen Elemente, gemäß Formulardesign mit Standardwerten belegt, sofern aus den Eingabedaten kein Wert zugewiesen wird. |
In Originaldaten einbinden |
Diese Option ist per Standard nicht gesetzt, so dass ein Zielelement ohne Datenfeld durch das Setzen von Elementdaten vom übergeordneten Datenobjekt mit den Originaldaten entkoppelt wird (Details siehe Fall 2, unten). Ist diese Option gesetzt, werden die Eingabedaten auf ein Zielelement ohne Datenfeld nicht direkt angewendet, sondern auf die übergeordneten Originaldaten abgebildet (Details siehe Fall 3, unten). ►HINWEIS◄ Das Setzen dieser Option aktiviert die Option Als Kopie automatisch. |
Als Kopie |
Diese Option ist per Standard nicht gesetzt, so dass beim Setzen der Elementdaten die Werte aus den Eingabedaten nicht automatisch kopiert werden. Ist die Option gesetzt, dann werden Werte aus den Eingabedaten automatisch als Kopie zugewiesen, um auszuschließen, dass Zugriffe auf Daten im Zielelement auf das Original durchschlagen. ►HINWEIS◄ In Verbindung mit der Option In Originaldaten einbinden ist diese Option automatisch ausgewählt. |
Anwendungsfälle für die Aktion "Elementdaten setzen"
Das "Rangieren" von potenziell komplexen Datenobjekten in einem Formular stellt einerseits ein großes operatives Potenzial dar. Andererseits erfordert der erfolgreiche Einsatz der vergleichsweise harmlos wirkenden Aktion Elementdaten setzen vor diesem Hintergrund ein angemessenes Verständnis für das Zusammenspiel von Formulardaten und Formularelementen. Die angebotenen Konfigurationsoptionen müssen abhängig von der Zielsetzung und den genauen Einsatzbedingungen (beteiligte Elemente, Formulartypen und Datenobjekte) "passend" eingesetzt werden, damit eine Konfiguration robust arbeitet und zuverlässig die gewünschten Ergebnisse liefert. An dieser Stelle kann die kombinatorische Vielfalt der denkbaren Anwendungsmöglichkeiten unter Berücksichtigung spezifischer Problematiken und Eventualitäten nicht erschöpfend abgehandelt werden.
Nachfolgend werden deshalb einige typische Anwendungsfälle anhand konkreter Szenarien vorgestellt, um die Verwendung der Konfigurationsoptionen zu demonstrieren und die Wirkungsprinzipien der Aktion zu verdeutlichen.
Fall 1: Ein Container bezieht sich auf ein Datenfeld, das mit den gesetzten Daten aktualisiert werden soll.
Soweit für das Zielelement bis zum Ausführen der Aktion zur Laufzeit eine intakte "Objektbeziehung" (z. B. zu den Formulardaten) besteht, aktualisiert die Aktion den Inhalt dieses Datenfelds ohne diese Beziehung zu beeinträchtigen.
Einem Zielelement, für das ein Datenfeld definiert ist, werden dabei Detaildaten aus den Eingabedaten nach folgenden Regeln zugewiesen:
Ist die Option Ignoriere Datenfeld nicht gesetzt (Standard), dann werden dem Zielelement nur Daten zugewiesen, die sich in den Eingabedaten ausdrücklich auf dieses Datenfeld beziehen.
Ist die Option Ignoriere Datenfeld gesetzt, dann werden die Eingabedaten insgesamt als Detaildaten des Zielelements zugewiesen. Dessen Datenfeld wird also bei der Zuweisung "ignoriert".
In beiden Fällen zeigen im Zielelement enthaltene "Kindelemente" nur dann Werte aus den zugewiesenen Daten an, wenn deren Datenfeld-Definition der zugewiesenen Datenstruktur entspricht.
Beispiele:
In einem Formular werden auf einen Container "Person" mit dem Datenfeld person Eingabedaten gesetzt, die Details zu einer bestimmten Person enthalten ohne dass diese unter einem übergeordneten Datenfeld person zusammengefasst sind.
Die Aktion Elementdaten setzen wird mit dem Container "Person" als Zielelement und gesetzter Option Ignoriere Datenfeld ausgeführt. Die Formularelemente "Name" und "Geschlecht" werden ausgefüllt, da die Eingabedaten Werte für deren Datenfelder (name und sex) bereitstellen. Zusätzlich wird dem Datenfeld person aber auch der Wert "4711" im Datenfeld id zugeordnet, dem kein Formularelement entspricht. Dieser Wert bleibt im Formular unsichtbar, wird aber zum Bestandteil der Formulardaten im Datenfeld person.
In der folgenden Variante enthalten die Eingabedaten neben Angaben für das Datenfeld person noch weitere Daten, die aber nicht für das Zielelement "Person" relevant sind. Die Aktion Elementdaten setzen wird deshalb ohne die Option Ignoriere Datenfeld ausgeführt, so dass nur die Daten für das Datenfeld person in das Formular und die Formulardaten übernommen werden. Das Ergebnis ist deshalb identisch mit der ersten Variante.
Fall 2: Ein Container ohne eigenes Datenfeld soll die gesetzten Daten entkoppelt vom übergeordneten Datenobjekt verwenden.
Wenn die Option In Originaldaten einbinden nicht gesetzt ist, führt das Setzen von Elementdaten für einen Container ohne eigenes Datenfeld dazu, dass die Verbindung der enthaltenen "Kindelemente" mit Datenfeld zum übergeordneten Datenobjekt (z. B. den Formulardaten) entkoppelt wird.
Konkret wird der Container dabei mit einem "neuen" Datenobjekt verknüpft, das ab diesem Zeitpunkt den Datenkontext für die enthaltenen "Kindelemente" darstellt. Dieses Datenobjekt wird aber nicht etwa seinerseits in das übergeordnete Datenobjekt eingebettet, dem zuvor diese Rolle zu kam.
Zuweisungen an die im entkoppelten Container enthaltenen Formularelemente sind ab diesem Zeitpunkt in Bezug auf die entsprechenden Felder in den "Originaldaten" das ursprünglich übergeordneten Datenobjekts wirkungslos. Sie betreffen nur noch den Kontext des neu eingeführten Datenobjekts, dessen Inhalt allerdings nicht Bestandteil der Formulardaten ist. Diese Entkopplung kann auch nicht mehr rückgängig gemacht werden. ohne die Formulardaten komplett neu zu laden.
Trotzdem ist dieser Anwendungsfall praxisrelevant, weil die in den Container gesetzten Daten auch ohne Bezug zu den Formulardaten auf vielfältige Weise "nützlich" sein können.
Beispiel:
In einem Formular soll eine Vorauswahl von Personen, die als "Kandidaten" bezeichnet werden, in einem Wiederholendes Element aufgelistet werden, ohne dass diese Liste in den Formulardaten erscheint. Die Formulardaten sollen nur interaktiv ausgewählte "Kandidaten" auflisten, die dazu anschließend per Klick auf einen Button in ein zweites Wiederholendes Element "Teilnehmer" mit dem Datenfeld attendees übertragen werden.
Das folgende Schema bezieht sich nur auf den ersten Schritt, nämlich das Auflisten der "Kandidaten", ausgehend von Eingangsdaten, wie sie z. B. ein Suche (Formulardesigner)-Verhalten bereitstellen könnte, das ausgelöst wird nachdem der Benutzer alle Kriterien für die "Kandidatensuche" ausgefüllt hat. Die Aktion Elementdaten setzen
wird mit dem Wiederholendes Element-Container als Zielelement verknüpft. Die Option In Originaldaten einbinden wird nicht gesetzt. Im Ergebnis bietet der Wiederholendes Element-Container zwar die Kandidaten zur Auswahl an, allerdings ohne dass deren Daten in dem Formulardaten erscheinen, z. B. wenn diese zwecks Terminbestätigung an eine Profil übergeben würden.
►ANMERKUNG◄ Wenn ausgeschlossen werden kann, dass jemals Kandidaten-Daten in den Formulardaten erscheinen sollen, kann das Datenfeld des Wiederholendes Element-Containers auch auf "Überspringen" gesetzt werden. Dies entkoppelt bzw. isoliert den Inhalt des Containers schon von Anfang von den Formulardaten. Allerdings muss dann die Option Ignoriere Datenfeld gesetzt sein, auf die für ein leeres Datenfeld verzichtet werden kann.
Fall 3: Ein Zielelement ohne eigenes Datenfeld enthält Elemente mit Daten, die im übergeordneten Datenobjekt aktualisiert werden sollen.
Wenn die Option In Originaldaten einbinden gesetzt ist, werden die Eingabedaten nicht direkt für das Zielelement gesetzt, so dass dessen Bezug zum übergeordneten Datenobjekt erhalten bleibt. Stattdessen werden die Eingangsdaten soweit passend auf die im Zielelement enthaltenen "Kindelemente" abgebildet, nachdem diese geleert bzw. - bei abgewählter Option Keine Standardwerte anwenden - mit Standardwerten befüllt wurden. Falls die Eingangsdaten Datenfelder enthalten, für die in den "Originaldaten" keine Angaben vorliegen, werden diese dort ergänzt. Das Aktualisieren von Feldern, für die bereits Werte vorliegen, ist allerdings auf Datenfelder beschränkt, auf die sich "Kindelemente" des Zielelements beziehen.
Beispiel:
Ein Formular enthält einen Container "Adresse" mit dem Datenfeld address, das vielfältige Adressmerkmale zusammenfasst. Das Formular verwendet dabei einen untergeordneten Container "Location" ohne eigenes Datenfeld, um die Merkmale "Straße" (street), "PLZ" (zipcode), "Stadt" (city) und "Land" (country) zu gruppieren.
Die als "Location" gruppierten Merkmale können per Button im Formular mit Einträgen in einer Adressdatenbank abgeglichen werden. Sofern diese einen für den Adressaten "passenden" Eintrag liefert, kann dieser auf Wunsch übernommen werden. Dabei liegen die Daten der "Ersatzadresse" als Eingabedaten ($input) aus dem Verhalten an, wenn die Aktion Elementdaten setzen ausgeführt werden soll. Diese bezieht sich auf den Container "Location" als Zielelement mit der Option In Originaldaten einbinden. Da außerdem die Option Keine Standardwerte anwenden gesetzt ist, werden die Daten im Zielelement (Container "Location") zunächst geleert. Anschließend werden die entsprechenden Werte aus den Eingabedaten in den "Location" Container übertragen. Die "Straße" bleibt dabei leer, da für das Datenfeld street keine Angabe aus der Datenbank vorliegt. Der "Name" wird nicht überschrieben, da im Zielelement kein Element mit dem Datenfeld name enthalten ist. Das Datenfeld source in den Eingabedaten ist in den "Originaldaten" des übergeordneten Datenfelds address nicht vorhanden. Es wird diesem daher hinzugefügt, bleibt aber unsichtbar.
►HINWEIS◄ Wenn anschließend mit derselben Methode erneut andere Eingabedaten (mit einem abweichenden Wert für source) als Elementdaten auf dasselbe Zielelement gesetzt werden, wird das Datenfeld source nicht aktualisiert, weil es nicht mit einem Element im "Location" Container in Beziehung steht.