Die Baumstruktur für Ausnahmelisten hat einen eigenen Korrelationsnamen (ExceptionList), und Sie müssen diesen in allen ESQL-Anweisungen verwenden, die auf den Inhalt dieser Baumstruktur verweisen oder diesen festlegen.
Diese Baumstruktur wird mit der logischen Baumstruktur erstellt, wenn eine Eingabenachricht syntaktisch analysiert wird. Sie ist zu Beginn leer und wird nur gefüllt, wenn während der Nachrichtenflussverarbeitung eine Ausnahmebedingung auftritt. Es ist möglich, dass mehrere Ausnahmebedingungen auftreten; ist dies der Fall, enthält die Baumstruktur für Ausnahmelisten für jede einzelne Ausnahmebedingung eine untergeordnete Baumstruktur.
Sie können in den Rechen-, Datenbank und Filterknoten (Compute, Database und Filter) auf die Baumstruktur für Ausnahmelisten zugreifen, und Sie können diese in einem Rechenknoten aktualisieren. Sie müssen den entsprechenden Korrelationsnamen verwenden; ExceptionList bei einem Datenbank- oder Filterknoten, und InputExceptionList bei einem Rechenknoten.
Möglicherweise müssen Sie in einer Prozedur zur Fehlerbehandlung auf diese Baumstruktur in einem Knoten zugreifen. So kann es beispielsweise vorkommen, dass Sie die Nachricht auf Basis der Art der Ausnahmebedingung an einen anderen Pfad umleiten möchten, z. B. an einen Pfad, den Sie mit Hilfe der ESQL-Anweisung THROW explizit generiert haben, oder an einen vom Broker generierten Pfad.
Der folgende ESQL-Code zeigt, wie Sie auf die Ausnahmeliste zugreifen können und alle in ihr enthaltenen untergeordneten Elemente verarbeiten können:
-- Declare a reference for the ExceptionList -- (in a Compute node use InputExceptionList) DECLARE start REFERENCE TO ExceptionList.*[1]; -- Loop through the exception list children WHILE start.Number IS NOT NULL DO -- more ESQL -- Move start to the last child of the field to which it currently points MOVE start LASTCHILD; END WHILE;
Das zweite Beispiel unten zeigt einen Auszug des ESQL-Codes, der für einen Rechenknoten codiert wurde, um sich in einer Schleife durch die Ausnahmeliste bis zur letzten (verschachtelten) Ausnahmebedingung zu bewegen und die Fehlernummer zu extrahieren. Dieser Fehler bezieht sich auf die ursprüngliche Fehlerursache und bietet für gewöhnlich die genauesten Informationen. Die nachfolgende Aktion, die vom Nachrichtenweiterleitung ausgeführt wird, kann durch die auf diese Weise abgerufene Fehlernummer bestimmt werden.
CREATE PROCEDURE getLastExceptionDetail(IN InputTree reference,OUT messageNumber integer, OUT messageText char) /**************************************************************************** * A procedure that will get the details of the last exception from a message * IN InputTree: The incoming exception list * IN messageNumber: The last message number. * IN messageText: The last message text. *****************************************************************************/ BEGIN -- Create a reference to the first child of the exception list declare ptrException reference to InputTree.*[1]; -- keep looping while the moves to the child of exception list work WHILE lastmove(ptrException) DO -- store the current values for the error number and text IF ptrException.Number is not null THEN SET messageNumber = ptrException.Number; SET messageText = ptrException.Text; END IF; -- now move to the last child which should be the next exceptionlist move ptrException lastchild; END WHILE; END;
Weitere Informationen zur Verwendung der Ausnahmeliste finden Sie im untergeordneten Fluss im Beispiel des Fehlerbehandlungsprogramms (Error Handler), das ESQL-Code enthält, der die Struktur der Ausnahmeliste abfragt und je nach deren Inhalt bestimmte Aktionen ausführt.