core:itemMatcher (Identifizieren eines Listeneintrags per Regel)

Prev Next

Struktur

XML

Beschreibung

Eingabe XML

<?xml version="1.0" encoding="UTF-8"?>
<shp:Shipment xmlns:shp="SCM.SHIPMENT" creatorId="1" ownerId="1" lastModifierId="1">
   <lineItems>
      <lineItem lineItemId="1" parentLineItemId="">
         <attributes>
            <shp:ShipmentLineItemReference>
               <value referenceType="ORDER_NUMBER" reference="4711"/>
            </shp:ShipmentLineItemReference>
            <shp:ShipmentLineItemText>
               <value textType="COMMENT">
                  <textValue>TMS</textValue>
               </value>
            </shp:ShipmentLineItemText>
         </attributes>
      </lineItem>
      <lineItem lineItemId="2" parentLineItemId="">
         <attributes>
            <shp:ShipmentLineItemReference>
               <value referenceType="ORDER_NUMBER" reference="4712"/>
            </shp:ShipmentLineItemReference>
            <shp:ShipmentLineItemText>
               <value textType="COMMENT">
                  <textValue>Lobster_pro</textValue>
               </value>
            </shp:ShipmentLineItemText>
         </attributes>
      </lineItem>
      <lineItem lineItemId="3" parentLineItemId="">
         <attributes>
            <shp:ShipmentLineItemReference>
               <value referenceType="ORDER_NUMBER" reference="4713"/>
            </shp:ShipmentLineItemReference>
            <shp:ShipmentLineItemText>
               <value textType="COMMENT">
                  <textValue>ERP</textValue>
               </value>
            </shp:ShipmentLineItemText>
         </attributes>
      </lineItem>
   </lineItems>
</shp:Shipment>

Die Daten einer Sendung (s. Sendungen) mit 3 Positionen und jeweils 2 Attributen (Referenzattribut ORDER_NUMBER und Textattribut COMMENT) soll geändert werden.

Zielsetzung:

Ein Import soll den Kommentar (COMMENT) für eine per Auftragsnummer (ORDER_NUMBER) identifizierte Position ändern.

Import XML

[...] 
<shp:Shipment [...]
	<lineItems>
		<lineItem>
			<core:itemMatcher>
				<core:EntityPropertyRule>
					<core:EqualsMatcher deepCompare="false">
						<core:LiteralValueResolver>
							<value xsi:type="xsd:string">4712</value>
						</core:LiteralValueResolver>
					</core:EqualsMatcher>
					<core:ChainedResolver>
						<core:TypedAttributeResolver typedAttribute="base:ReferenceAttribute"
							type="base:ReferenceType#ORDER_NUMBER" />
						<core:PropertyResolver property="reference" />
					</core:ChainedResolver>
				</core:EntityPropertyRule>
			</core:itemMatcher>
			<attributes>
				<shp:ShipmentLineItemText>
					<value textType="COMMENT">
						<textValue>Lobster Data Platform / Orchestration</textValue>
					</value>
				</shp:ShipmentLineItemText>
			</attributes>
		</lineItem>
	</lineItems>
</shp:Shipment>
[...]

Einer Position, deren Referenzattribut ORDER_NUMBER als Referenz (reference) den Text “4712” enthält, soll im Textattribut COMMENT der Textwert “Lobster Data Platform / Orchestration” zugewiesen werden.

Das Beispiel links zeigt einen Ausschnitt aus der Zielstruktur für einen Import. Im abgebildeten lineItem-Knoten definiert der core:itemMatcher-Knoten, wie die zu aktualisierende Position identifiziert werden soll. Im Beispiel ist eine Objekt-Feld-Regel (EntityPropertyRule), definiert, die für das Referenzattribut ORDER_NUMBER die Übereinstimmung des Referenzwerts (refernce) mit einem statischen Text (4712) verlangt.

Der nachfolgende attributes-Knoten definiert die Daten, die einer durch diese Regel “gefundenen” Position als Update zugewiesen werden sollen.

Ausgabe XML

<?xml version="1.0" encoding="UTF-8"?>
<shp:Shipment xmlns:shp="SCM.SHIPMENT" creatorId="1" ownerId="1" lastModifierId="1">
   <lineItems>
      <lineItem lineItemId="1" parentLineItemId="">
         <attributes>
            <shp:ShipmentLineItemReference>
               <value referenceType="ORDER_NUMBER" reference="4711"/>
            </shp:ShipmentLineItemReference>
            <shp:ShipmentLineItemText>
               <value textType="COMMENT">
                  <textValue>TMS</textValue>
               </value>
            </shp:ShipmentLineItemText>
         </attributes>
      </lineItem>
      <lineItem lineItemId="2" parentLineItemId="">
         <attributes>
            <shp:ShipmentLineItemReference>
               <value referenceType="ORDER_NUMBER" reference="4712"/>
            </shp:ShipmentLineItemReference>
            <shp:ShipmentLineItemText>
               <value textType="COMMENT">
                  <textValue>Lobster Data Platform / Orchestration</textValue>
               </value>
            </shp:ShipmentLineItemText>
         </attributes>
      </lineItem>
      <lineItem lineItemId="3" parentLineItemId="">
         <attributes>
            <shp:ShipmentLineItemReference>
               <value referenceType="ORDER_NUMBER" reference="4713"/>
            </shp:ShipmentLineItemReference>
            <shp:ShipmentLineItemText>
               <value textType="COMMENT">
                  <textValue>ERP</textValue>
               </value>
            </shp:ShipmentLineItemText>
         </attributes>
      </lineItem>
   </lineItems>
</shp:Shipment>

Ergebnis:

Die zweite Position (mit der ORDER_NUMBER “4712”) wurde aktualisiert.