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:
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>