Wenn Sie in Ihrem Nachrichtenfluss einen Fehler oder eine andere Situation feststellen, auf Grund derer die Nachrichtenverarbeitung beendet werden soll,können Sie auf zwei Arten eine Ausnahmebedingung in einem Nachrichtenfluss ausgeben:
Fügen Sie die THROW-Anweisung an einer beliebigen Stelle im ESQL-Modul für einen Rechen-, Datenbank- oder Filterknoten ein. Mit Hilfe der Optionen in der Anweisung können Sie ihre eigenen Daten codieren, die in die Ausnahmebedingung aufgenommen werden sollen.
Legen Sie die Knoteneigenschaften fest, um die Quelle und den Inhalt der Ausnahmebedingung zu identifizieren.
Sie können mit Hilfe von Anweisungsoptionen oder Knoteneigenschaften eine Nachrichten-ID und Werte angeben, die in den Nachrichtentext eingefügt werden sollen. Auf diese Weise erhalten die Benutzer, die die Ausnahmebedingung interpretieren, zusätzliche Informationen und Identifikationsmöglichkeiten. Sie können alle Nachrichten in allen Katalogen angeben, die dem Broker zur Verfügung stehen. Weitere Informationen finden Sie im Abschnitt Ereignisprotokollierung von einer benutzerdefinierten Erweiterung aus verwenden.
Die Situationen, in denen Sie möglicherweise eine Ausnahmebedingung ausgeben möchten, hängen vom Verhalten des Nachrichtenflusses ab; Sie entscheiden beim Entwurf des Nachrichtenflusses, an welcher Stelle diese Aktion geeignet sein könnte. Es ist beispielsweise denkbar, dass Sie den Inhalt der Eingabenachricht prüfen möchten, um sicherzustellen, dass er bestimmten Kriterien entspricht, die nicht vom Empfangsknoten festgestellt werden können (z. B. könnte überprüft werden, ob ein bestimmtes Nachrichtenformat empfangen wurde).
Im unten genannten Beispiel wird die Beispielnachricht 'Invoice' (Rechnung) verwendet, um den Einsatz der ESQL-Anweisung THROW zu demonstrieren. Wenn Sie prüfen möchten, ob sich die Rechnungsnummer in einem bestimmten Bereich bewegt, geben Sie für alle empfangenen Rechnungsnachrichten, die nicht im zulässigen Bereich liegen, eine Ausnahmebedingung aus.
--Check for invoice number lower than permitted range IF Body.Invoice.InvoiceNo < 100000 THEN THROW USER EXCEPTION CATALOG 'MyCatalog' MESSAGE 1234 VALUES ('Invoice number too low', Body.Invoice.InvoiceNo); -- Check for invoice number higher than permitted range ELSEIF Body.InvoiceNo > 500000 THEN THROW USER EXCEPTION CATALOG 'MyCatalog' MESSAGE 1235 VALUES ('Invoice number too high', Body.Invoice.InvoiceNo); ELSE DO -- invoice number is within permitted range -- complete normal processing ENDIF;