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 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.
-- Declare variable for the Error number extracted from exception list DECLARE Error INTEGER; -- Declare current path within the exception list DECLARE Path CHARACTER; -- Start at first child of exception list SET Path = 'InputExceptionList.*[1]'; -- Loop until no more children WHILE EVAL( 'FIELDNAME(' || Path || ') IS NOT NULL' ) DO -- Check if error number is available IF EVAL( 'FIELDNAME(' || Path || '.Number) IS NOT NULL' ) THEN -- Record only the deepest error number SET Error = EVAL( Path || '.Number' ); END IF; -- Step to last child of current element (usually a nested exception list SET Path = Path || '.*[<]'; END WHILE;
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.