Instanz kopieren


Wertauflöser - Kurzfassung

Zweck: Erzeugt eine Kopie des als Eingabewert vorliegenden Objekts und liefert diese als Rückgabewert.

Siehe auch: Erzeuge Instanz

images/download/attachments/62856999/image2022-10-10_9-3-51-version-1-modificationdate-1665385431442-api-v2.png

Der Instanz kopieren-Wertauflöser erzeugt eine Kopie des als Eingabewert vorliegenden Objekts und liefert diese als Rückgabewert.

Falls es sich beim Eingabewert um eine Entität eines eigenständigen Entitätstyps handelt, dann entspricht das Kopieren der Instanz dem Klick auf "Kopieren" in einem interaktiven Kontext (s. Erfassungsmasken). Das Ereignis "Kopieren" (s. Allgemein (Ereignisse)) wird allerdings nicht ausgelöst.

Es können aber auch Kopien von nicht eigenständigen Entitätstypen (z. B. inneren Entitäten) erzeugt werden, wie das zweite Beispiel unten demonstriert.

  • Die Werte von Feldern für Entitätsattribute ("ID", "Besitzer", "Ersteller", "Erstelldatum", usw.) werden wie auch beim interaktiven Kopieren nicht kopiert.

    • Beim Abschluss der Transaktion zum "Erstellen" der kopierten Entität werden diese Felder automatisch befüllt.
      WICHTIG◄ Für eine kopierte Entität gilt damit per Standard die Firma der Session als "Besitzer" (ownerId) und nicht etwa der "Besitzer" des Originals! Dieser muss also bei Bedarf explizit zugewiesen werden (s. erstes Beispiel unten).

  • Soweit im Kontext der Entität anwendbar werden außerdem auch die folgenden Merkmale bzw. Beziehungen einer Entität nicht kopiert:

HINWEIS◄ Die von einer Entität erzeugte Kopie ist volatil, muss also bei Bedarf ausdrücklich persistiert werden, z. B. in dem in einer Erfassungsmaske "Speichern" gedrückt oder in einer Ereignisbehandlung die Ereignisaktion Änderungen später speichern ausgeführt wird.

  • In Ereignisbehandlungen kann eine volatile Kopie einer Entität mit Hilfe der Ereignisaktionen Ausführen mit und Änderungen später speichern zum Speichern beim Abschluss der Transaktion vorgemerkt werden. Bei Bedarf kann vorab auch die Ereignisaktion Primärschlüssel füllen ausgeführt werden, um eine ID für die Entität vom Server zu beziehen.

  • Ein Client Workflow kann eine volatile Kopie einer Entität erzeugen, z. B. um deren Daten per Elementdaten setzen einem Formularelement oder eingebetteten Formular zuzuweisen. Auch dann wird die volatile Entität nur persistiert, wenn sie anschließend explizit gespeichert wird.

Konfiguration

Das zu kopierende Original wird als Eingabewert erwartet.

Der Wertauflöser verwendet keine Parameter.

Beispiele

Einfacher Anwendungsfall: Eine Entität duplizieren

Im Kontext einer Eigenen Übersicht (s. Eigene Übersichten) soll für bestimmte Entitätstypen ein Ribbon-Button zum "Duplizieren" einer einzelnen in der Liste selektierten Entität angeboten werden.

Detailanforderungen:

  • Falls die Firma der Session nicht als "Besitzer" des selektierten Originals gilt, soll der Benutzer per Rückfrage auswählen können, ob "seine Firma" (die Firma der Session) oder der "Besitzer" des Originals als "Besitzer" der Kopie gelten soll.

  • Das "Duplikat", also die Kopie der ausgewählten Entität, soll sofort nach dem Kopieren automatisch gespeichert werden.

  • Die Selektion soll auf dem Original verbleiben, so dass sofort weitere Kopien des Originals erstellt werden können.

Konfiguration:

WICHTIG◄ Das Erstellen der Kopie gelingt nur. wenn die Rolle der Session über entsprechende Berechtigungen verfügt. Der Kopie kann ein von der Firma der Session abweichender "Besitzer" außerdem nur dann zugeordnet werden, wenn das zulässig ist. Dies kann die Einrichtung von Firmenfreigaben für alle relevanten Entitätstypen erfordern. Alternativ könnte in der folgenden Ereignisbehandlung auch eine Ausführen als-Ereignisaktion verwendet werden, um als Rolle der Session temporär eine Rolle zu beanspruchen, für die Besitzbeschränkungen nicht gelten (z. B. "Super User"). Die dargestellte Konfiguration verzichtet hierauf.

Für das "Duplizieren" (DUPLICATE) wird ein Eigenes Aktionsevent in den betreffenden Dynamischen Aufzählung hinzugefügt und lokalisiert. Die rechts abgebildete Ereignisbehandlung bezieht sich auf dieses unter Auslösende Ereignisse.


Die Prüfende Regel stellt per Typprüfung sicher, dass das Ereignis im Kontext einer "Entität" ausgeführt wurde. Da hier auf die allen Entitätstypen übergeordnete Klasse "Entität" geprüft wird, kann dieselbe Ereignisbehandlung für beliebige Entitäten verwendet werden.

Ob Eigene Übersichten für einen bestimmten Entitätstyp das Duplizieren unterstützen oder nicht, soll hier nur über die Konfiguration und Zuordnung des Ribbonmakros gesteuert werden.


Als Aktion bei bestandener Regel wird eine Ausführen mit-Ereignisaktion ausgeführt:

  • Da im Aktionsblock auf Daten des Originals und der Kopie zugegriffen werden muss, speichert der Parameter Entität in Variable speichern eine Referenz auf das Original in der Variablen original.

  • Im Parameter Objekt Resolver wird der Instanz kopieren-Wertauflöser verwendet, um die - zunächst volatile - Kopie der Entität aus dem Eingabewert als abweichendes Bezugsobjekt für die Ereignisaktionen im Aktionsblock zu erhalten.

  • Der Aktionsblock sieht folgende Operationen vor:

    • Innerhalb einer Wenn Dann Sonst-Ereignisaktion wird zunächst der "Besitzer" (Feld ownerId) der Original-Entität (in der Variable original) mit dem Feld "ID" (id) der Firma der Session verglichen.

    • Nur falls unterschiedliche Besitzer vorliegen, soll die im Dann-Zweig folgende Benutzer-Rückfrage ausgeführt werden. Der Benutzer soll (per "Ja"-Schaltfläche) bestätigen, dass der "Besitzer" des Originals auch für die Kopie gelten soll oder dies (per "Nein"-Schaltfläche) ablehnen. Dann wird der Kopie kein "Besitzer" zugewiesen, sodass beim Speichern automatisch die Firma der Session als "Besitzer" zugewiesen wird. Details zu dieser Ereignisaktion zeigt der Screenshot unten.

      • Dort sind die - statisch zugewiesenen Texte für Titel und Text im Rückfrage-Dialog zu sehen.

      • Die Setze Wert-Ereignisaktion im Yes-Zweig der Fallunterscheidung definiert die vom Standard abweichende Vorgehensweise, dass der "Besitzer" des Originals auf die Kopie übertragen werden soll.

    • Unabhängig davon, ob die Benutzer-Rückfrage ausgeführt und wie sie ggf. beantwortet wird, sorgt die Änderungen später speichern-Ereignisaktion per Vormerkung sicher, dass die als Kopie angelegte Entität beim erfolgreichen Abschluss der Transaktion gespeichert wird.


images/download/attachments/62856999/image2022-10-10_18-7-12-version-1-modificationdate-1665418032838-api-v2.png

images/download/attachments/62856999/image2022-10-10_15-45-26-version-1-modificationdate-1665409526172-api-v2.png

Anwendungsfall im Client Workflow: Instanz einer "Wiederholbaren Entität" duplizieren

Eine Eigene Typdefinition (s. Eigene Typdefinitionen) für einen Entitätstyp "Luftfahrzeug" (Aircraft) enthält ein Feld "Ladebereiche" (areas) des Typs "Wiederholbare Entität", das innere Entitäten des Typs "Ladebereich" (LoadingArea) auflistet. Je Ladebereich können dabei vielfältige Details spezifiziert werden.

Um die Datenpflege zu vereinfachen, falls ein Luftfahrzeug über mehrere identische oder zumindest ähnlich spezifizierte "Ladebereiche" verfügt, soll eine bestehende Definition für einen "Ladebereich" per Knopfdruck dupliziert werden können. Die Kopie soll an die bestehende Liste im Feld "Ladebereiche" (areas) angehängt werden.

images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg ACHTUNGimages/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/warning.svg Die Beziehung zwischen einer inneren Entität (hier: Ladebereich) und der übergeordneten Entität (hier: "Luftfahrzeug") wird beim Speichern der übergeordneten Entität etabliert, indem dem das Feld parentId der inneren Entität die id der übergeordneten Entität zugewiesen wird. Als Entitätsattribut wird das Feld parentId nicht vom Original auf die kopierte Instanz übertragen. Das Speichern der übergeordneten Entität nach dem Kopieren einer inneren Entität ist also essenziell für den dauerhaften Erfolg der Operation. Das Speichern einer inneren Entität durch eine Änderungen später speichern-Ereignisaktion, ist zwar technisch machbar, sofern diese auf eine valide parentId verweist. Allerdings ist diese Vorgehensweise unbedingt zu unterlassen, da sie die Datenhoheit der übergeordneten Entität in Bezug auf ihre inneren Entitäten unterläuft, was die Datenintegrität und Konsistenz (u. a. mit Blick auf die Änderungshistorie) beeinträchtigen kann.

Laufzeitbeispiel:

Vorher:

images/download/attachments/62856999/image2022-10-10_17-10-54-version-1-modificationdate-1665414654965-api-v2.png

  • Die Spezifikationen für einen Ladebereich CENTER/L wurden im Aufklappbar (Expandable)-Element "Details" (im Bild zugeklappt) angelegt.

  • Per Klick auf den Button "Duplizieren" soll ein weiterer "Ladebereich" hinzugefügt werden, für den dieselben "Details" gelten (s. Bild rechts).

HINWEIS◄ Ein Klick auf das images/s/-95e2zf/9012/8yg2g7/_/images/icons/emoticons/add.svg -Symbol würde stattdessen einen neuen Ladebereich neu (und ohne Details) hinzufügen.

Nachher:

images/download/attachments/62856999/image2022-10-10_17-9-54-version-1-modificationdate-1665414594961-api-v2.png

  • Der duplizierte Ladebereich wurde im Bild bereits in CENTER/R umbenannt. Die im Bild zugeklappten "Details" sind noch identisch mit dem Original (CENTER/L).

Konfiguration:

Beim Anklicken des Buttons (s. Button) wird eine Verhaltensweise vom Typ Client Workflow ausgelöst. Diese erhält einerseits die volatilen Daten der in der Erfassungsmaske angezeigten "Luftfahrzeug"-Entität als Eingabewert.

Da sich der der Button im Wiederholten Element (hier: Zeilenlayout-Element) für "Ladebereiche" befindet, können die Daten der zu duplizierenden "Ladebereich"-Instanz zusätzlich per Parameter original übergeben werden.

Der Client Workflow kann auf dieser Grundlage wie rechts abgebildet konfiguriert werden:

  • Die Prüfende Regel deklariert per Typprüfung, dass eine Entität des Typs "Luftfahrzeug" (Aircraft) als Eingabewert erwartet wird.

  • Als einzige Aktion bei bestandener Regel wird eine Liste modifizieren-Ereignisaktion konfiguriert:

    • Auf der linke Seite definiert der Objekt-Feld-Wertauflöser, die zu modifizierende Liste, hier die Liste im Feld "Ladebereiche" (areas) des Luftfahrzeugs.

    • Auf der rechten Seite müssen die Daten des hinzuzufügenden Eintrags bereitgestellt werden:

      • Ein Variable-Wertauflöser liefert die beim Aufruf über den Client Workflow-Parameter original definierten Daten des zu duplizierenden "Ladebereichs".

      • Der verkettete Instanz kopieren-Wertauflöser erstellt daraus eine Kopie, die alle als "Nutzlast" zu wertenden Merkmale des Originals widerspiegelt.

images/download/attachments/62856999/image2022-10-10_17-3-52-version-1-modificationdate-1665414232247-api-v2.png