Grid: Füllen
Aktionen - Kurzfassung
Die Aktion Grid: Füllen befüllt ein verknüpftes Zielelement mit neuen Listendaten (s. Tabelle unten), sofern es sich um ein Datengrid oder eines der anderen Listenelemente handelt.
Siehe auch: Grid: Leeren, Grid: Zeile(n) hinzufügen, Grid: Zeile(n) entfernen
Die Aktion Grid: Füllen befüllt ein verknüpftes Zielelement mit neuen Listendaten (s. Tabelle unten), sofern es sich um ein Datengrid oder eines der anderen Listenelemente handelt.
Bestehende "Zeilen" des Zielelements werden dabei verworfen.
►WICHTIG◄ Die Angabe eines Zielelements aus der Gruppe der Listenelemente ist erforderlich, damit diese Aktion unter Typ der Aktion überhaupt ausgewählt werden kann.
Listendaten zum Füllen des Zielelements können mit unterschiedlichen Methoden und aus unterschiedlichen Quellen gewonnen werden, wie unten anhand von Beispielen beschrieben. Die Listendaten für die Aktion Grid: Füllen werden dabei entweder vom ausführenden Element selbst (über einen geeigneten Auslöser) bereitgestellt oder als Rückgabewert einer geeigneten Verhaltensweise geliefert.
Alternativ kann ein Datengrid natürlich auch unabhängig von der Aktion durch das Zuweisen von geeigneten Elementdaten gefüllt werden, z. B. wenn eine Ereignisbehandlung über die Variable formData geeigneten Inhalt für das Datenfeld des Datengrids zurückgibt, die von einem Eigenes Aktionsevent auslösen (Formulardesigner)-Verhalten per Elementdaten setzen auf einen übergeordneten Container abgebildet werden.
Für andere Listenelemente korrespondiert das Datenfeld (bzw. der Wert des Elements) dagegen mit einer Einfach- oder Mehrfachauswahl, während die Listendaten die auswählbaren "Zeilen" definieren. Ggf. regelt die Service-Konfiguration (s. Services und Konverter) für das Zielelement das Zusammenspiel.
Unabhängig von der Datenquelle und der Methode zur Gewinnung der Listendaten gilt, dass das befüllte Datengrid nur die Inhalte aus diesen Listeneinträgen anzeigt, die zur bestehenden Spaltenkonfiguration (v. a. Datenfelder, Berechnungsausdrücke) passen. Die Datenstruktur der Einträge wird aber trotzdem vollständig in die Elementdaten übernommen und steht für Verhalten, Ereignisbehandlungen und Berechnungsfelder usw. auch uneingeschränkt zur Verfügung. Abhängig von der Datenquelle kann dies auch komplette Entitäten (Geschäftsobjekte, Konfigurationsobjekte, etc.) als Eintrag einer Liste betreffen.
Eingangsdaten für die Aktion Grid: Füllen müssen einer der folgenden Strukturen entsprechen, damit das Datengrid zeilenweise befüllt wird:
Struktur der Eingangsdaten |
Beispiel / Beschreibung |
Text (XML) Eine Zeichenfolge, die ein gültiges XML-Dokument ergibt, aus dem ein Objekt deserialisiert wird, dessen Aufbau einer der nachfolgenden Definitionen entspricht. |
Beispiel für Text der via XML als Inhalt für ein Grid interpretierbar ist: <root> <item>...</item> <item>...</item> <item>...</item> <root> Die innere Struktur je "item" (...) kann beliebig komplex und individuell aufgebaut sein. Details zur Verarbeitung der XML-Struktur auf dem Weg ins Datengrid werden weiter im Abschnitt "Beispiele" unten erklärt. |
Anonymes Objekt mit einem einzigen Feld vom Typ "Array" Diese kompliziert wirkende Bezeichnung beschreibt eine eigentlich recht einfache Struktur, wie sie in Lobster Data Platform / Orchestration z. B. beim Deserialisieren eines Objekts aus einem XML-Dokument wie dem aus dem vorigen Beispiel entsteht. |
JSON-Darstellung des Objekts aus obigem XML: { item : [ ... , ... , ... ] } Kind-Elemente mit identischen Namen werden als Array interpretiert. Der Name des Kind-Elements erscheint als Feldname, während der Name des root-Elements nicht in Erscheinung tritt. Grid: Füllen überträgt die Inhalte (...) aus dem Array (hier: Objektfeld item) in die Zeilen des Datengrid-Elements. Welche Inhalte das Portal zur Laufzeit sichtbar anzeigt, hängt vom Zusammenspiel zwischen der Datenfeldzuweisung in der Spaltenkonfiguration mit dem Inhalt es Array-Elements ab. Das Datengrid definiert quasi eine "Projektion" der eigentlichen Inhalte in eine Listenstruktur. |
Natives Array Die Grid: Füllen Aktion kann auch ein Array verarbeiten, das nicht als Feld eines anonymen Objekts "verpackt" ist sondern direkt (als Objekt vom Typ "Array") übergeben wird. ►ANMERKUNG◄ Eine entsprechende Struktur kann ausgehend von einem XML-Text nicht erzeugt werden, da das XML-Format ein singuläres root-Element vorschreibt. Wenn ein Lobster_data Profils im JSON-Format mehrere Datensätze zurückgibt, liefert die Verhaltensweise (z. B. Profil aufrufen) diese Daten dagegen typischerweise als natives Array. |
Ausgabewert der Konsole für ein Datengrid mit zwei Zeilen:
Im Beispiel wurde per Element validieren-Verhalten der Inhalt eines Datengrids gelesen, das komplette Geschäftsobjekte auflistet. Das zurückgegebene Array von Geschäftsobjekten kann per Grid: Füllen direkt einem anderen Datengrid zugewiesen werden. |
Collection Wenn der Grid: Füllen-Aktion ein Collection-Objekt übergeben wird, verwendet diese das in der Collection enthaltene (native) Array zum Füllen des Grids. |
Ausgabewert der Konsole für die Positionen (lineItems) eines Geschäftsobjekts:
Das übergebene Objekt ist vom Typ ArrayCollection und enthält im Datenpuffer (_buffer) ein natives Array von Objekten von Positionen für den Geschäftsobjekttyp. Im Beispiel (oben) wurden die Positionen (lineItems) eines Geschäftsobjekts als Verhaltensdaten in die Konsole geschrieben. Diese Daten sind geeignet, um per Grid: Füllen die Positionen des Geschäftsobjekts innerhalb eines Portals ausgewählte Merkmale dieser Positionen in einem Datengrid aufzulisten. |
Datenprovider Ein Collection-Objekt mit dem enthaltenen nativen Array wird häufig auch als Bestandteil eines Datenprovider-Objekts bereitgestellt. Auch in dieser zweistufigen "Verpackung" verwendet die Grid: Füllen-Aktion das enthaltene Array zum Füllen des Grids. |
Ausgabewert der Konsole für den Rückgabewert eines Verhaltens, das Geschäftsobjekte aus einer Suche zurückgibt:
|
Beispiele
Datengrid mit Listendaten aus einem Lobster_data-Profil befüllen
Ein Lobster_data-Profil kann in einem Formular über die Verhaltensweisen Profil aufrufen oder Element validieren und Profil aufrufen synchron aufgerufen werden.
Sofern das aufgerufene Profil einen geeigneten Rückgabewert liefert, steht dieser bei einem direkten Aufruf im Verhalten unmittelbar für die Aktion Grid: Füllen zur Verfügung.
Im einfachsten Fall liefert das Profil eine Zieldatei im JSON-Format, die eine Liste ([... , ...]) von Objekten ( { ... } ) mit Angaben zu denselben Name-Wert-Paaren ( <name> : <wert>, ... ) definiert.
Das folgende Beispiel veranschaulicht diese Struktur an einem konkreten Beispiel:
[{
"id"
:
"1"
,
"name"
:
"I"
,
"description"
:
"Kategorie I: Pflichtangaben"
},
{
"id"
:
"2"
,
"name"
:
"II"
,
"description"
:
"Kategorie II: Optionale Details"
},
{
"id"
:
"3"
,
"name"
:
"III"
,
"description"
:
"Kategorie III: Anhänge"
}]
Ein Datengrid dessen Spaltenkonfiguration sich auf die Datenfelder id, name und description bezieht, listet die entsprechenden Werte tabellarisch auf:
Datengrid mit Daten aus einer Objektauswahl per Multi-Combobox füllen
In einem Portal ermöglicht eine Multi-Combobox die Auswahl von Firmen. Bestimmte Details der ausgewählten Firmenkonten sollen in einem Datengrid angezeigt werden.
Beide Elemente sind in einem Aufklappbar (Expandable)-Container so angeordnet, dass die Auswahl (Multi-Combobox) immer sichtbar ist und die Details (Datengrid) nach Bedarf auf- und zugeklappt werden können.
Laufzeitansicht:
Konfiguration:
Ein Verhalten für die Multi-Combobox reagiert auf den Auslöser Geändert mit allen Änderungstypen und der VerhaltensweiseStatisch, damit das Datengridimmer passend zur Auswahl befüllt (bzw. geleert) wird.
Unter Aktionen bei "wahr" wird die Aktion Grid: Füllen mit dem Datengrid als Zielelement ausgeführt.
Die Spalten im Datengrid greifen auf folgende Datenfelder des Firmenkontos zu:
Spalte |
Datenfeld |
Name 1 |
address.name1 |
Land |
address.countryCode |
PLZ |
address.zipcode |
Stadt |
address.city |
Firmentypen |
types |
Datengrid ausgehend von einem Text im XML-Format füllen
Das folgende Beispiel hat keinen unmittelbaren Praxisbezug, soll aber einige technische Details zur Übertragung von XML-Text in Listendaten transparent machen.
Die Eingabe im Textfeld Textfeld (links oben) wird per Grid: Füllen-Aktion in das Datengrid (Liste)-Element unterhalb übertragen, wenn der Button Grid: Füllen angeklickt wird.
Beim Auswählen einer Listenzeile im Datengrid wird der Wert der betreffenden Zeile per Hinweis anzeigen ausgegeben.
Das Textfeld Struktur Export (rechts) zeigt den Inhalt des Struktur-Exports für das gesamte Portal, der zu diesem Zweck interaktiv dorthin kopiert wurde.
Dieses Beispiel soll folgende Regeln und Zusammenhänge für die Interpretation des Texts in einem Datengrid verdeutlichen, dessen Spalten die Datenfelder @col1 und col2 verwenden:
Der Name des XML-Wurzelelements spielt keine Rolle, für die weitere Interpretation der Daten. Der Name kann sogar identisch mit dem für die direkten Kind-Elemente sein (hier: stuff).
Die unterschiedliche Struktur der stuff-Kind-Elemente demonstriert verschiedene Möglichkeiten für die Zuordnung von Werten zu Datenfeldern mit einem bestimmten Namen:
Das erste Element ordnet einem Datenfeld mit dem Namen @col1 den Textwert foo zu, indem dieser als XML-Attribut col1 erscheint. Der Inhalt für die zweite Spalte wird über den Textinhalt eines Kind-Elements mit dem Namen col2 definiert.
Das zweite Element ( </stuff>) ist leer und ergibt keine sichtbaren Werte im Grid. Allerdings weist ein Berechnungsausdruck für die erste Spalte in diesem Fall die Zeichenfolge "<unidentified>" als Wert zu.
Das dritte Element verwendet wieder das Schema des ersten Elements: Ein XML-Attribut @col1 und ein Kind-Element col2 liefern Textwerte.
Das vierte Element bietet keine Angriffspunkte für Feldnamen, da hier nur direkt ein Textinhalt vorliegt. Das Erscheinungsbild im Datengrid entspricht dem leeren Element (b), allerdings steht der literale Textwert in den Elementdaten (s. blaue Markierung im Struktur Export) zur Verfügung, so dass z. B. die Hinweis anzeigen-Aktion (wie im Screenshot zu sehen) mit diesen Daten arbeiten kann.