Ändern von Kontext und Geltungsbereich von Variablen

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

Startseite >  Erstellen von Mappings > Verwendung von Variablen >

Ändern von Kontext und Geltungsbereich von Variablen

Jede Variable hat ein compute-when Input-Datenelement, 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

Das Datenelement "compute-when"

Im folgenden Text wird als Substruktur die 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 (entweder 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". Bei compute-when bedeutet das "Berechne für jedes Quelldatenelement den Variablenwert" (siehe 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

Ein parent-context 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 (siehe auch Außerkraftsetzen des Mapping-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.


© 2019 Altova GmbH