Die PROPAGATE-Anweisung gibt eine Nachricht an die nachgeordneten Knoten weiter.
Die PROPAGATE-Anweisung können Sie in Rechen- und Datenbankknoten, nicht jedoch in Filterknoten verwenden. Die Zusätze zu dieser Anweisung helfen bei der Fehlerbehandlung (siehe ESQL für die Fehlerbehandlung codieren).
‘nowhere’ : keine Weitergabe ‘failure’ : Failure ‘out’ : Out ‘out1' : Out1 ‘out2' : Out2 ‘out3' : Out3 ‘out4’ : Out4
-2 : keine Weitergabe -1 : failure 0 : out 1 : out1 2 : out2 3 : out3 4 : out4
Hat das Ergebnis von TerminalExpression weder den Typ CHARACTER noch den Typ INTEGER, gibt der Broker eine Ausnahme aus.
Existieren weder eine Klausel TO TERMINAL noch eine Klausel TO LABEL, gibt der Broker eine Nachricht an das "Ausgangsterminal" (out) weiter.
Wenn das Ergebnis von LABEL-Ausdruck NULL ist oder nicht den Typ CHARACTER hat oder wenn es im Datenfluss keinen entsprechenden Zieladressenknoten gibt, gibt der Broker eine Ausnahme aus.
Existieren weder eine Klausel TO TERMINAL noch eine Klausel TO LABEL, gibt der Broker eine Nachricht an das "Ausgangsterminal" (out) weiter.
Die Nachrichtenquellenklauseln wählen die Nachrichtenbaumstrukturen aus, die weitergegeben werden sollen. Diese Klausel gilt nur für den Rechenknoten (hat keine Auswirkung im Datenbankknoten).
ENVIRONMENT : InputLocalEnvironment OutputLocalEnvironment Message : InputRoot OutputRoot ExceptionList : InputExceptionList OutputExceptionList
Ist keine MessageSources-Klausel angegeben, legt das Knotenattribut "compute mode" fest, welche Nachrichten weitergeleitet werden.
Diese Klausel gilt nur für den Rechenknoten (hat keine Auswirkung in einem Datenbankknoten).
Wenn FINALIZE auf DEFAULT gesetzt wurde oder die FINALIZE-Klausel fehlt, wird die Ausgabenachricht (nicht aber die Umgebung (Environment), lokale Umgebung (Local Environment) oder die Ausnahmeliste (Exception List)) vor der Weitergabe abgeschlossen.
Wurde
FINALIZE auf NONE gesetzt, findet keine Endbearbeitung statt. Diese Option ist erforderlich, wenn Sie Aktualisierungen der gesamten Ausgabenachrichtstruktur durch die nachgestalteten Knoten im Nachrichtenfluss beibehalten und zulassen möchten. Die Option wird, wie im nächsten Abschnitt beschrieben, mit DELETE NONE verwendet.
Diese Klausel gilt nur für den Rechenknoten (hat keine Auswirkung in einem Datenbankknoten).
Wenn DELETE auf DEFAULT gesetzt wurde oder wenn die DELETE-Klausel fehlt, wird die Ausgabe der lokalen Umgebung, der Nachricht und der Ausnahmeliste gelöscht und ihr Speicher direkt nach der Weitergabe wiederhergestellt.
Wurde DELETE auf NONE gesetzt, wird nichts gelöscht. Verwenden Sie DELETE NONE, wenn den nachgeschalteten Knoten eine einzelne Instanz der ausgegebenen lokalen Umgebungsnachricht und Ausnahmelistenstrukturen angezeigt werden sollen. Anstatt mit leeren Baumstrukturen startet jede PROPAGATE-Anweisung mit dem von der vorherigen PROPAGATE-Anweisung erstellten Inhalt dieser Baumstrukturen.
Wenn auch diese Knoten die Ausgabebaumstruktur aktualisieren sollen, müssen Sie DELETE NONE mit der Option FINALIZE NONE verwenden, die im nächsten Abschnitt beschrieben wird.
Beachten Sie, dass die abgeschlossenen Ausgabebaumstrukturen unabhängig davon, welche weitergeleitet werden sollen, gelöscht werden.
Die Weitergabe ist ein synchroner Vorgang. Die nächste Anweisung wird erst verarbeitet, wenn die gesamte Verarbeitung der Nachricht in den nachgeschalteten Knoten abgeschlossen ist. Beachten Sie, dass diese Verarbeitung Ausnahmen auslösen kann. Werden diese Ausnahmen nicht abgefangen, kann die Anweisung nach dem PROPAGATE-Aufruf nicht erreicht werden. Genau dies könnte die Logik Ihres Datenflusses jedoch erfordern. Ist dies nicht der Fall, können Sie die Ausnahme mit Hilfe eines Handlers abfangen und die notwendigen Aktionen ausführen. Beachten Sie, dass Ausnahmen, wenn sie nach einem PRPAGATE-Aufruf ausgelöst und nicht abgefangen wurden, auch die Ausführung abschließender automatischer Aktionen eines Rechen- oder Datenbankknotens verhindern (z. B. die Ausgabe einer auf COMMIT gesetzten COMMIT Transaktion).
DECLARE i INTEGER 1; DECLARE count INTEGER; SET count = CARDINALITY(InputRoot.XML.Invoice.Purchases."Item"[]) WHILE i <= count DO --verwenden Sie die von den Tools generierte Standardprozedur zum Kopieren von Nachrichtenheadern CALL CopyMessageHeaders(); SET OutputRoot.XML.BookSold.Item = InputRoot.XML.Invoice.Purchases.Item[i]; PROPAGATE; SET i = i+1; END WHILE; RETURN FALSE;
Nachfolgend sind die Nachrichten aufgeführt, die auf dem Ausgangsterminal von der PROPAGATE-Anweisung erstellt werden:
<BookSold> <Item> <Title Category="Computer" Form="Paperback" Edition="2">The XML Companion </Title> <ISBN>0201674866</ISBN> <Author>Neil Bradley</Author> <Publisher>Addison-Wesley</Publisher> <PublishDate>October 1999</PublishDate> <UnitPrice>27.95</UnitPrice> <Quantity>2</Quantity> </Item> </BookSold>
<BookSold> <Item> <Title Category="Computer" Form="Paperback" Edition="2">A Complete Guide to DB2 Universal Database</Title> <ISBN>1558604820</ISBN> <Author>Don Chamberlin</Author> <Publisher>Morgan Kaufmann Publishers</Publisher> <PublishDate>April 1998</PublishDate> <UnitPrice>42.95</UnitPrice> <Quantity>1</Quantity> </Item> </BookSold>
<BookSold> <Item> <Title Category="Computer" Form="Hardcover" Edition="0">JAVA 2 Developers Handbook</Title> <ISBN>0782121799</ISBN> <Author>Phillip Heller, Simon Roberts </Author> <Publisher>Sybex, Inc.</Publisher> <PublishDate>September 1998</PublishDate> <UnitPrice>59.99</UnitPrice> <Quantity>1</Quantity> </Item> </BookSold>