Prioritätskontext Node/Datenelement

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Erstellen von Mappings > Mapping-Regeln und -Strategien >

Prioritätskontext Node/Datenelement

Wenn Sie eine Funktion auf unterschiedliche Datenelemente in einem Schema oder einer Datenbank anwenden, muss MapForce den Context Node kennen. Alle anderen Datenelemente werden dann relativ dazu verarbeitet. Dazu wird das gewünschte Datenelement (oder der Node) als Prioritätskontext definiert.

 

Mit Hilfe des Prioritätskontexts wird definiert, welche Ausführung beim Mapping nicht miteinander in Zusammenhang stehender Datenelemente vorgezogen wird.

 

Mappings werden immer von oben nach unten ausgeführt; Wenn Sie eine Schleife/Suche durch zwei Tabellen ausführen, so wird eine Schleife nach der anderen ausgeführt. Beim Mappen von Elementen, die nicht miteinander in Zusammenhang stehen, weiß  MapForce nicht, welche Schleife zuerst ausgeführt werden soll, wenn kein Prioritätskontext definiert ist, und wählt daher automatisch die erste Tabelle oder Datenquelle aus.

 

Lösung:

Entscheiden Sie, welche Tabelle oder Datenquelle zuerst verarbeitet/durchsucht werden soll, und setzen Sie den Prioritätskontext auf den Konnektor zu diese Tabelle.

 

Unten sehen Sie eine vereinfachte Version der Datei DB_CompletePO.mfd aus dem Ordner ...\MapForceExamples .

 

Beachten Sie, dass es in diesem Beispiel mehrere Quellkomponenten gibt. ShortPO ist ein Schema, das mit einer XML-Instanzdatei verknüpft ist, während es sich bei CustomersAndArticles um eine Datenbank handelt. Die Daten aus diesen beiden Komponenten werden nun auf das Schema / die XML-Datei CompletePO gemappt. Das Prioritätskontext-Symbol wird durch einen Kreis gekennzeichnet.

 

Wenn Sie den Parameter a der equal-Funktion als Prioritätskontext definieren, geschieht Folgendes:

 

Das Element CustomerNr in ShortPO wird mit dem Datenelement Number in der Datenbank verglichen.
CustomerNr wurde als Prioritätskontext definiert und in den a-Parameter der equal-Funktion gesetzt.
Anschließend wird die Datenbank CustomersAndArticles (einmal) nach derselben Nummer durchsucht. Der b-Parameter enthält das Datenelement Number aus der Datenbank.
Wird die Nummer gefunden, wird das Ergebnis an den Boolschen Parameter der Filter-Funktion (Customers) übergeben.
Der node/row-Parameter übergibt die Customer-Daten an "on-true", wenn der Boolesche Parameter "true" ist, d.h. wenn dieselbe Nummer gefunden wurde.
Anschließend wird der Rest der Kundendaten übergeben: Die Datenelemente Number, FirstName, LastName werden alle mit den entsprechenden Datenelementen im Zielschema verbunden.

context-switch

Das bedeutet, die Datenbank wird nur einmal pro Element "CustomerNr" aus ShortPO durchsucht.

 

 

Wenn Sie den Parameter b der equal-Funktion als Prioritätskontext definieren würden, hätte dies zur Folge dass:

MapForce nach der ersten Nummer sucht und diese aus der Datenbank in den b-Parameter lädt
diese mit der CustomerNr im Parameter a von ShortPO vergleicht,
wenn sie nicht gleich ist, all CustomerNr-Datenelemente von ShortPO durchsucht
die Datenbank durchsucht und die nächste Nummer in b lädt, diese mit a vergleicht und
durch alle Number-Elemente in der Datenbank iteriert, um die entsprechende Nummer in ShortPO zu finden.

 

context-switch2

Das bedeutet, es wird für jede Nummer eine Datenbankabfrage generiert. Das Ergebnis wird anschließend mit jedem CustomerNr-Datenelement von ShortPO verglichen.

 

Prioritätskontext und benutzerdefinierte Funktionen

Wenn eine benutzerdefinierte Funktion vom Typ "inline" definiert wurde, (Standardeinstellung), so kann kein Prioritätskontext auf einem der Parameter der benutzerdefinierten Funktion definiert werden. Die benutzerdefinierte Funktion kann natürlich andere reguläre benutzerdefinierte Funktionen enthalten, die Parameter haben, auf denen Prioriätskontexte definiert wurden.


© 2019 Altova GmbH