Beispiel: Filtern und Nummerieren von Nodes
Das in diesem Beispiel beschriebene Mapping finden Sie unter dem Namen PositionInFilteredSequence.mfd im Ordner <Dokumente>\Altova\MapForce2024\MapForceExamples\.
Dieses Mapping liest eine XML-Datei mit Kontaktdaten mehrerer Personen, filtert die Daten und schreibt sie in eine XML-Zieldatei. Ziel des Mappings ist es, nur die Personen aus der XML-Quelldatei zu filtern, deren Nachname mit dem Buchstaben "M" oder einem nachfolgenden Buchstaben beginnt. Außerdem müssen die extrahierten Kontakte nummeriert werden. Die Nummerierung dient als eindeutiger Identifier für die einzelnen Kontakte in der XML-Zieldatei.
![mf_map_PositionInFilteredSequence](./images/mf_map_positioninfilteredsequence.png)
PositionInFilteredSequence.mfd
Um das obige Ziel zu erreichen, wurden die folgenden Komponententypen zum Mapping hinzugefügt:
•ein Filter (siehe Filter und Bedingungen )
•eine komplexe Variable (siehe Hinzufügen von Variablen)
•die Funktionen greater und position (siehe Hinzufügen einer Funktion zum Mapping)
•eine Konstante (Um eine Konstante hinzuzufügen, wählen Sie den Menübefehl Einfügen | Konstante).
Für die Variable wird dasselbe Schema wie für die Quellkomponente verwendet. Wenn Sie mit der rechten Maustaste auf die Variable klicken und im Kontextmenü den Befehl Eigenschaften wählen, sehen Sie, dass der Node BranchOffices/Office/Contact als Root-Node für diese Variablenstruktur ausgewählt ist.
Zuerst werden die Daten der Quellkomponente an den Filter übergeben. Der Filter übergibt nur die Datensätze an die Variable, die die Filterbedingungen erfüllen. In diesem Fall wurde der Filter so konfiguriert, dass nur die Contact Nodes abgerufen werden, deren Nachname gleich oder größer "M" ist. Zu diesem Zweck vergleicht die Funktion greater jedes last-Datenelement mit dem Konstantenwert "M".
In der Variable wurde der compute-when Input mit dem Root-Datenelement der Quellkomponente (BranchOffices) verbunden. Dadurch wird die Variable zur Laufzeit jedes Mal, wenn ein neues Datenelement aus der Sequenz in der Quellkomponente gelesen wird, erneut ausgewertet. In diesem Mapping macht es jedoch keinen Unterschied, ob das compute-when-Datenelement verbunden ist oder nicht, da die Variable (indirekt über den Filter) mit dem Quelldatenelement Contact verbunden ist und so oft, wie Instanzen von Contact, die die Filterbedingungen erfüllen, vorhanden sind, berechnet wird.
Die Funktion position gibt für jede Iteration der Variablen die Nummer der aktuellen Sequenz zurück. Nur acht Kontakte erfüllen die Filterbedingungen; wenn Sie eine Vorschau des Mappings anzeigen und sich die Ausgabe ansehen, sehen Sie daher, dass die IDs 1 bis 8 in das ID-Element der Zielkomponente geschrieben wurden.
Falls Sie sich fragen, wozu die Variable überhaupt benötigt wurde: Der Grund dafür ist, dass alle Datensätze nummeriert werden müssen. Hätten wir das Filterergebnis direkt mit der Zielkomponente verbunden, hätte es keine Möglichkeit gegeben, die einzelnen Instanzen von Contact durchzunummerieren. Die Aufgabe der Variablen in diesem Mapping ist somit, die einzelnen Instanzen von Contact temporär im Mapping zu speichern, damit diese nummeriert werden können, bevor sie in die Zielkomponente geschrieben werden.