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 images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/add.svg 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

images/download/attachments/78259831/image2019-3-22_10-24-22-version-1-modificationdate-1630408667431-api-v2.png

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:

images/download/attachments/78259831/image2020-4-24_14-3-39-version-1-modificationdate-1630408667515-api-v2.png

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 images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/add.svg und images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/forbidden.svg 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 images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/add.svg und images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/forbidden.svg 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)

  • Sichtbar - Zeigt die Spalte unabhängig von der Sichtbarkeit des originalen Elements an, außer der Benutzer blendet diese manuell aus

  • Versteckt - Versteckt die Spalte unabhängig von der Sichtbarkeit des originalen Elements, außer der Benutzer blendet diese manuell ein

  • Sichtbarkeit des Elements - Zeigt/Versteckt die Spalte abhängig von der Sichtbarkeit des originalen Elements, außer der Benutzer verändert die Sichtbarkeit manuell

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.
Über die "Zurücksetzen" Funktion des Grids können die standardmäßig konfigurierten Sichtbarkeiten wiederhergestellt werden und überschreiben somit nicht mehr Spalten im Modus "Sichtbarkeit des Elements".
Im Editormodus werden über die "Zurücksetzen" Funktion sämtliche konfigurierte Sichtbarkeiten zurückgesetzt.

images/download/attachments/78259831/image2020-10-29_14-37-55-version-1-modificationdate-1630408667333-api-v2.png
Die "Zurücksetzen" Funktion ist über die Grid-Optionen erreichbar.

Spaltenbreite

Definiert die Breite der Spalte entweder prozentual oder im Pixelmaß.
Hinweis: Das Ändern der Spaltenbreite direkt im Grid trägt diese entsprechend als Pixelmaß ein.

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

  • Kein - Keine Umbrüche erlaubt

  • Nur an Zeilenumbruchzeichen - Text bricht unabhängig vom Platz an Zeilenumbruchzeichen um

  • Automatisch - Text bricht an Zeilenumbruchzeichen und, abhängig vom Platz

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.
Tipp: Wenn hier Werte von anderen Feldern benötigt werden, können diese wie gehabt via $el() geholt werden.

CSS-Klassenausdruck

Ein Ausdruck, welcher den CSS Klassennamen eines Spaltenzellen HTML Elements bestimmt.
Tipp: Wenn hier Werte von anderen Feldern benötigt werden, können diese wie gehabt via $el() geholt werden.

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:

images/download/attachments/78259831/image2019-3-22_10-34-26-version-1-modificationdate-1630408667443-api-v2.png

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 images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/add.svg und images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/forbidden.svg ).

Per Darstellungsoption (siehe Eigenschaften) kann eine der folgenden Varianten für die Darstellung des Grids gewählt werden:

Darstellungsoption

Effekt

Nur Datengrid

images/download/attachments/78259831/image2019-3-22_10-56-43-version-1-modificationdate-1630408667452-api-v2.png

►HINWEIS◄ Ohne Darstellung des Detailbereichs ist auch kein Schreibzugriff auf die Inhalte des Grids oder die Einträge gegeben.

Details oben

images/download/attachments/78259831/image2019-3-22_10-53-16-version-1-modificationdate-1630408667446-api-v2.png

Details unten

images/download/attachments/78259831/image2019-3-22_10-54-53-version-1-modificationdate-1630408667449-api-v2.png

Details rechts

images/download/attachments/78259831/image2020-12-1_15-2-20-version-1-modificationdate-1630408667319-api-v2.png

Details links

images/download/attachments/78259831/image2020-12-1_15-3-3-version-1-modificationdate-1630408667312-api-v2.png

Ä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
(ID aus Nummernkreis)

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 images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/add.svg /images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/forbidden.svg Symbolen visualisiert:

Änderungshinweis

Beispiel vor Synchronisation

Beispiel nach Synchronisation

CUD: created

images/download/attachments/78259831/image2020-4-29_17-40-57-version-1-modificationdate-1630408667527-api-v2.png

  • Drei Airports werden als neue Wegpunkte angelegt.

  • Der Änderungshinweis created wird zugewiesen.

images/download/attachments/78259831/image2020-4-29_17-41-47-version-1-modificationdate-1630408667530-api-v2.png

  • Die Externe ID wird per Registrierung bereitgestellt.

  • Der Änderungshinweis created_OK bestätigt den Erfolg.

CUD: updated

images/download/attachments/78259831/image2020-4-29_17-42-26-version-1-modificationdate-1630408667535-api-v2.png

  • Der Änderungshinweis updated wird zugewiesen.

images/download/attachments/78259831/image2020-4-29_17-43-56-version-1-modificationdate-1630408667543-api-v2.png

  • Der Änderungshinweis updated_OK bestätigt die Änderung.

  • Die Externe ID bleibt unverändert.

CUD: deleted

images/download/attachments/78259831/image2020-4-29_17-44-38-version-1-modificationdate-1630408667547-api-v2.png

  • Der Wegpunkt EDDS wurde entfernt.

  • Mit dem Änderungshinweis deleted erscheint der Eintrag nur noch in den Daten (s. Struktur-Export unten)


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"
}
}
]
}
}

images/download/attachments/78259831/image2020-4-29_17-44-38-version-1-modificationdate-1630408667547-api-v2.png

  • Im Zuge der Synchronisation wird der Wegpunkt EDDS auch aus den Daten entfernt, wie der Struktur-Export (unten) zeigt.


Struktur-Export:

{
 "div": {
"clazz": "list",
"data": [
{
"p": {
"CUD": "created_OK",
"ADICAO": "EDDM",
"extID": "#04E8E"
}
},
{
"p": {
"CUD": "updated_OK",
"ADICAO": "LOWS",
"extID": "#04E90"
}
}
]
}
}