Instanz kopieren
Wertauflöser - Kurzfassung
Zweck: Erzeugt eine Kopie des als Eingabewert vorliegenden Objekts und liefert diese als Rückgabewert.
Siehe auch: Erzeuge Instanz
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:
Arbeitsstatus (aktueller Arbeitsstatus, Arbeitsstatushistorie)
Trackingstatus (aktuelle Trackingstatus-Attribute, Trackingstatushistorie)
Zuordnungen von Tags
Zuweisungen von Zuordnungskriterien
►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:
|
|
|
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.
ACHTUNG
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:
►HINWEIS◄ Ein Klick auf das |
Nachher:
|
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:
|
|