Altova MapForce 2025 Professional Edition

Geltungsbereich und Kontext von Variablen

Zur Startseite Zurück Nach oben Weiter

Jede Variable hat ein compute-when Input-Datenelement (siehe Abbildung unten), mit dem Sie den Geltungsbereich der Variablen festlegen können, d.h. Sie können damit festlegen, wann und wie oft der Wert der Variablen bei der Ausführung des Mappings berechnet werden soll. Sie müssen diesen Input in vielen Fällen nicht verbinden, doch ist er manchmal wichtig, um den Standardkontext außer Kraft zu setzen oder die Mapping-Leistung zu optimieren.

mf_variable_simple

In der Erläuterung von Geltungsbereich und Kontext von Variablen werden die folgenden Begriffe verwendet: Substruktur und Variablenwert. Als Substruktur wird eine Gruppe eines Datenelements/Node in einer Zielkomponente und aller seiner Nachfahren bezeichnet, z.B. ein Element <Person> mit seinen Child-Elementen <FirstName> und <LastName>.

 

Als Variablenwert werden die auf der Output-Seite der Variablenkomponente verfügbaren Daten bezeichnet.

 

Bei einfachen Variablen handelt es sich um eine Sequenz atomarer Werte, die den in den Komponenteneigenschaften definierten Datentyp haben.

Bei komplexen Variablen handelt es sich um eine Sequenz von Root Nodes (des in den Komponenteneigenschaften definierten Typs), einschließlich aller Nachfahren-Nodes der einzelnen Root Nodes.

 

Die Sequenz der atomaren Werte (oder Nodes) kann ein oder auch null Elemente enthalten. Dies ist abhängig davon, was mit der Input-Seite der Variablen und etwaigen übergeordneten Datenelementen in der Quell- und Zielkomponente verbunden ist.

 

"Compute-when" ist nicht verbunden (Standardeinstellung)

Wenn das compute-when-Input-Datenelement nicht (mit einem Output Node einer Quellkomponente) verbunden ist, wird der Variablenwert berechnet, sobald er das erste Mal in einer Zielsubstruktur (direkt über einen Konnektor von der Variablenkomponente zu einem Node in der Zielkomponente oder indirekt über Funktionen) verwendet wird. Derselbe Variablenwert wird auch für alle Child-Ziel-Nodes innerhalb der Substruktur verwendet.

 

Der tatsächliche Wert der Variablen hängt von etwaigen Verbindungen zwischen übergeordneten Datenelementen der Quell- und Zielkomponente ab. Dieses Standardverhalten ist dasselbe wie das von "complex" Outputs von regulären benutzerdefinierten Funktionen und Webservice-Funktionsaufrufen. Wenn die Variable mit mehreren nicht miteinander in Zusammenhang stehenden Ziel-Nodes verbunden ist, wird der Wert der Variablen für jeden davon separat berechnet. Dabei können in jedem Fall unterschiedliche Ergebnisse erzeugt werden, da unterschiedliche Parent-Verbindungen sich auf den Kontext auswirken, in dem der Wert der Variablen ausgewertet wird.

 

"Compute-when" ist verbunden

Wenn ein Output Node einer Quellkomponente mit compute-when verbunden ist, wird die Variable immer dann berechnet, wenn das Quelldatenelement in der Zielsubstruktur zum ersten Mal verwendet wird.

 

Die Variable verhält sich so, als wäre sie ein Child-Element des mit compute-when verbundenen Datenelements. Auf diese Art kann die Variable an ein bestimmtes Quelldatenelement gebunden werden, d.h. die Variable wird zur Laufzeit immer dann neu ausgewertet, wenn ein neues Datenelement aus der Sequenz in der Quellkomponente gelesen wird. Dies steht im Zusammenhang mit der allgemeinen Regel zu Verbindungen in MapForce: Erstelle für jedes Quelldatenelement ein Zieldatenelement. In diesem Fall berechnet MapForce aufgrund von compute-when den Variablenwert für jedes Quelldatenelement. Nähere Informationen dazu finden Sie unter Mapping-Regeln und Strategien.

 

Compute-once

Falls nötig, können Sie festlegen, dass der Variablenwert einmal vor jedem Wert der Zielkomponenten berechnet wird, sodass die Variable praktisch zu einer globalen Konstante für das restliche Mapping wird. Klicken Sie dazu mit der rechten Maustaste auf den Eintrag compute-when und wählen Sie im Kontextmenü den Befehl Einmal berechnen:

mf_variable_compute-once

Wenn Sie den Geltungsbereich der Variablen in compute-when=once ändern, wird der Input-Konnektor aus dem compute-when-Datenelement entfernt, da eine solche Variable nur einmal ausgewertet wird. In einer benutzerdefinierten Funktion wird die Variable compute-when=once bei jedem Funktionsaufruf ausgewertet, bevor das tatsächliche Funktionsergebnis ausgewertet wird.

 

Parent-context

Das Argument parent-context ist ein optionales Argument in einigen MapForce Aggregatfunktionen der core-Bibliothek wie z.B. min, max, avg, count. Der parent-context bestimmt in einer Quellkomponente mit mehreren hierarchischen Sequenzen, an welcher Node-Gruppe die Funktion ausgeführt werden soll.

 

Ein parent-context-Datenelement muss z.B. dann hinzugefügt werden, wenn in Ihrem Mapping mehrere Filter verwendet werden, und Sie einen zusätzlichen Parent-Node benötigen, über den iteriert werden kann. Nähere Informationen dazu finden Sie unter Beispiel: Ändern des Parent-Kontexts. Um einen parent-context zu einer Variablen hinzuzufügen, klicken Sie mit der rechten Maustaste auf den Root Node, (in diesem Beispiel PersonList) und wählen Sie im Kontextmenü den Befehl parent-context hinzufügen. Daraufhin wird ein neuer Node parent-context zur bestehenden Hierarchie hinzugefügt.

inter7

 

Durch den parent-context wird innerhalb der Komponente ein virtueller übergeordneter (Parent) Node zur Hierarchie hinzugefügt. Auf diese Art können Sie über einen zusätzlichen Node in derselben oder einer anderen Quellkomponente iterieren.

 

© 2018-2024 Altova GmbH