core:FindEntity (Präprozessor)
Der FindEntity-Präprozessor dient zum Zugriff auf eine Entität (bzw. deren ID oder andere Daten) in einem Import für eine andere Entität. Die vom Präprozessor ermittelten Daten werden auf ein neu erstelltes Zielelement abgebildet und als Inhalt des übergeordneten XML-Knotens übernommen. Das Zielelement ersetzt quasi den Präprozessor-Knoten innerhalb der XML-Struktur der importierten Entität.
►HINWEIS◄ Falls die referenzierten Daten ein XML-Attribut der importierten Entität betreffen, muss der Präprozessor core:FindEntityAttribute (Präprozessor) verwendet werden.
Die folgende Struktur kann ausgehend von der Vorlage preProcessor:FindEntity (s. Lobster_pro Vorlagen) in die Import-Struktur an der Position eingebunden werden, wo zur Laufzeit ein Zielelement mit den die Daten der einzubindenden Entität erscheinen soll.
Die einzubindende Entität wird durch eine Suche ermittelt. Dabei wird immer nur der erste Treffer als Suchergebnis berücksichtigt.
Optional kann ein Wertauflöser definiert werden, um auf bestimmte Detaildaten aus der ermittelten Entität als Rückgabewert abzustellen.
Parameter |
Typ |
Bedeutung |
Inhalt (Fixwert/Beispiel) |
xsi:type |
String-Attribut |
Typ des Präprozessors |
core:FindEntity |
type |
String-Attribut |
Entitätstyp für die auszuführende Suche |
base:Role |
target |
String-Attribut |
Name des Zielelements, das den preProcessor-Knoten ersetzt |
role |
returnId |
Boolean-Attribut |
definiert die Rückgabe (nur ID oder komplette Entität) |
true / false |
search |
Unterknoten |
definiert eine Suche für den angegebenen Entitätstyp |
s. Beispiel |
resolver |
Unterknoten |
definiert optional einen Wertauflöser für die zurückgegebene Entität |
s. Beispiel |
►HINWEIS◄ Der Wertauflöser (resolver) ist irrelevant, wenn der Parameter returnId den Wert true hat, da dann immer die ID (id) der Entität zurückgegeben wird.
Beispiel:
Per Single-Import soll ein neuer Benutzer "importDemo" mit der Rolle "Administrator" und der Firmenzuordnung "SL Germany" erstellt werden. Diesem Benutzer soll außerdem die Adresse der Firma "SL Germany" zugewiesen werden.
Da ein Benutzer nicht ohne Passwort angelegt werden kann, wird über das passwordHash-Attribut ein Standardpasswort zugewiesen (s. a. Importieren von Benutzerkonten mit Passwort).
Der erste Präprozessor erscheint im roles-Element des base:User-Objekts, wo zur Laufzeit die ID (returnId:true) der "Administrator"-Rolle gesucht wird. Er erzeugt ein Zielelement vom Elementtyp role.
Der zweite Präprozessor erscheint im companies-Element des base:User-Objekts, wo zur Laufzeit die ID (returnId:true) der Firma "SL Germany" gesucht wird. Er erzeugt ein Zielelement vom Elementtyp company.
Der dritte Präprozessor erscheint definiert als Zielelement den address-Knoten des Benutzers und weist diesem die Adresse der Firme "SL Germany" zu, die aus dem Suchergebnis per Wertauflöser ermittelt wird.
Insgesamt ergibt sich die folgende XML-Struktur für den Single-Import:
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
core
:Import
action
=
"CREATE"
xmlns:xsd
=
"http://www.w3.org/2001/XMLSchema"
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:core
=
"CORESYSTEM"
xmlns:base
=
"SCM.BASE"
>
<
base
:User
active
=
"true"
locale
=
"de"
username
=
"importDemo"
passwordHash
=
"plain:n!mda321"
>
<
roles
>
<!-- Zur Laufzeit erscheint anstelle des Präprozessors das Element <
role
>ID_der_Administrator_Rolle</
role
> -->
<
preProcessor
xsi:type
=
"core:FindEntity"
returnId
=
"true"
type
=
"base:Role"
target
=
"role"
>
<
search
>
<
core
:SimplePropertySearch
stringValue
=
"Administrator"
compareType
=
"=="
projection
=
"roleName"
></
core
:SimplePropertySearch>
</
search
>
</
preProcessor
>
</
roles
>
<
companies
>
<!-- Zur Laufzeit erscheint anstelle des Präprozessors das Element <
company
>ID_der_Firma_SL_Germany</
company
> -->
<
preProcessor
xsi:type
=
"core:FindEntity"
returnId
=
"true"
type
=
"base:CompanyAccount"
target
=
"company"
>
<
search
>
<
core
:SimplePropertySearch
stringValue
=
"SL Germany"
compareType
=
"=="
projection
=
"address.name1"
></
core
:SimplePropertySearch>
</
search
>
</
preProcessor
>
</
companies
>
<!-- Zur Laufzeit erscheint anstelle des Präprozessors das Element <
address
>Adresse_der_Firma_SL_Germany</
address
> -->
<
preProcessor
xsi:type
=
"core:FindEntity"
returnId
=
"false"
type
=
"base:CompanyAccount"
target
=
"address"
>
<
search
>
<
core
:SimplePropertySearch
stringValue
=
"SL Germany"
compareType
=
"=="
projection
=
"address.name1"
></
core
:SimplePropertySearch>
</
search
>
<
resolver
property
=
"address"
> <!-- aus dem Firmenkonto wird nur die Adresse übernommen -->
<
core
:RootEntityResolver
rootType
=
"base:CompanyAccount"
></
core
:RootEntityResolver>
</
resolver
>
</
preProcessor
>
</
base
:User>
</
core
:Import>