Sequenzen
Das Verständnis von Sequenzen ist für die Beherrschung der Mapping-Techniken in MapForce unerlässlich. Die wichtigste Regel für Sequenzen lautet folgendermaßen:
Wenn eine Sequenz bestehend aus mehr als einem Node mit einem Ziel-Node verbunden wird, wird eine Schleife generiert, die so viele Ziel-Nodes generiert, wie Quell-Nodes vorhanden sind.
Wenn ein Filter zwischengeschaltet ist, überprüft MapForce, ob in der Sequenz mindestens eine Boolesche Bedingung vorhanden ist, die true ergibt und mappt die Daten, die diese Bedingung erfüllen, auf die Zielkomponente.
Wenn eine Sequenz leer ist, wird auf Seite der Zielkomponente nichts generiert. Wenn die Zielkomponente z.B. ein XML-Dokument ist und die Quellsequenz leer ist, werden in der Zielkomponente gar keine XML-Elemente erstellt.
Ausnahmeereignisse
Beachten Sie, dass es für die Regel zu Sequenzen einige Ausnahmen gibt (siehe unten).
Ausnahme 1
Wenn es sich beim Zieldatenelement um ein XML-Root-Element handelt, wird dieses nur genau einmal erstellt. Wenn Sie damit eine Sequenz verbinden, ist das Ergebnis dem Schema gemäß möglicherweise nicht gültig. Wenn auch Attribute des Root-Elements verbunden werden, schlägt die XML-Serialisierung zur Laufzeit fehl. Vermeiden Sie es daher, eine Sequenz mit dem XML-Root-Element zu verbinden.
Ausnahme 2
Wenn im Zieldatenelement nur ein einziger Wert zulässig ist, wird es nur einmal erstellt. Beispiele für Datenelemente, in denen nur ein einziger Wert zulässig ist: XML-Attribute, Datenbankfelder, einfache Output-Komponenten. So wird etwa mit dem unten gezeigten Mapping mit Hilfe der generate-sequence-Funktion eine Sequenz von drei Ganzzahlen (1, 2, 3) generiert. Trotzdem enthält die Ausgabe nur eine Ganzzahl, da es sich bei der Zielkomponente um eine einfache Output-Komponente handelt, in der nur ein einziger Wert zulässig ist. Die anderen beiden Werte werden ignoriert.
Ausnahme 3
Wenn im Quellschema festgelegt ist, dass ein bestimmtes Datenelement nur einmal vorkommen darf, die Instanzdatei aber viele davon enthält, extrahiert MapForce unter Umständen das erste Datenelement aus der Quelldatei (das laut Schema vorhanden sein muss) und erstellt in der Zielkomponente nur ein Datenelement. Um dieses Verhalten zu verhindern, deaktivieren Sie in den Komponenteneinstellungen das Kontrollkästchen Input-Verarbeitungsoptimierungen auf Basis von min/maxOccurs aktivieren, siehe auch XML-Komponenteneinstellungen.
Funktionen
Wenn eine Nicht-Sequenz-Funktion als Input eine Sequenz erhält, wird die Funktion so oft aufgerufen (und erzeugt so viele Ergebnisse) wie Datenelemente in der Sequenz vorhanden sind. Wenn eine Funktion als Input eine leere Sequenz erhält, gibt sie ein leeres Ergebnis zurück und erzeugt somit gar keine Ausgabe.
Funktionen, die einen Wert zurückgeben, selbst wenn sie eine leere Sequenz erhalten
Es gibt jedoch einige Funktionskategorien, die aufgrund ihres Designs auch dann einen Wert zurückgeben, wenn Sie als Input eine leere Sequenz erhalten:
•exists, not-exists, substitute-missing
•is-not-null, is-null, substitute-null (Diese drei Funktionen sind Aliasnamen für die erstgenannten drei Funktionen)
•aggregate-Funktionen (sum, count, usw.)
•benutzerdefinierte Funktionen, die Sequenzen unterstützen und regulär sind (also nicht-inline-Funktionen)
Wenn Sie einen fehlenden Wert ersetzen müssen, fügen Sie die Funktion substitute-missing zum Mapping hinzu und ersetzen sie den fehlenden Wert durch den Ersetzungswert Ihrer Wahl.
Funktionen mit mehreren Inputs
Funktionen können mehrere Inputs haben. Wenn eine Sequenz mit jedem einzelnen Input verbunden wird, wird dadurch ein kartesisches Produkt aller Inputs erzeugt (eine Gruppe aller geordneten Paare, die durch Kombination von Elementen aus zwei oder mehr Gruppen erstellt werden kann), was normalerweise nicht das gewünschte Ergebnis ist. Um dies zu vermeiden, verbinden Sie nur eine Sequenz mit einer Funktion mit mehreren Parametern; alle anderen Parameter müssen von übergeordneten Elementen oder anderen Komponenten aus mit Einzeldatenelementen verbunden werden.