Variable-Element

images/download/attachments/62850331/image2019-11-20_13-58-8-version-1-modificationdate-1603453470691-api-v2.png

Das Variable-Element kann verwendet werden, um im Kontext eines Formulars Werte oder komplexe Elementdaten zu verwalten, die zur Laufzeit im Formular weder visuell in Erscheinung treten noch direkte Interaktionen unterstützen sollen. Unabhängig von der Option "Sichtbar", bleibt das Variable-Element zur Laufzeit des Formulars immer unsichtbar. Auch andere Konfigurationsoptionen werden zwar formal angeboten, sind für das Variable-Element aber komplett wirkungslos (z. B. "Schreibgeschützt") bzw. verändern nur das Erscheinungsbild im Formulardesigner (z. B. "Beschriftung anzeigen").

Portale bieten die Möglichkeit dem Variable-Element ein Datenfeld zuzuordnen, so dass der Variable zugewiesene Daten in der Datenstruktur erscheinen. Umgekehrt können Variable anhand des Datenfelds auch mit Daten beladen werden, wie im letzten Beispiel (unten) demonstriert.

In Erfassungsmasken kann das Variable-Elements ebenfalls eingesetzt werden. Allerdings kann dem Element dort kein Datenfeld zugewiesen werden, da der Zugriff auf diese Eigenschaft wie bei allen anderen Elementen auch schreibgeschützt ist.

Analog zum Variable-Element kann immer auch ein Element Container benutzt werden, um komplexe Daten in einem Formular "unsichtbar" zu verwalten. Allerdings stellt nur das Variable-Element den Geändert-Auslöser für Verhalten bereit, die beim Zuordnen von Daten reagieren sollen.

Einfaches Einsatzbeispiel: "Zwischenablage für Einzelwerte"

Dieses Beispiel demonstriert, wie eine Variable als Ablage für einfache Werte verwendet werden kann. Ein ähnlicher Ansatz für komplexere Elementdaten wird dagegen im nachfolgenden Abschnitt aufgezeigt.

Aufgabenstellung:

Ein Portal dient zur Pflege von Artikeldaten (im Beispiel: Textfelder "Warenbeschreibung", "Warengruppe") in einer Liste (Wiederholendes Element). Da häufig mehrere Datensätze mit ähnlicher Warenbeschreibung eingegeben werden müssen, soll das Portal eine Reihe spezieller Funktionen zum Kopieren und Einfügen anbieten, um eine effizientere Eingabe zu ermöglichen:

  • Taste F2 ("Kopieren") Kopiert den Wert des aktuellen Eingabefelds in die Variable, die als "Zwischenablage" dient.

  • Taste F3: ("Einfügen") Fügt den in der Variablen gespeicherten Wert in das aktuelle Eingabefeld ein.

  • Taste F4: ("Spalte ausfüllen") Fügt den in der Variablen gespeicherten Wert in das aktuelle Eingabefeld in allen Zeilen ein, wo noch kein Eintrag vorliegt.

  • Taste F5: ("Spalte überschreiben") Fügt den in der Variablen gespeicherten Wert in das aktuelle Eingabefeld in allen Zeilen ein, unabhängig davon ob dort bereits ein Eintrag vorliegt oder nicht.

images/download/attachments/62850331/image2019-11-21_10-10-29-version-1-modificationdate-1603453470688-api-v2.png

  • Wie im Screenshot angedeutet, können mit diesen Shortcuts rasch Varianten (z. B. Farb-Varianten rot/blau/grün) ausgehend von einem bereits angelegten Eintrag erstellt werden.

Konfiguration:

Zum Kopieren wird der aktuelle Inhalt des betreffenden Textfelds (hier: "Warenbeschreibung") über den Auslöser "F2 gedrückt" an ein Statisch-Verhalten übergeben, das ihn per Wert setzen-Aktion der Variablen (hier: "Clipboard") zuweist:
images/download/attachments/62850331/image2019-11-21_10-24-51-version-1-modificationdate-1603453470681-api-v2.png

  • Dieses Verhalten muss so oder ähnlich für jedes der wiederholten Eingabefelder in der Liste konfiguriert sein.

Für die Variable wird ein Verhalten konfiguriert, das auf den Auslöser Geändert reagiert und abhängig vom Rückgabewert aus dem Verhalten Gefüllt einen Container mit Detailinformationen zum Einfügen ein- oder ausblendet (Element anzeigen, Element verbergen):
images/download/attachments/62850331/image2019-11-21_10-29-53-version-1-modificationdate-1603453470678-api-v2.png

  • Zur Laufzeit signalisiert das Einblenden der Optionen zum Einfügen, dass ein Wert in der ansonsten unsichtbaren "Zwischenablage" vorliegt.

  • Der Änderungstyp "Wert von Programm gesetzt" ist relevant, weil das Kopieren im Verhalten "copy" (oben) per Setze Wert (und nicht wie im folgenden Beispiel per Elementdaten setzen) erfolgt.

Die Verhalten zum Einfügen müssen wiederum je Eingabefeld konfiguriert sein. Hier wird exemplarisch die Funktion zum "Spalte überschreiben" gezeigt:

images/download/attachments/62850331/image2019-11-21_10-59-9-version-1-modificationdate-1603453470670-api-v2.png

  • Der Zugriff auf den Inhalt der per Variable "Clipboard" abgebildeten Zwischenablage erfolgt hier über die Verhaltensweise Element validieren.

  • Der Rückgabewert wird per Aktion Wert setzen mit der Option Auch für Duplikate auf alle Instanzen des Eingabefelds (die "Spalte" in der Liste) übertragen.

Einfaches Einsatzbeispiel: "Zwischenablage für Elementdaten"

Dieses Beispiel demonstriert in einem ähnlichen Anwendungsszenario wie im vorigen Fall, wie eine Variable als Ablage für komplexere Elementdaten verwendet werden kann.

Szenario:

In einem Portal sollen "Inventurmeldungen" für eine bestimmte Warengruppe ("Felgen und Kompletträder") erfasst werden. Innerhalb derselben Meldung sollen getrennte Listen für die Untergruppen ("Felgensätze" und "Kompletträder") erfasst werden können. Die Beschreibung der erfassen Position kombiniert jeweils mehrere beschreibende Eingabefelder unterschiedlicher Typen mit einer Mengenangabe. Weil typischerweise viele Varianten mit ähnlichen Merkmalskombinationen und Eingabetexten in derselben Meldung enthalten sind, soll die Merkmalskombination für einen bereit eingegeben Felgensatz in eine Zwischenablage kopiert und anschließend in andere Einträge eingefügt werden können.

Da Kompletträder Felgen beinhalten, enthalten die Einträge für Kompletträder Merkmale von Felgen. Daher soll das Einfügen von kopierten Daten für einen Felgensatz auch dort funktionieren.

images/download/attachments/62850331/image2019-11-21_11-46-39-version-1-modificationdate-1603453470664-api-v2.png

Konfiguration:

Das Verhalten zum Kopieren wird hier unter dem Namen "store" für das Spaltenlayout ("rimRow"), dem wiederholten Element im Wiederholendes Element-Container für die Felgensätze, konfiguriert. Ausgelöst wird das Verhalten durch eine Verhalten ausführen-Aktion (nicht im Bild) für den Button "Kopieren" innerhalb dieses Elements.
images/download/attachments/62850331/image2019-11-21_12-45-8-version-1-modificationdate-1603453470661-api-v2.png

  • Die Elementdaten des wiederholten Elements ("rimRow") werden per Verhaltensweise Element validieren ermittelt. Das Kopieren funktioniert damit nur, falls innerhalb der Zeile keine "invaliden" Felder aktiv sind. Im Beispiel wurde auf Validierer und die Pflichtfeld-Option komplett verzichtet.

  • Wird der Kopieren-Button in einer validen Eingabezeile betätigt, überträgt die Aktion Elementdaten setzen den gesamten Zeileninhalt in die Variable "Clipboard".
    ►WICHTIG◄
    Die Option Als Kopie muss dabei ausgewählt sein, da sonst als Inhalt der Variablen nur eine Referenz auf die Elementdaten des Quellobjekts zugewiesen wird. Dann würden nachträgliche Änderungen am Quellobjekt auf den Rückgabewert der "Zwischenablage" beim Einfügen durchschlagen.

Das Verhalten zum Einfügen wird hier unter dem Namen "restore" im wiederholten Spaltenlayout-Element des jeweiligen Zielcontainers angelegt. Ausgelöst wird das Verhalten durch eine Verhalten ausführen-Aktion (nicht im Bild für den Button "Einfügen" innerhalb dieses Elements.

images/download/attachments/62850331/image2019-11-21_14-32-21-version-1-modificationdate-1603453470654-api-v2.png

  • Die in der Variablen "Clipboard" gespeicherten Elementdaten werden per Verhaltensweise Element validieren ermittelt.

  • Das Einfügen erfolgt per Aktion Elementdaten setzen. Als Zielelement dient dabei ein Spaltenlayout-Container ohne Datenfeld "rimData" (grüner Rahmen im Screenshot), der die Eingabefelder für die Beschreibung der zusammenfasst.
    ►WICHTIG◄ Die Option In Originaldaten einbinden (impliziert Als Kopie) muss dabei ausgewählt sein, damit die in den Container "rimData" eingefügten Elementdaten in das übergeordnete Datenobjekt eingebunden werden. Im Beispiel betrifft dies den umgebenden Spaltenlayout-Container, also das wiederholte Element der Kompletträder-Liste (roter Rahmen im Screenshot).

Anwendungsfall:

images/download/attachments/62850331/image2019-11-22_10-31-58-version-1-modificationdate-1603453470639-api-v2.png

  • Hier wurde zunächst in der Liste für Felgensätze ein bestimmtes Modell erfasst und dann dessen Merkmale per "Kopieren" in die Variable "Clipboard" übernommen.

  • Die gespeicherten Merkmale wurden anschließend per "Einfügen" auf einen bereits existierenden Eintrag unter Kompletträder abgebildet.

  • Die dort bereits spezifizierten Daten für Bereifung und Menge bleiben erhalten, da sie sich nicht im Container für die Felgenmerkmale ("rimData", s. o.) befinden.

  • Die Daten für Felge und Branding werden aus der Zwischenablage übernommen und erscheinen auch in den Daten des Portals, wie der Struktur-Export verdeutlicht:

    images/download/attachments/62850331/image2019-11-22_10-35-59-version-1-modificationdate-1603453470634-api-v2.png

►HINWEIS◄ Der Struktur-Export verdeutlicht hier außerdem, dass der Datentransfer sämtliche Daten aus dem Quellcontainer für Felgensätze umfasst, also auch die Menge ("numberRims"), die nach dem "Einfügen" parallel zur Menge der Kompletträder ("numberWheels") in der Datenstruktur erscheint, weil für die Menge jeweils unterschiedliche Datenfelder verwendet wurden. Würden stattdessen beide Mengenangaben auf denselben Datenfeldnamen (z. B. "number") verweisen, würde der "Struktur Export" im Beispiel etwa so aussehen:

images/download/attachments/62850331/image2019-11-22_10-32-52-version-1-modificationdate-1603453470637-api-v2.png

  • Die Elementdaten der Felge in der Variable "Clipboard" definieren auch in diesem Fall einen Wert 4 für das Datenfeld "number". Diese Zuordnung wird auch beim Setzen der Elementdaten für den "rimData" Container eingefügt. Das im Portal vorgesehene Eingabefeld Menge, das sich ebenfalls auf das Datenfeld "number" des betreffenden Kompletträder-Eintrags bezieht, zeigt allerdings weiterhin den Wert 8 an, da sich das Eingabefeld außerhalb des aktualisierten Containers befindet. Beim Validieren des Portals für den Struktur-Export wird dem Datenfeld "number" (genauer: wheelsets.line.number) schlicht zuerst der Wert 4 (aus den unsichtbaren Elementdaten des "rimData" Containers) zugewiesen und danach der Wert 8 aus dem Eingabefeld Menge (für Kompletträder).

Einfaches Einsatzbeispiel: "Rückgabe komplexer Daten aus einer Ereignisbehandlung"

Dieses Beispiel demonstriert, wie Variable-Elemente mit Datenfeld verwendet werden können, um komplexe Rückgabewerte aus Ereignisbehandlungen entgegenzunehmen.

Szenario:

Per Portal soll ein begrenzter "Auszug" aus der Verlaufshistorie (Arbeitsstatus, Trackingstatus) eines Geschäftsobjekts bereitgestellt werden, nachdem der Anwender eine Referenznummer eingegeben bzw. per Scanner erfasst hat. Die Referenznummer soll dabei ein bestimmtes "Werkzeug" identifizieren, dessen Lebenszyklus in Lobster Data Platform / Orchestration durch die Erfassung von Arbeits- und Trackingstatus begleitet wird:

  • Hinsichtlich Arbeitsstatus sollen nur der aktuelle Status und dessen unmittelbarer Vorgänger durch die Anzeige eines Symbols ausgegeben werden.

  • Hinsichtlich Trackingstatus soll die Ausgabe nur die neuesten zehn Einträge chronologisch rückwärts berücksichtigen und für diese die Lokalisierung für den Trackingstatus-Code und das zugehörige Symbol auflisten.

Anwendungsbeispiel:

Zum besseren Verständnis für die Zielsetzung hier ein mögliches Ergebnis auf der Basis der anschließend erörterten Konfiguration:

images/download/attachments/62850331/image2019-11-25_14-52-5-version-1-modificationdate-1603453470586-api-v2.png


Konfiguration (Auszug):

►HINWEIS◄ Die folgende Beschreibung beschränkt sich auf Details der Konfiguration beschränkt sich auf Details, die für das Verständnis zur Verwendung Variablen wesentlich sind.

images/download/attachments/62850331/image2019-11-25_15-1-46-version-1-modificationdate-1603453470580-api-v2.png

  • Das Verhalten "getHistory" rechts im Bild wird per Klick auf den Button "Status laden" ausgelöst (s. Auslöser Angeklickt).

  • Die Verhaltensweise Eigenes Aktionsevent auslösen (Formulardesigner) reicht beim Aufrufen des Ereignisses "WS/TS Historie" die Elementdaten des umgebenden Containers "Query" (grüner Rahmen im Screenshot) mit. Damit steht innerhalb einer dadurch ausgelösten Ereignisbehandlung (hier nicht detailliert beschrieben) der Eintrag im Eingabefeld "Werkzeug-Referenz" als Objektfeld (Datenfeld "toolReferenceID") der formData-Variablen zur Verfügung.

  • Die Ereignisbehandlung führt je eine Suche (Ereignisaktion) aus, um zunächst das Geschäftsobjekt zur eingegebenen Werkzeug-ID und - sofern dies einen Treffer ergibt - die zugehörigen Arbeitsstatus und Trackingstatus (präziser: Trackingstatus-Einträge) zu ermitteln. Die Ergebnisse aus den Suchaktionen für die Arbeitsstatus und Trackingstatus werden dann als Listen per Setze Wert in je ein Objektfeld (WS_TRAIL, TS_TRAIL) der formData-Variablen geschrieben. Sie stehen damit nach Abarbeiten der Verhaltensweise zur Verarbeitung durch die Aktionen bei "wahr" zur Verfügung.

  • Die Aktion Elementdaten setzen überträgt diese Daten auf das Zielelement "Ergebnisse", einen Spaltencontainer (ohne Datenfeld), der zwei Variable-Elemente mit Datenfeld-Zuordnungen (WS_TRAIL, TS_TRAIL) enthält, die den in der Ereignisbehandlung erzeugten Objekt-Feldern der formData-Variablen entsprechen müssen. Ein einziges Eigenes Aktionsevent kann mit dieser Methode Daten für unterschiedliche "Datentöpfe" im Formular bereitstellen.

    • Auf die Option In Originaldaten einbinden wurde hier verzichtet, da die Suchergebnisse nicht in die Datenstruktur des Formulars eingehen sondern nur angezeigt werden sollen.

  • Abschließend (zugeklappt im Bild) wird die Aktion Verhalten ausführen verwendet, um den Inhalt je eines Variable-Elements auf das zugehörige Datengrid zu übertragen, indem ein Verhalten mit einer Aktion Grid: Füllen ausgeführt wird. Der folgende Screenshot zeigt dieses Verhalten exemplarisch für die Übertragung der Trackingstatus:

    images/download/attachments/62850331/image2019-11-25_15-43-28-version-1-modificationdate-1603453470577-api-v2.png
    • Die Verhaltensweise Element validieren beschafft den Inhalt des Variable-Elements "TrackingState_TRAIL" (grün hervorgehoben im Screenshot).

    • Die Aktion Grid: Füllen überträgt diese Daten auf das Zielelement, ein Datengrid "Trackingstatus-Verlauf".