Altova FlowForce Server 2024 Advanced Edition

Bei einem normalen FlowForce-Auftrag wird das Ergebnis erst zurückgegeben, nachdem alle Schritte fertig verarbeitet wurden, sofern kein Fehler aufgetreten ist. Dies bedeutet bei als Web-Dienst bereitgestellten Aufträgen, dass die HTTP-Transaktion während der gesamten Dauer der Auftragsausführung offen bleiben muss, was minuten- oder, je nach Datenmenge, in einigen Fällen sogar stundenlang dauern kann. Für solche Fälle können Sie "Verschobene Schritte" erstellen.

 

Verschobene Schritte werden erst nach Verarbeitung aller nicht verschobenen Schritte und nach Rückgabe eines Ergebnisses ausgeführt. Zwar wird das Ergebnis bei einem Auftrag mit verschobenen Schritten frühzeitig zurückgeben, doch gilt der Auftrag noch als in Arbeit, bis alle verschobenen Schritte fertig verarbeitet wurden.

 

Hinzufügen eines verschobenen Schritts

Sie können verschobene Schritte an jeder Stelle im Auftrag, an der ein Schritt hinzugefügt werden kann, erstellen. Um einen verschobenen Schritt hinzuzufügen, gehen Sie folgendermaßen vor:

 

1.Erstellen Sie einen neuen Auftrag oder öffnen Sie einen vorhandenen.

2.Klicken Sie im Abschnitt Ausführungsschritte auf die Schaltfläche neuer Verschiebungsschritt.

3.Klicken Sie im verschobenen Block auf add, um einen oder mehrere zu verschiebende Schritte hinzuzufügen.

 

Je nach Anforderung können Sie innerhalb eines verschobenen Schritts Ausführungsschritte, Auswahlschritte, For-Each-Blöcke und Fehler-/Erfolgsbehandlungsblöcke erstellen. Außerdem können verschobene Blöcke auch innerhalb eines verschobenen Blocks verschachtelt werden.

 

Fehlerbehandlung

Ein Auftrag kann an verschiedenen Stellen im Auftrag mehrere verschobene Blöcke (von denen jeder einen oder mehrere zu verschiebende Schritte enthält) enthalten. Verschobene Schritte eignen sich manchmal gut zur Fehlerbehandlung: Wenn innerhalb eines verschobenen Blocks ein Fehler auftritt, sind andere Schritte im Auftrag nicht davon betroffen. Ein verschobener Block könnte als Miniauftrag bezeichnet werden, der sich genauso verhält wie ein normaler Auftrag:

 

Wenn in einem Schritt innerhalb eines verschobenen Blocks ein Fehler auftritt, wird der Schritt sowie alle darauf folgenden Schritte im selben verschobenen Block abgebrochen und es wird ein Fehler protokolliert.

Verschobene Blöcke beeinflussen einander nicht. Ein verschobener Block in einem Auftrag mit mehreren verschobenen Blöcken wird selbst dann ausgeführt, wenn der vorhergehende verschobene Block einen Fehler erzeugt.

Wenn in einem verschobenen Schritt innerhalb eines geschützten Blocks ein Fehler auftritt, werden dadurch alle verschobenen Schritte, die Teil dieses Blocks sind, abgebrochen.

 

Mögliche Szenarien

In den folgenden Unterabschnitten werden einige mögliche Anwendungsszenarien für verschobene Schritte beschrieben.

 

Auftrag mit mehreren verschobenen Schritten

Der Beispielauftrag unten wird in der folgenden Reihenfolge ausgeführt: A, C, B, D. Die nicht verschobenen Schritte werden zuerst ausgeführt. Danach werden die verschobenen Schritte ausgeführt. Schritt C gibt ein Ergebnis zurück.

 

A

verschiebe B

C

verschiebe D

 

Verschobene Schritte innerhalb von Auswahlschritten

Sie können verschobene Schritte auch zu Auswahlschritten hinzufügen. In diesem Fall wird der verschobene Schritt nur dann ausgeführt, wenn auch die entsprechende Wenn- oder Andernfalls-Verzweigung ausgeführt wird.

 

wenn Ausdruck=true

{

 verschiebe A

 B

 C

}

andernfalls

{

 verschiebe D

 E

 F

}

 

Im diesem Auftrag werden die Schritte, falls das Ergebnis des Ausdrucks true ist, in der folgenden Reihenfolge ausgeführt: B, C*, A. Andernfalls ist die Ausführungsreihenfolge: E, F*, D. Das Sternchen zeigt Schritte, die Ergebnisse zurückgeben, an.

 

Verschobene Schritte in For-Each-Schritten

Im Beispielauftrag unten sehen Sie einen For-Each-Schritt, in dem die verschobenen Schritte verarbeitet werden, nachdem die nicht verschobenen Schritte in derselben Reihenfolge, wie in der Schleife, deren Teil sie bilden, ausgeführt wurden.

 

for each Element in Liste

{

 A

 verschiebe B

}

 

Wenn die Schleife z.B. drei Mal ausgeführt wird, so werden die obigen Schritte in der folgenden Reihenfolge ausgeführt: A1, A2, A3*, B1, B2, B3. die Zahlen geben die Schleifennummer an. das Sternchen zeigt an, wo der Auftrag ein Ergebnis zurückgibt.

 

Innerhalb von verschobenen Schritten verschachtelte verschobene Schritte

Sie können verschobene Schritte auch innerhalb von anderen verschobenen Schritten verschachteln (siehe Codefragment unten). In diesem Fall werden die äußeren Schritte derselben Verschachtelungstiefe zuerst verarbeitet. Die verschachtelten Schritte werden erst ausgeführt, nachdem die übergeordnete Sequenz fertig ausgeführt wurde. In unserem Beispielauftrag werden die Schritte in der folgenden Reihenfolge ausgeführt: A, G, N, B, D, F, C, E, H, K, M, J, L. Schritt N gibt ein Ergebnis zurück.

 

A

verschiebe

[

 B

 verschiebe C

 D

 verschiebe E

 F

]

G

verschiebe

[

 H

 verschiebe J

 K

 verschiebe L

 M

]

N

 

Wenn Sie komplexe Konfigurationen, wie die oben gezeigte, erstellen und testen müssen, können Sie die Reihenfolge, in der Schritte ausgeführt werden, immer im Log nachverfolgen.

 

Beispiel

Im Folgenden sehen Sie ein Beispiel für ein Anwendungsszenario für verschobene Schritte. Dieser Auftrag wird als Web-Dienst bereitgestellt und kann jederzeit von einem Client, d.h. auch über einen Browser aufgerufen werden.

 

In Schritt A wird ein zeitaufwändiger Shell-Befehl ausgeführt, mit dem alle Verzeichnisse und Dateien innerhalb eines großen Systemverzeichnisses rekursiv aufgelistet werden. Aus diesem Grund wurde Schritt A in eine "Verschieben"-Sequenz gesetzt. In Schritt B wird die von A erzeugte Standardausgabe (stdout) in eine Datei geschrieben. Schritt B ist von der durch Schritt A erzeugten Ausgabe abhängig und muss daher ebenfalls Teil der verschobenen Sequenz bilden. In Schritt C werden Aufrufer des Webservice darüber informiert, dass die Aufgabe erfolgreich gesendet wurde. Bei Aufruf des Web-Diensts werden die obigen Schritte in der folgenden Reihenfolge ausgeführt: C, A, B. Der Grund dafür ist, dass A und B verschobene Schritte sind, daher wird C als erstes ausgeführt.

 

Der Vorteil bei dieser Konfiguration ist, dass das Auftragsergebnis sofort nach Ausführung von Schritt C zurückgegeben wird und die HTTP-Transaktion beendet werden kann, sodass Server-Ressourcen für andere Requests frei werden. Nach Rückgabe des Auftragsergebnisses fährt FlowForce mit der Ausführung der aufgeschobenen Schritte A und B fort.

 

Wenn Sie den obigen Auftrag in Ihrem Browser aufrufen, wird im Browser als Bestätigung die Meldung Auftrag wurde erfolgreich abgesendet angezeigt, während der Auftrag weiter ausgeführt wird, bis output.txt erstellt wird. Wenn weder A noch B fehlschlagen, wird die Ausgabe unter dem Pfad C:\FlowForce\Postponed\output.txt erstellt.

fs_postponed_step

Anmerkung zur Reihenfolge der Schritte

Schritt C muss in diesem Beispiel der letzte im Auftrag sein, da damit das Ergebnis im Browser angezeigt wird. Wenn Sie Schritt C an den Anfang verschieben, wird er dennoch als erstes ausgeführt und auch Schritt B ist weiterhin der letzte im Auftrag ausgeführte Schritt. Das Auftragsergebnis würde sich dadurch jedoch ändern. Im Browser würde eine leere Ausgabe wie [] angezeigt. Der Grund dafür ist, dass das Ergebnis eines Auftrags immer das Ergebnis des letzten ausgeführten Schritts ist. Verschobene Schritte haben keinen Rückgabewert, sondern erzeugen stattdessen eine leere Sequenz.

 

© 2017-2023 Altova GmbH