Kontext und effizienter Einsatz von Ressourcen
In diesem Kapitel wird erläutert, wovon es abhängt, wie oft ein Webservice aufgerufen wird. In einem Mapping, das einen Webservice-Aufruf enthält, kann derselbe Webservice, wenn es der Kontext erlaubt, mehrmals aufgerufen werden, was normalerweise vermieden werden sollte. Betrachten Sie dazu die nachstehend beschriebenen Fälle.
Request
Wenn die Verbindung zum Request-Datenelement der Webservice-Komponente eine Wertesequenz enthält, wird der Webservice mehrmals aufgerufen, nämlich einmal für jedes Datenelement in der Sequenz.
Response
Abhängig von den Verbindungen im Response-Teil wird ein Webservice unter Umständen mehrmals aufgerufen, was oft nicht wünschenswert ist. Siehe die nachstehenden Beispiele.
Beispiel 1
So wird z.B. der unten gezeigte Webservice zwei Mal aufgerufen, da für die Nodes statusCode und body in der Zielkomponente kein gemeinsamer Parent-Kontext vorhanden ist.
Gemäß der allgemeinen Mapping-Regel beginnt die Verarbeitung beim Root-Element der Zielkomponente (in diesem Fall Rows). Der Node Rows hat keine Verbindung, daher arbeitet sich MapForce durch die Hierarchie nach unten. Der erste Webservice-Aufruf wird gemacht, um das Zieldatenelement statusCode zu befüllen. Als nächstes muss das Datenelement body befüllt werden. Daher wird ein zweiter Aufruf an den Webservice durchgeführt. Gäbe es mehr Child-Elemente von Rows, die mit dem Webservice verbunden wären, würde für jeden Child-Node ein neuer Aufruf durchgeführt.
Da weder statusCode noch body einen expliziten Parent-Kontext hat (mit anderen Worten, ihr Parent ist mit keinem Quelldatenelement verbunden), können sie keine Daten aus ihrem Parent wiederverwenden und müssen diese einzeln von der Webservice-Call-Komponente abrufen. Dieses Problem kann ganz einfach behoben werden, indem Sie, wie unten gezeigt, eine Verbindung von Response zu Rows ziehen:
Dank der Verbindung zwischen Response und Rows steht der gemeinsame Parent-Kontext nun für alle Child-Nodes des Node Rows zur Verfügung und der Webservice wird nun nur einmal aufgerufen. Nach dem ersten Aufruf befinden sich alle Webservice-Daten im aktuellen Kontext und stehen den Children des Elements Rows zur Verfügung. Daher entfallen alle redundanten Webservice-Aufrufe.
Beispiel 2
Im zweiten Beispiel wird die Response des Webservice-Aufrufs auf zwei Zielkomponenten gemappt (Abbildung unten). Sie können in MapForce immer nur jeweils eine Ausgabevorschau anzeigen. Jedes Mal, wenn Sie auf die Schaltfläche einer der Zielkomponenten klicken, wird ein Webservice-Aufruf durchgeführt. Wenn Sie das Mapping hingegen mit MapForce Server oder als FlowForce-Auftrag ausführen, erzeugt das Mapping alle Ausgaben von oben nach unten in der festgelegten Reihenfolge. Dies bedeutet auch, dass das Mapping zwei Webservice-Aufrufe durchführt - für jede Zielkomponente einen, da es keinen gemeinsamen Ziel-Kontext gibt.
Eine bessere Lösung wäre, die Response in einer einzigen Zielkomponente auszugeben. Diese kann anschließend bei Bedarf in mehrere Komponenten aufgeteilt werden. Siehe das Mapping-Design unten.
Webservices in benutzerdefinierten Funktionen
Wenn sich ein Webservice innerhalb einer benutzerdefinierten Funktion befindet und die benutzerdefinierte Funktion während der Mapping-Ausführung mehrmals aufgerufen wird, wird der Webservice mindestens genauso oft aufgerufen. Dies kann durch Konfiguration der Einstellungen für die benutzerdefinierte Funktion vermieden werden. Nähere Informationen dazu finden Sie unter Kontext in benutzerdefinierten Funktionen.