core:GetObjectFromBatch (Präprozessor)

Beim Batch-Import kann über den Wert des Attributs rememberAs (s. Single-Import) ein Name festgelegt werden, unter dem eine in einem batch-Knoten importierte Entität "gemerkt" wird. Später verarbeitete batch-Knoten in demselben Batch-Import können dann den GetObjetFromBatch-Präprozessor verwenden, um sich auf eine vorher "gemerkte" Entität zu beziehen.

Die folgende Struktur kann ausgehend von der Vorlage preProcessor:GetObjectFromBatch (s. Lobster_pro Vorlagen) direkt in die Import-Struktur eingebunden werden:

images/download/attachments/58596391/image2020-10-1_17-51-40-version-1-modificationdate-1601567503008-api-v2.png

Parameter

Typ

Bedeutung

Inhalt (Fixwert/Beispiel)

xsi:type 

String-Attribut

Typ des Präprozessors

core:GetObjectFromBatch

rememberedAs

String-Attribut

Name einer "gemerkten" Entität

myUser
target

String-Attribut

Name des Zielelements oder -attributs (mit Präfix '@') dem der Rückgabewert zugeordnet werden soll

linkedEntityId
returnId

Boolean-Attribut

definiert den Rückgabewert (nur ID oder komplette Entität)

true / false

IValueResolver

Platzhalter

Anstelle dieses Knotens kann optional ein Wertauflöser eingesetzt werden, falls nur ein Detail der Entität als Rückgabewert verwendet werden soll.

s. Beispiel unten

HINWEIS◄ Der Wertauflöser (s. IValueResolver) ist irrelevant, wenn der Parameter returnId den Wert true hat, da dann immer die ID (id) der Entität zurückgegeben wird.

Beispiel:

Ein Batch-Import soll eine neues Firmenkonto ("Demo Company") erstellen, eine neue Rolle ("Demo Rolle") und schließlich einen neuen Benutzer ("demoUser"), der beim Anmelden Zugriff die neue Firma und die neue Rolle haben soll.

  • Im batch-Knoten zum Erstellen des neuen Firmenkontos wird dieses per rememberAs-Attribut unter dem Namen "demoCompany" "gemerkt".

  • Der nachfolgende batch-Knoten zum Erstellen der neuen Rolle weist die gemerkte neue Firma per GetObjectFromBatch-Präprozessor als Besitzer der Rolle zu und merkt die neuen Rolle als "demoRole".

  • Der dritte batch-Knoten zum Erstellen des Benutzers bezieht sich per GetObjectFromBatch-Präprozessor auf die gemerkte "demoCompany", um sie als Besitzer und als "Zugewiesene Firma" zuzuordnen.

    • Der erste Präprozessor setzt den Besitzer analog zur Vorgehensweise bei der Rolle mit returnId=true .

    • Der zweite Präprozessor demonstriert beim Zuweisen der Firma (ohne technische Notwendigkeit), wie man alternativ mit returnId=false und einem Wertauflöser (core:PropertyResolver) vorgehen kann.

    • Der dritte Präprozessor verwendet wieder die einfachere Variante mit returnId=true, um dem Benutzer die gemerkte Rolle "demoRole" zuzuweisen.

ANMERKUNG◄ Die Zuweisung eines Besitzers hat für die Rolle keine funktionale Bedeutung bzgl. Zugriffrechten, da für diese Entität der Zugriff nur abhängig von der Rolle der Session und der Hierarchie zwischen den Rollen eingeschränkt wird (s. Rollen). Allerdings kann es trotzdem sinnvoll sein, der Rolle einen bestimmten Besitzer zuzuweisen, etwa wenn der Bezug zur besitzenden Firma als Ordnungsprinzip (etwa zum Filtern oder Sortieren) nutzbar sein soll.

<?xml version="1.0" encoding="UTF-8"?>
<core:BatchImport xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:core="CORESYSTEM" xmlns:base="SCM.BASE" >
 
<batch action="CREATE" rememberAs="demoCompany">
<!-- Hier wird eine neu angelegte Firma als "demoCompany" gemerkt -->
<base:CompanyAccount>
<address name1="Demo Company" />
</base:User>
</batch>
 
<batch action="CREATE" rememberAs="demoRole">
<base:Role xmlns:base="SCM.BASE" ownerId="-1" active="true">
<!-- Dieser Präprozessor liefert die als "demoCompany" gemerkte Firma und verwandelt sich in ein ownerId-Attribut mit deren ID als Wert -->
<preProcessor xsi:type="core:GetObjectFromBatch" rememberedAs="demoCompany" returnId="true" target="@ownerId" />
 
<roleName>Demo Role</roleName>
<flatPermissionNames>*</flatPermissionNames>
</base:Role>
</batch>
 
<batch action="CREATE" >
<base:User username="demoUser">
<!-- Dieser Präprozessor holt die als "demoCompany" gemerkte Firma und verwandelt sich in ein ownerId-Attribut mit deren ID als Wert -->
<preProcessor xsi:type="core:GetObjectFromBatch" rememberedAs="demoCompany" returnId="true" target="@ownerId" />
 
<companies>
<!-- Dieser Präprozessor holt die als "demoCompany" gemerkte Firma und verwandelt sich in ein company-Element das deren ID enthält -->
<preProcessor xsi:type="core:GetObjectFromBatch" rememberedAs="demoCompany" returnId="false" target="company">
<core:PropertyResolver property="id"></core:PropertyResolver>
</preProcessor>
</companies>
 
<roles>
<!-- Dieser Präprozessor holt die als "demoRole" gemerkte Rolle und verwandelt sich in ein role-Element das deren ID enthält -->
<preProcessor xsi:type="core:GetObjectFromBatch" rememberedAs="demoRole" returnId="true" target="role" />
</roles>
<address name1="Demo User" />
</base:User>
</batch>
 
</core:BatchImport>