Wiederholendes Element
Ein Wiederholendes Element Container dient dazu, homogene Daten in Listenstrukturen zu erfassen.
In Erfassungsmasken für Geschäftsobjekte steht dieses Element nicht direkt zur Verfügung, da die Datenstruktur hier bereits durch die verfügbaren Sektionen vordefiniert ist (Stichwort "Datenintegrität").
"Wiederholende Elemente", die aufgrund der Datenstruktur von Geschäftsobjekten in Erfassungsmasken erscheinen (z. B. "Positionen" oder plurale Attribute in Sendungen), verhalten sich aber wie hier beschrieben.
Das "Wiederholte Element" wird innerhalb des Wiederholendes Element Containers definiert und kann dann zur Laufzeit über das Symbol
dupliziert werden. Jede angezeigte duplizierte Struktur repräsentiert einen Eintrag in der Liste.
►HINWEIS◄ Ein Wiederholendes Element kann mit Hilfe des Gefüllt-Verhaltens insgesamt auf die Zustände "leer" (Ausführen von Aktionen bei "falsch") oder "gefüllt" (Ausführen von Aktionen bei "wahr") geprüft werden.
Laufzeit-Beispiel
Der Screenshot zeigt ein einfaches Format für die Eingabe von Positionen in einer Sendung. Links neben den vier Eingabefeldern wurde hier ein Bild platziert, das ebenfalls wiederholt wird.
Konfiguration
Folgende Eigenschaften können für einen Wiederholendes Element Container konfiguriert werden:
Die Einstellungen für Min. Einträge / Max. Einträge definieren Grenzen für die Anzahl der Einträge im Container. 0 oder leer deaktiviert die jeweilige Einschränkung.
►WICHTIG◄ Die Einstellung für Max. Einträge wird beim Laden der Daten ignoriert und betrifft nur die Erfassung zusätzlicher Einträge. Die Einhaltung dieser Obergrenze ist kein Validierungskriterium, das Objekt kann also auch mit "überzähligen" Einträgen im Container gespeichert werden. Enthält ein Container weniger Einträge, als per Min. Einträge gefordert, werden in der Maske zusätzliche (leere) Instanzen des wiederholten Elements eingeblendet. Solange dieses keine Pflichtfelder oder etwa schreibgeschützte Felder mit Standardwerten enthält, wirkt auch die Untergrenze nicht als Validierungskriterium und das Objekt kann auch mit "zu wenigen" Einträgen im Container gespeichert werden.
Die Optionen Hinzufügen durch Benutzer erlauben und Entfernen durch Benutzer erlauben bestimmen, ob die Symbole
und
zur Laufzeit im Formular erscheinen. Die Sichtbarkeit kann auch zur Laufzeit über die Aktion Hinzufügen/Entfernen erlauben gesteuert werden. Wenn die Symbole ausgeblendet sind, können Elemente mit den Aktionen Element hinzufügen (Optionales/Wiederholendes Element) und Element entfernen (Optionales/Wiederholendes Element) hinzugefügt oder entfernt werden.
►HINWEIS◄ Ist für die Parameter Min. Einträge / Max. Einträge derselbe Wert (>0) eingestellt, werden die Symbole
und
nicht beide inaktiv dargestellt, sondern sie werden komplett unsichtbar, sobald die Anzahl der Einträge diesem Wert entspricht.
Über die Einstellung Schablone anzeigen, wenn leer kann gesteuert werden, ob eine Schablone des wiederholbaren Elements angezeigt wird, wenn keine Einträge vorhanden sind (Standard).
Eine Verknüpfung unter Synchronisiertes numerisches Element synchronisiert das verknüpfte numerisches Eingabefeld (bzw. Textfeld) mit der Anzahl der Wiederholungen im Container.
►WICHTIG◄ Diese Verknüpfung funktioniert bidirektional, was bedeutet, dass numerische Einträge in das verknüpfte Feld die Anzahl der Wiederholungen für das Wiederholende Element einstellen.
Wird die Anzahl erhöht, erscheinen neue Wiederholungen. Beim Reduzieren der Anzahl der Wiederholungen gehen ggf. bestehende Inhalte verloren!
Entsprechende Manipulationen können auch zur Automatisierung genutzt werden, um Einträge zu löschen oder eine bestimmte Anzahl von Wiederholungen einzublenden.
Soll der Anwender das verknüpfte Zählfeld durch direkte Interaktion befüllen können, sind Grenzwerte für die Anzahl (über "Min. Einträge", "Max. Einträge") zu empfehlen, weil sonst unbeabsichtigt sehr große Anzahlen von Wiederholungen erzeugt werden könnten. Generell sollte der Direktzugriff auf das synchronisierte Element entweder sehr restriktiv gehandhabt oder komplett ausgeschlossen werden.
Unter Feld für Änderungshinweis (exklusiv für Portale) kann der Name eines Datenfelds angegeben werden, über das formularseitige Änderungsoperationen (create, update, delete ) je Instanz des wiederholten Elements deklariert werden sollen. Details werden im Abschnitt "Änderungshinweise" (unten) erläutert.
Die Einstellungen Darstellungsoption und Page Größe sind nur verfügbar, wenn am Ende der Eigenschaften-Rubrik "Allgemein" die Darstellungsart "Grid" (s. folgender Abschnitt) ausgewählt wird.
Die Darstellungsoption mit den Auswahlmöglichkeiten Details oben, Details unten und Nur Datengrid bestimmt, ob und ggf. wo zusätzlich zum Datengrid ein Detailbereich angezeigt wird (s. u.).
Die Page Größe gibt an, mit welcher Anzahl Elemente pro Seite das Grid aufgeteilt werden soll. 0 oder leer deaktiviert die Seitenaufteilung.
Darstellungsart "Grid"
Mit der Darstellungsart "Grid" erscheinen die Einträge eines Containers als Zeilen in einem Datengrid, also als Listenformat mit den in Lobster Data Platform / Orchestration üblichen Funktionen zum Sortieren, Filtern, Exportieren usw.
Die in der Liste angebotenen Spalten werden aus den im Container enthaltenen Elementen abgeleitet, soweit diese eine Darstellung als Spalte unterstützen.
Solche Elemente stellen weitere Konfigurationsmöglichkeiten für die Spalte, in der gleichnamigen Eigenschaften-Rubrik, zur Verfügung. Die Verfügbarkeit der Spaltenbezogenen Eigenschaften hängt dabei von der Option "Als Spalte anzeigen" ab:
Einstellung |
Wirkung |
Als Spalte anzeigen |
Gibt an, ob das Element überhaupt als Spalte im Grid zur Verfügung stehen soll |
Sichtbarkeit der Spalte |
Bietet mehrere Möglichkeiten wie sich die Sichtbarkeit dieser Spalte verhalten soll (nur wenn "Als spalte anzeigen" aktiviert ist)
Zusätzlich können Spalten auch über das Optionsmenü des Grids (rechts oben) temporär (un)sichtbar geschaltet werden, was der Benutzer dann auf selbem Wege wieder ändern kann.
|
Spaltenbreite |
Definiert die Breite der Spalte entweder prozentual oder im Pixelmaß. |
Textausrichtung |
Legt die Ausrichtung des Text in einer Zelle der Spalte fest (linksbündig, zentriert oder rechtsbündig) |
Überschrift - Wortumbruch |
Legt fest wie Wörter im Spaltenkopf umbrechen
|
Wortumbruch |
Legt fest wie Wörter in einer Spaltenzelle umbrechen (Optionen analog zu Überschrift - Wortumbruch) |
Beschriftungsausdruck |
Ein Ausdruck, welcher die Beschriftung einer Spaltenzelle errechnet. Der Eingabewert ist dabei der Wert des Elements. |
CSS-Klassenausdruck |
Ein Ausdruck, welcher den CSS Klassennamen eines Spaltenzellen HTML Elements bestimmt. |
Abhängig von der Auswahl für die Darstellungsoption kann oberhalb oder unterhalb des Datengrids ein Detailbereich angezeigt werden, der im Unterschied zum Grid auch Bearbeitungen ermöglicht.
Laufzeit-Beispiel
Ausgehend vom obigen Beispiel für die Positionen einer Sendung ergibt sich beim Umschalten der Darstellungsart auf "Grid" das folgende Bild:
Im Datengrid (2) erscheinen die vier Eingabefelder als Spalten und zeilenweise die Daten der einzelnen Positionen. Das Bild-Element mit dem Paket-Icon erscheint im Grid nicht als Spalte.
Oberhalb des Datengrids wird hier ein Detailbereich (1) angezeigt, der die Daten des im Grid ausgewählten Eintrags in der vollständigen Struktur des wiederholten Elements - hier inkl. Bild-Element - wiedergibt.
Der Detailbereich ermöglicht ggf. abhängig von den Einstellungen innerhalb des wiederholten Elements auch das Bearbeiten der Daten und über die Schaltflächen Neu und Entfernen das Hinzufügen und Löschen von Einträgen (analog
und
).
Per Darstellungsoption (siehe Eigenschaften) kann eine der folgenden Varianten für die Darstellung des Grids gewählt werden:
Darstellungsoption |
Effekt |
Nur Datengrid |
►HINWEIS◄ Ohne Darstellung des Detailbereichs ist auch kein Schreibzugriff auf die Inhalte des Grids oder die Einträge gegeben. |
Details oben |
|
Details unten |
|
Details rechts |
|
Details links |
|
Änderungshinweise
Wenn Portale über einen Wiederholendes Element Container interaktive Änderungen an "Listendaten" ermöglichen, muss der im Formular sichtbare Bearbeitungsstand der "Liste" anschließend meistens mit einer externen Datenquelle oder Verarbeitungslogik "abgestimmt" werden, etwa indem die Daten des Wiederholendes Element Containers oder die gesamten Formulardaten an ein Profil oder eine Ereignisbehandlung übergeben werden.
Damit die ausgelösten Mechanismen - etwa zum Persistieren oder Synchronisieren der "Listendaten" - möglichst flexibel, elegant und effizient ausgestaltet werden können, bietet der Wiederholendes Element Container die Möglichkeit über den Konfigurationsparameter Feld für Änderungshinweis ein Datenfeld für das wiederholte Element zu benennen, in dem bei bestimmten Bearbeitungsschritten im Formular automatisch ein Änderungshinweis als Textwert eingetragen wird:
automatisch zugewiesener Änderungshinweis |
Bedeutung für die betreffende Instanz des wiederholten Elements ("Zeile"): |
created |
Die Instanz wurde im Formular neu hinzugefügt und danach ggf. bearbeitet. |
updated |
Die Instanz wurde im Formular ausgehend von einem Stand bearbeitet, für den der Änderungshinweis nicht "created" lautete. |
deleted |
Die Instanz wurde im Formular gelöscht (und vorher hinzugefügt oder geladen und ggf. bearbeitet) |
Wenn z. B. ein Profil oder eine Ereignisbehandlung nach einem Aufruf mit den Daten aus einem Wiederholendes Element Container ausgeführt wird, kann es durchaus sinnvoll sein, Wertzuweisungen für das Änderungshinweis-Feld in bestimmten "Zeilen" vorzunehmen und diese zusammen mit anderen Daten an das Formular zurückzugeben. Dafür kommen beliebige Textwerte oder auch "kein Wert" ($null) in Frage. Es können aber auch die vordefinierten Werte für Änderungshinweise (s. Tabelle oben) verwendet werden. Dabei sind folgende Zusammenhänge zu berücksichtigen:
Solange für eine Instanz der Änderungshinweis created gilt, wird bei Änderungen im Formular der Wert updated nicht automatisch gesetzt.
Eine Instanz mit dem Änderungshinweis deleted erscheint nicht sichtbar im Formular, bleibt allerdings in den Formulardaten enthalten.
►ACHTUNG◄ Das als Feld für Änderungshinweis verknüpfte Datenfeld sollte keinem Formularelement zugewiesen werden, da sonst ein automatisch generierter Änderungshinweis eventuell durch dessen Wert übersteuert wird.
►ACHTUNG◄ Falls ein Wiederholendes Element Container als Einträge Entitäten mit einer vordefinierten Datenstruktur enthält, kann nicht einfach ein beliebiges zusätzliches Feld als Feld für Änderungshinweis definiert werden. Schließlich müssen die Daten im Listeneintrag insgesamt gegen das Datenmodell für den betreffenden Entitätstyp geparst werden können. Ist das Feld für Änderungshinweis für einen verwendeten Entitätstyp nicht definiert, wird zwar oberflächlich ein Änderungshinweis zugeordnet, wird aber beim Validieren des Containers nicht wiedergegeben. Das folgende Szenario illustriert den Zusammenhang:
In einem Portal liefert eine Suche (Formulardesigner) eine Liste von Firmen, die per Elementdaten setzen einem Wiederholendes Element Container als Einträge zugeordnet werden.
Für diesen Wiederholendes Element Container ist ein Feld changeStatus als Feld für Änderungshinweis benannt, das in der Datenstruktur für die Firma nicht enthalten ist.
Wird im Portal eine der aufgelisteten Firmen entfernt, dann verschwindet der entsprechende Eintrag aus der Liste in der Oberfläche. Im Hintergrund wird dem Feld changeStatus der Wert deleted zugewiesen.
Beim Lesezugriff auf die Listeneinträge wird der per Feld changeStatus als deleted gekennzeichnete Eintrag gegen das Datenmodell für Firmen geparst. Dabei geht die Information aus dem changeStatus-Feld verloren. Effektiv ist anhand der Daten für den Eintrag nicht mehr feststellbar, dass der Eintrag gelöscht wurde, obwohl er im Formular "verschwunden" ist.
Ggf. kann man ein im Kontext des Portals nicht relevantes Textfeld aus dem Datenmodell des Firmenkontos (oder z. B. der darin referenzierten Firmenadresse) als Feld für Änderungshinweis "umnutzen", dessen Wert dann ggf. durch den Text für den Änderungshinweis überschrieben wird.
►ANMERKUNG◄ Mit einer Tupel Suche (Formulardesigner), die im Ergebnis "erweiterbare" Client-Objekte anstelle von Entitäten auflistet, kann diese Problematik elegant vermeiden werden. Allerdings erfordert dann z. B. ein Zugriff auf die zugehörigen Entitäten zum Aktualisieren von Daten größeren Aufwand.
Einsatzbeispiel
In einem Portal dient zur Erfassung einer mehrteiligen Flugroute ein Wiederholendes Element Container, in dem zunächst eine Reihe von ICAO-Kennungen der angeflogenen Airports eingetragen wird.
Wenn eine entsprechende Route zusammengestellt ist, soll die Route per Button "Synchronisieren" an ein Planungssystem übergeben werden, das jeden Wegpunkt registriert und dabei über einen Nummernkreis eine eindeutige Kennung zuwiest. Diese wird zusammen mit anderen aktuellen Informationen zum Wegpunkt an das Portal zurückgegeben und soll dort im Datenfeld extID erscheinen. Die Kommunikation könnte über einen synchronen Profilaufruf (per Aktion Profil aufrufen) erfolgen.
Damit Änderungen an einer bereits registrierten Route spezifisch behandelt werden können, wird für den Wiederholendes Element-Container als Feld für Änderungshinweis ein Datenfeld "CUD" (für Create, Update, Delete) angegeben. Im Profil wird sinngemäß die folgende Verarbeitungslogik über den Änderungshinweis gesteuert:
Änderungshinweis |
Aktion im Planungssystem |
Rückmeldung ans Portal |
CUD: created |
Registrierung des Wegpunkts |
CUD: created_okextID: (Nummernkreiswert) aktuelle Informationen zum Wegpunkt (...) |
CUD: updated |
Aktualisierung des Wegpunkts |
CUD: updated_okextID: (unverändert) aktuelle Informationen zum neuen Wegpunkt (...) |
CUD: deleted |
Löschen des Wegpunkts |
Wegpunkt entfernt |
In den folgenden konkreten Beispielen wird der aktuelle Änderungshinweis je Zeile per Label vor dem
/
Symbolen visualisiert:
Änderungshinweis |
Beispiel vor Synchronisation |
Beispiel nach Synchronisation |
CUD: created |
|
|
CUD: updated |
|
|
CUD: deleted |
Struktur-Export: { "div" : { "clazz" : "list" , "data" : [ { "p" : { "CUD" : "created_OK" , "ADICAO" : "EDDM" , "extID" : "#04E8E" } }, { "p" : { "CUD" : "updated_OK" , "ADICAO" : "LOWS" , "extID" : "#04E90" } }, { "p" : { "CUD" : "deleted" , "ADICAO" : "EDDS" , "extID" : "#04E8F" } } ] } } |
Struktur-Export: { "div" : { "clazz" : "list" , "data" : [ { "p" : { "CUD" : "created_OK" , "ADICAO" : "EDDM" , "extID" : "#04E8E" } }, { "p" : { "CUD" : "updated_OK" , "ADICAO" : "LOWS" , "extID" : "#04E90" } } ] } } |