Altova MapForce 2024 Enterprise Edition

Wenn Sie Daten filtern oder basierend auf einer Bedingung einen Wert ermitteln müssen, können Sie dazu die folgenden Komponententypen verwenden:

 

Filter: Nodes/Zeilen ( mff_ic_insert_filter )

SQL WHERE/ORDER ( ic-component_whereorder )

If-Else-Bedingung ( mff_ic_if_else )

 

Sie können diese Komponenten entweder über das Menü Einfügen oder über die Symbolleiste Komponente einfügen zum Mapping hinzufügen. Beachten Sie, dass jede der obigen Komponenten ein bestimmtes Verhalten aufweist und bestimmte Voraussetzungen hat. Die Unterschiede sind in den folgenden Abschnitten erklärt.

 

 

Filtern von Nodes oder Zeilen

Um Daten, darunter XML-Nodes oder CSV-Zeilen, zu filtern, verwenden Sie eine Filter: Nodes/Zeilen-Komponente. Mit Hilfe der Filter: Nodes/Zeilen-Komponente können Sie eine Untergruppe von Nodes anhand einer true- oder false-Bedingung aus einer größeren Datenmenge abrufen. Ihre Struktur im Mapping-Bereich sieht folgendermaßen aus:

mff_filter_component

In der oben gezeigten Struktur definiert die mit bool verbundene Bedingung, ob der verbundene Node/die verbundene Zeile in den on-true oder in den on-false Output geleitet wird. Wenn die Bedingung true lautet, wird der Node/die Zeile an den on-true-Output übergeben. Umgekehrt, wenn die Bedingung false ist, wird der Node/die Zeile an den on-false-Output übergeben.

 

Wenn Sie in Ihrem Mapping nur Datenelemente, die die Filterbedingung erfüllen, verwenden möchten, können Sie den on-false-Output unverbunden lassen. Wenn die Datenelemente, die die Filterbedingung nicht erfüllen, verarbeitet werden müssen, verbinden Sie den on-false-Output mit einer Zielkomponente für solche Datenelemente. Wenn Sie eine Ausnahme hinzufügen möchten, falls die Filterbedingung nicht erfüllt wird, muss der on-false-Output verbunden werden (siehe Hinzufügen von Ausnahmeereignissen).

 

Eine schrittweise Anleitung anhand eines Mapping-Beispiels finden Sie unter Beispiel: Filtern von Nodes.

 

 

Filtern von Datenbankdaten

Filter: Nodes/Zeilen-Komponenten können Daten aus jeder anderen von MapForce unterstützten Komponentenstruktur filtern, darunter auch Datenbankdaten. Wenn Sie jedoch Daten aus einer Datenbank filtern möchten, wird empfohlen, stattdessen eine SQL WHERE/ORDER-Komponente zu verwenden. Die SQL WHERE/ORDER-Komponente ist für das Arbeiten mit Datenbanken optimiert und funktioniert hier besser als eine Filter: Nodes/Zeilen-Komponente.

mff_sql_where

Nähere Informationen zu solchen Komponenten finden Sie unter SQL WHERE/ORDER-Komponente.

 

 

Rückgabe eines Werts auf Basis einer Bedingung

Wenn Sie einen einzelnen Wert (und nicht einen Node oder eine Zeile) auf Basis einer Bedingung abrufen möchten, verwenden Sie eine If-Else-Bedingung. Beachten Sie, dass  If-Else-Bedingungen sich nicht zum Filtern von Nodes oder Zeilen eignen. Im Gegensatz zu Filter: Nodes/Zeilen-Komponenten gibt eine If-Else-Bedingung einen Wert vom Typ simpleType (z.B. einen String oder eine Ganzzahl) zurück. If-Else-Bedingungen eignen sich daher nur für Szenarien, in denen ein einzelner Wert anhand einer Bedingung verarbeitet werden soll. Angenommen, Sie haben eine Liste von Durchschnittstemperaturen pro Monat im folgenden Format:

 

<Temperatures>  
  <data temp="19.2" month="2010-06" />
  <data temp="22.3" month="2010-07" />
  <data temp="19.5" month="2010-08" />
  <data temp="14.2" month="2010-09" />
  <data temp="7.8" month="2010-10" />
  <data temp="6.9" month="2010-11" />
  <data temp="-1.0" month="2010-12" />
</Temperatures>

 

Mit Hilfe einer If-Else-Bedingung können Sie für jedes Datenelement in der Liste, dessen Temperaturwert höher als 20 Grad Celsius beträgt, den Wert "hoch" und für jedes Datenelement, dessen Temperaturwert niedriger als 5 Grad Celsius beträgt, "niedrig" zurückgeben.

 

Im Mapping sieht die Struktur der If-Else-Bedingung folgendermaßen aus:

ifelse-extend01

Wenn die mit bool verbundene Bedingung true ist, so wird der mit value-true verbundene Wert als result ausgegeben. Wenn die Bedingung false ist, so wird der mit value-false verbundene Wert als result ausgegeben. Der Datentyp von result ist im Vorhinein nicht bekannt; er hängt vom Datentyp des mit value-true oder value-false verbundenen Werts ab. Wichtig ist, dass es sich immer um einen simpleType (String, Ganzzahl, usw.) handeln muss. Die Verbindung von Input-Werten von complexTypes (wie Nodes oder Zeilen) wird von If-Else-Bedingungen nicht unterstützt.

 

If-Else-Bedingungen sind erweiterbar, d.h. Sie können durch Klick auf die Schaltfläche Hinzufügen ( gui_add_function_parameter ) mehrere Bedingungen zur Komponente hinzufügen. Um eine zuvor hinzugefügte Bedingung zu löschen, klicken Sie auf die Schaltfläche Löschen ( gui_delete_function_parameter ). Auf diese Art können Sie mehrere Bedingungen überprüfen und für jede Bedingung einen anderen Wert zurückgeben, falls die Bedingung true ist.

mff_if_else_extendable

Erweiterte If-Else-Bedingungen werden von oben nach unten ausgewertet (die erste Bedingung wird als erste überprüft, anschließend die zweite, usw.). Wenn ein Wert zurückgegeben werden soll, wenn keine der Bedingungen true ist, verbinden Sie sie mit otherwise.

 

Eine schrittweise Anleitung anhand eines Mapping-Beispiels finden Sie unter Beispiel: Rückgabe eines Werts auf Basis einer Bedingung.

© 2017-2023 Altova GmbH