core:FindEntityAttribute (Präprozessor)
Der FindEntityAttribute-Präprozessor dient zum Zugriff auf die ID oder einen anderen Wert einer Entität in einem Import für eine andere Entität, der einem bestimmten Zielattribut (XML-Attribut) der importierten Entität als Wert zugewiesen werden soll.
Der Präprozessor muss dazu innerhalb des XML-Knotens der Objektstruktur platziert werden, deren Attribut er setzen soll. Er enthält einen search-Knoten, der als Suche oder Tupel-Suche ausgeprägt werden kann.
Aus einer Suche wird immer die ID (id ) als Wert für das Zielattribut übernommen.
Um einen anderen Wert als die ID (id)zuzuweisen, kann anstelle des Knotens ISearchProjection genau eine Projektion angegeben werden, um eine einspaltige Tupel-Suche zu definieren.
In beiden Fällen definiert das erste Egebnis den Wert des Zielattributs.
Die folgende Struktur kann ausgehend von der Vorlage preProcessor:FindEntityAttribute (s. Lobster_pro Vorlagen) direkt an der gewünschten Position einer Import-Struktur eingebunden werden.
Parameter |
Typ |
Bedeutung |
Inhalt (Fixwert/Beispiel) |
xsi:type |
String-Attribut |
Typ des Preäprozessors |
core:FindEntityAttribute |
type |
String-Attribut |
Entitätstyp für die auszuführende Suche |
base:Role |
targetAttribute |
String-Attribut |
Name des Zielattributs, dessen Wert gesetzt werden soll |
role |
search |
Unterknoten |
definiert eine Suche für den per type spezifizierten Entitätstyp |
s. Beispiel unten |
Beispiel:
Für die Firma "MY COMPANY" soll per Single-Import ein Gastbenutzer (s. Gastbenutzer) erstellt werden, für den das Firmenkonto als Besitzer (ownerId) gelten soll, das auch die "MY COMPANY" besitzt.
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
core
:Import ...
xmlns:base
=
"SCM.BASE"
action
=
"CREATE"
>
<
base
:GuestUser
loginToken
=
"DEMO_GUEST_USER_TOKEN"
active
=
"true"
locale
=
"de"
roleId
=
"2201"
maxLogins
=
"3"
loginCount
=
"0"
emailAddress
=
"user@madeup.compa.ny"
maxConcurrentSessions
=
"1"
>
<!-- Firmenkonto für den Gastbenutzer als Attribut companyId zuordnen -->
<
preProcessor
xsi:type
=
"core:FindEntityAttribute"
type
=
"base:CompanyAccount"
targetAttribute
=
"companyId"
>
<
search
>
<
core
:SimplePropertySearch
projection
=
"address.name1"
compareType
=
"=="
stringValue
=
"MY COMPANY"
></
core
:SimplePropertySearch>
</
search
>
</
preProcessor
>
<!-- Dessen Besitzer auch als Besitzer des Gastbenutzerkontos per Attribut ownerId zuordnen -->
<
preProcessor
xsi:type
=
"core:FindEntityAttribute"
type
=
"base:CompanyAccount"
targetAttribute
=
"ownerId"
>
<
search
>
<
core
:SimplePropertySearch
projection
=
"address.name1"
compareType
=
"=="
stringValue
=
"MY COMPANY"
></
core
:SimplePropertySearch>
<
core
:PropertyProjection
property
=
"ownerId"
></
core
:PropertyProjection>
</
search
>
</
preProcessor
>
</
base
:GuestUser>
</
core
:Import>
Der erste Präprozessor führt eine Suche nach einem Firmenkonto aus, dessen Name (address.name1) "MY COMPANY" lautet. Dessen ID (id) wird dem Firma-Feld (XML-Attribut companyID) für den Gastbenutzer zugewiesen.
Der zweite Präprozessor führt eine Tupel-Suche nach einem Firmenkonto mit denselben Kriterien aus, spezifiziert aber eine Projektion für das Besitzer-Feld (ownerId). Diese wird dem Besitzer-Feld (XML-Attribut ownerId) für den Gastbenutzer zugewiesen.