core:delete (Löschen individueller Elemente)

Siehe auch: core:clear (Löschen aller Einträge einer Liste)

Als XML Attribut
Mit dem Steuerungsattribut core:delete können per Import einzelne Elemente (z. B. Attribute oder Postionen) aus einem Datenobjekt gelöscht werden.

Das Attribut muss dabei immer dem Element zugewiesen werden, das gelöscht werden soll.

Wie beim Aktualisieren muss das betreffende Element eindeutig identifiziert sein, damit es effektiv gelöscht wird. Dazu gibt es abhängig vom Elementtyp unterschiedliche Möglichkeiten, wie die Beispiele verdeutlichen.

HINWEIS◄ Wenn der Import das Steuerungsattribut core:delete für ein Element spezifiziert, das bisher im Datenobjekt nicht vorhanden ist, wird es durch den Import auch nicht erzeugt. Diese Technik wird z. B. genutzt, um Plurale Attribute komplett zu leeren (s. Beispiele für core:clear (Löschen aller Einträge einer Liste)).

HINWEIS◄ In einfachen Listen, die keinen eindeutigen Zugriff auf die enthaltenen Einträge unterstützen, können Einträge nicht individuell aktualisiert oder gelöscht werden. Solche Listen können nur per core:clear komplett geleert und neu befüllt werden (s. core:clear (Löschen aller Einträge einer Liste)). Dies betrifft z. B. die Aufzählungen für Rollen (roles) und Firmen (companies) für einen Benutzer.

Als XML Knoten
Darüber hinaus kann core:delete auch als Knoten verwendet werden, dessen Textwert den Namen des zu "löschenden" Feldes beinhaltet. Dabei können mehrere core:delete Knoten in einer Hierarchiestufe vorkommen.
Die Knoten Variante wird benötigt, um simple Felder eines Geschäftsobjektes explizit auf null zu setzen. Dies wäre nicht ohne weiteres möglich, da Felder mit leeren oder null-Werten von einem Import im UPDATE Modus ignoriert werden.
Ferner würden Felder mit numerischem Typ von der _data Integration Unit zu 0 umgewandelt werden.
Beispiel: <core:delete>attributes</core:delete> Löscht sämtliche Attribute eines Geschäftsobjekts.

Hinweis: Mit core:delete Knoten markierte Felder werden unabhängig vom Wert des zugehörigen Feldes zurückgesetzt. Somit entscheidet einzig die Sichtbarkeit des core:delete Knotens darüber, ob das Feld zurückgesetzt wird oder nicht.

Beispiel 1: Entfernen eines per Typ identifizierten Typisierten Attributs

Eine Bestellung verwendet das Datumsattribut "Liefertermin fix". Durch einen Import sollen Angaben für dieses Merkmal unter bestimmten Voraussetzungen (z. B. weil das führende System ein Storno-Kennzeichen übermittelt) entfernt werden. Diese Bedingung kann beim Mapping im Importprofil abgebildet werden, indem dem Attributfeld core:delete_attr durch eine geeignete Funktion der Wert true oder false zugewiesen wird.

Der rechts abgebildete Import verwendet die Aktion UPDATE.

  • Im hier nur angedeuteten search-Knoten muss die betreffende Bestellung per Suche eindeutig identifiziert werden.


  • Im attributes-Knoten erscheint ein OrderDate-Element (Datumsattribut), das dem Attribut core:delete den Wert true


<?xml version="1.0" encoding="UTF-8"?>
<core:Import ... action="UPDATE">
<search> ... </search>
<ord:Order>
<attributes>
...
<ord:OrderDate core:delete="true">
<value dateType="DELIVERY_FIXED">
</value>
</ord:OrderDate>
...
</attributes>
</ord:Order>
</core:Import>

ACHTUNG◄ Während es für die Ausführung des Import-Profils keine Rolle spielt, ob das Datumsattribut in der Bestellung vorhanden ist, wird das Profil mit einer Fehlermeldung abgebrochen, falls der angegebene Datumstyp in Lobster Data Platform / Orchestration unbekannt ist.

Beispiel 2: Entfernen einer per "Pos. Nr." identifizierten Bestellposition

Ein Import soll die den ersten Eintrag für einen bestimmten Positionstyp ("Serviceposition" mit dem internen Präfix SER für die Positionsnummer) aus einer Bestellung entfernen.

Der rechts abgebildete Import verwendet die Aktion UPDATE.

  • Im hier nur angedeuteten search-Knoten muss die betreffende Bestellung per Suche eindeutig identifiziert werden.


  • Im lineItems-Knoten erscheint ein lineItem-Element, das dem Attribut core:delete den Wert true zuordnet und dabei auf die lineItemId "SER1" verweist.

Die erste "Serviceposition" wird gelöscht, sofern vorhanden.

<?xml version="1.0" encoding="UTF-8"?>
<core:Import action="UPDATE">
<search> ... </search>
<ord:Order>
...
<lineItems>
<lineItem core:delete="true" lineItemId="SER1">
</lineItem>
</lineItems>
</ord:Order>
</core:Import>

Beispiel 3: Entfernen eines per Index identifizierten Eintrags für ein plurales Attribut

Ein Import soll aus einer Bestellung den zweiten Eintrag für das plurale Textattribut "Container Nr." entfernen.

Der rechts abgebildete Import verwendet die Aktion UPDATE.

  • Im hier nur angedeuteten search-Knoten muss die betreffende Bestellung per Suche eindeutig identifiziert werden.


  • Im attributes-Knoten erscheint ein Textattribut (OrderText) vom Typ CONTAINER_NO das dem Attribut core:delete den Wert true zuordnet und dessen value den index "1" (beginnend bei 0) haben soll .

Die zweite "Container Nr." wird gelöscht, sofern vorhanden.

<?xml version="1.0" encoding="UTF-8"?>
<core:Import ... action="UPDATE">
<search> ... </search>
<ord:Order>
<attributes>
<ord:OrderText core:delete="true">
<value index="1" textType="CONTAINER_NO"></value>
</ord:OrderText>
</attributes>
</ord:Order>
</core:Import>

HINWEIS◄ Anstelle des für plurale Attribute explizit als XML-Attribut je Wert definierten index könnte man auch auf den internen Index per core:index-Attribut zugreifen. Allerdings muss der Indexwert dann im Attribut-Knoten selbst und nicht im Unterknoten value zugewiesen werden:

<?xml version="1.0" encoding="UTF-8"?>
<core:Import ... action="UPDATE">
<search> ... </search>
<ord:Order>
<attributes core>
<ord:OrderText core:delete="true" core:index="1">
<value textType="CONTAINER_NO"></value>
</ord:OrderText>
</attributes>
</ord:Order>
</core:Import>

Beispiel 4: Zurücksetzen/Löschen des Wertes eines einfachen Objektfeldes

Das rechts abgebildete Import XML sucht und updatet eine Bestellung
und setzt dabei den Wert des Feldes "numberOfPackages" auf null zurück.

Dies ist ohne die Verwendung von <core:delete> nicht möglich,
da leere oder null Feldwerte im Modus UPDATE ignoriert werden.
Zusätzlich werden Feldwerte von numerischen Typen von der _data IU auf 0 gesetzt,
wenn deren Wert leer oder null ist.

<?xml version="1.0" encoding="UTF-8"?>
<core:Import ... action="UPDATE">
<search> ... </search>
<ord:Order>
<core:delete>numberOfPackages</core:delete>
</ord:Order>
</core:Import>