Altova MapForce 2024 Enterprise Edition

In diesem Beispiel wird gezeigt, wie Sie Nodes auf Basis einer true/false-Bedingung filtern können. Zu diesem Zweck wird eine Filter: Nodes/Zeilen ( mff_ic_insert_filter )-Bedingung eingesetzt. Das in diesem Beispiel gezeigte Verfahren lässt sich nicht nur auf XML-Daten, sondern genauso auch auf andere Komponententypen wie CSV oder Text anwenden. Sie können für Datenbanken zwar einen Filter verwenden, doch empfiehlt sich in diesem Fall die Verwendung einer SQL WHERE/ORDER-Komponente, da dies bessere Ergebnisse liefert (siehe SQL WHERE/ORDER-Komponente).

 

Das in diesem Beispiel beschriebene Mapping befindet sich unter dem folgenden Pfad: <Dokumente>\Altova\MapForce2024\MapForceExamples\MarketingExpenses.mfd.

mff_map_MarketingExpenses

Wie oben gezeigt, liest das Mapping Daten aus einer XML-Quelldatei, die einen Spesenbericht enthält aus ("ExpReport") und schreibt Daten in eine XML-Zieldatei ("MarketingExpenses"). Zwischen der Ziel- und der Quellkomponente befinden sich einige weitere Komponenten. Die wichtigste davon ist der expense-item-Filter ( ic-component_filter ), der das Thema dieses Kapitels ist.

 

Ziel des Mappings ist es, nur die Ausgabenposten herauszufiltern, die der Marketing-Abteilung zugeschrieben werden. Zu diesem Zweck wurde eine Filter-Komponente zum Mapping hinzugefügt. (Um einen Filter hinzuzufügen, klicken Sie auf das Menü Einfügen und wählen Sie den Befehl Filter: Nodes/Zeilen.)

 

Um festzustellen, ob ein Ausgabenposten zu Marketing gehört, wird der Wert des Attributs "expto" in der Quellkomponente überprüft. Dieses Attribut hat den Wert "Marketing", wenn es sich um eine Marketing-Ausgabe handelt. Im Codefragment unten gehören das erste und dritte Datenelement zu Marketing, das zweite zu Development und das vierte zu Sales:

 

...  

  <expense-item type="Meal" expto="Marketing">
    <Date>2003-01-01</Date>
    <expense>122.11</expense>
  </expense-item>
  <expense-item type="Lodging" expto="Development">
    <Date>2003-01-02</Date>
    <expense>122.12</expense>
  </expense-item>
  <expense-item type="Lodging" expto="Marketing">
    <Date>2003-01-02</Date>
    <expense>299.45</expense>
  </expense-item>
  <expense-item type="Entertainment" expto="Sales">
    <Date>2003-01-02</Date>
    <expense>13.22</expense>
  </expense-item>

...

XML-Input vor Ausführung des Mappings

Im Mapping-Bereich wird der node/row-Input des Filters mit dem expense-item-Node in der Quellkomponente verbunden. Damit wird gewährleistet, dass die Filterkomponente die Liste der zu verarbeitenden Nodes erhält.

 

Als Bedingung, anhand welcher die Filterung erfolgen soll, haben wir die equal-Funktion aus der MapForce core-Bibliothek hinzugefügt (nähere Informationen dazu finden Sie unter Hinzufügen einer Funktion zum Mapping). Die equal-Funktion vergleicht den Wert des Attributs expto mit einer Konstante, die den Wert "Marketing" hat. (Um eine Konstante hinzuzufügen, klicken Sie auf das Menü Einfügen und anschließend auf Konstante.)

 

Da wir nur diejenigen Datenelemente, die die Bedingung erfüllen, filtern müssen, haben wir nur den on-true-Input des Filters mit der Zielkomponente verbunden.

 

Wenn Sie durch Klicken auf das Fenster Ausgabe eine Vorschau auf das Mapping-Ergebnis anzeigen, wertet MapForce für jeden expense-item-Node die mit dem bool-Input des Filters verbundene Bedingung aus. Wenn die Bedingung true ist, wird der expense-item-Node an die Zielkomponente übergeben; andernfalls wird er ignoriert. In der Ausgabe werden folglich nur die Ausgabenposten, die den Kriterien entsprechen, angezeigt:

 

...  

  <expense-item>
    <type>Meal</type>
    <Date>2003-01-01</Date>
    <expense>122.11</expense>
  </expense-item>
  <expense-item>
    <type>Lodging</type>
    <Date>2003-01-02</Date>
    <expense>299.45</expense>
  </expense-item>

...

XML-Ausgabe nach Ausführung des Mappings

© 2017-2023 Altova GmbH