Beispiel: Look-up und Verkettung

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

Startseite >  Funktionen > Benutzerdefinierte Funktionen >

Beispiel: Look-up und Verkettung

Zur Veranschaulichung der Verwendung von benutzerdefinierten Funktionen stehen in MapForce mehrere Demo-Mappings zur Verfügung. Eines dieser Mappings ist die Datei PersonListByBranchOffice.mfd aus dem Ordner <Dokumente>\Altova\MapForce2019\MapForceExamples\.

mf_udf_19

PersonListByBranchOffice.mfd

Dieses Mapping hat die folgenden Aufgaben:

 

Extrahierung von Daten aus einer XML-Quelldatei und Schreiben der Daten in eine XML-Zieldatei. Die Daten bestehen aus Mitarbeiterdaten wie z.B. Vor- und Zuname.
Suchen bestimmter Daten über die einzelnen Mitarbeiter (Telnr., E-Mail-Adresse, Position) mittels Look-up in einer separaten XML-Datei.
Verarbeitung der Daten auf die gewünschte Art, bevor diese in die Zielkomponente geschrieben werden. Dabei müssen Telefonnummer, E-Mail- und Position der einzelnen Personen als jeweils ein einziger (durch Kommata getrennter) String dargestellt und in das Element Details der XML-Zielkomponente geschrieben werden.
Extrahierung nur derjenigen Elemente, auf die bestimmte Kriterien - in diesem Fall Informationen über Angestellte aus einer bestimmten Niederlassung - zutreffen. Für Komponenten, die dieses Mapping aufrufen, muss der Name der Niederlassung als Parameter über die Befehlszeile definiert werden können, z.B. wenn das Mapping von MapForce Server ausgeführt wird.

 

Werfen wir nun einen Blick auf die Komponenten, die die obigen Aufgaben implementieren:

 

Der Input-Parameter des Mappings ("OfficeName") ist eine einfache Input-Komponente. Über eine Konstante wird ein Standardwert ("Nanonull, Inc.") bereitgestellt. Dieser Wert wird verwendet, wenn die aufrufende Komponente des Mappings keinen Parameterwert bereitstellt. Mehr Informationen über einfache Input-Komponenten finden Sie unter Bereitstellen von Parametern für das Mapping.
Um nur Mitarbeiter herauszufiltern, die zu einer bestimmten Niederlassung gehören, wird im Mapping eine Filterkomponente ("Office") verwendet. Mit dem Filter wird überprüft, ob der vom Parameter bereitgestellte Niederlassungsname mit dem Niederlassungsnamen in der XML-Quelldatei übereinstimmt. Falls ja, übergibt der Filter Daten aus dem Quelldatenelement Office an die Zielkomponente. Nähere Informationen zu Filtern finden Sie unter Filter und Bedingungen.
Um mittels Look-up Informationen aus der zweiten XML-Quelldatei abzurufen, wird im Mapping die benutzerdefinierte Funktion "LookupPerson" aufgerufen. Die Logik dieser Funktion wird weiter unten näher erläutert.
Zur Verarbeitung der Mitarbeiterdaten ruft die Funktion "LookupPerson" intern weitere Funktionen auf, die Informationen über die einzelnen Mitarbeiter abrufen und auf geeignete Weise miteinander verketten. All diese Operationen befinden sich im Mapping dieser Funktion und sind im Hauptmapping nicht sichtbar. Dies ist ein typisches Beispiel für eine Verkapselung. Mit Hilfe der Funktion "LookupPerson" wird anschließend das Datenelement Details in der XML-Zielkomponente befüllt.

 

Look-up-Implementierung

Die Look-up-Funktionalität wird über die Funktion "LookupPerson", deren Definition Sie unten sehen, bereitgestellt.

mf_udf_20

"LookupPerson" Funktion

Wie oben gezeigt, enthält die Funktion die XML-Quelldatei, aus der die Daten abgerufen werden sollen. Als nächstes weist die Funktion drei Input-Parameter auf, die die Look-up-Werte Office_Name, First_Name und Last_Name bereitstellen. Alle Input-Parameter wurden als obligatorisch definiert (d.h. das Kontrollkästchen Input ist erforderlich im Dialogfeld "Eigenschaften" wurde aktiviert).

 

Bei der Funktion "EqualAnd" handelt es sich um eine separate, in die aktuelle Funktion inkludierte, benutzerdefinierte Funktion. Das Ergebnis dieser Funktion ist ein Boolescher Wert. Bei Aufruf dieser Funktion in der oben gezeigten Reihenfolge wird die folgende Boolesche Logik bereitgestellt:

mff_udf_lookup_example

Der Wert der Funktion (TRUE oder FALSE) wird jedes mal, wenn ein neues Datenelement verarbeitet wird, an den Filter übergeben. Wenn der Filter den Wert TRUE erhält, ist die Look-up-Operation erfolgreich und die Einzelheiten zu dem Mitarbeiter werden abgerufen und an das übergeordnete Mapping übergeben. Andernfalls wird das nächste Datenelement im Kontext überprüft, usw. bis die Schleife fertig verarbeitet ist.

 

Der Konnektor in der ersten Instanz der Funktion "EqualAnd" weist einen Kreis um den Konnektor auf. Dies bedeutet, dass dieser Parameter als Prioritätskontext definiert wurde. Der Prioritätskontext ist eine optionale Funktionalität zur Optimierung der Mapping-Ausführung. Er stellt sicher, dass die Personendaten der Niederlassung, die vom Input-Parameter a bereitgestellt wird, als erstes verarbeitet werden. Um einen Parameter als Prioritätskontext zu definieren, klicken Sie mit der rechten Maustaste darauf und wählen Sie im Kontextmenü den Eintrag Priorität - Kontext. Nähere Informationen dazu finden Sie unter Prioritätskontext Node/Datenelement.

 

Implementierung der Verkettung

Eine weitere in die Funktion "LookupPerson" verschachtelte Funktion ist die Funktion "Person2Details". Diese Funktion gibt einen String-Wert zurück. Sie verkettet die drei als Parameter erhaltenen Werte sowie zwei Textkonstanten, wie unten gezeigt:

mf_udf_21

Funktion "Person2Details"

Die concat-Funktion ist eine vordefinierte MapForce-Funktion, die so viele Parameter wie erforderlich erhalten kann, siehe Hinzufügen oder Löschen von Funktionsargumenten.

 

Ausführen des Mappings

Um in MapForce eine Vorschau auf das Ergebnis der Mapping-Ausführung zu sehen, klicken Sie auf das Register Ausgabe. Das Mapping wird mit dem Standard-Input-Parameter ("Nanonull, Inc.") ausgeführt und ruft in der Folge nur die Mitarbeiterdaten dieser Niederlassung ab. Um Daten für eine andere Niederlassung abzurufen, ändern Sie die mit dem Input-Parameter verbundene Konstante von "Nanonull, Inc." in "Nanonull Partners, Inc." und führen Sie das Mapping erneut aus.


© 2019 Altova GmbH