メッセージ処理の終了を予定しているメッセージ・フローで、エラーや他の状態が検出された場合、次の 2 つの方法によってメッセージ・フローで例外をスローできます。
THROW ステートメントを、Compute、Database、または Filter ノードの ESQL モジュールの任意の位置に組み込みます。 このステートメントで該当するオプションを使用して、独自のデータを例外に挿入するためのコーディングを行います。
例外のソースと内容を識別するためのノード・プロパティーを設定します。
ステートメント・オプションまたはノード・プロパティーのどちらかを使用することにより、メッセージ・テキストに挿入するメッセージ ID と値を指定して、例外を解釈するユーザーに追加情報と識別情報を提供できます。 ブローカーが使用可能な任意のカタログ内のメッセージを指定できます。 詳しくは、ユーザー定義拡張機能からのエラー・ログの使用を参照してください。
例外をスローする状態はメッセージ・フローの動作によって判別され、メッセージ・フローの設計時にそのアクションの適切な位置を決定します。 例えば、入力メッセージの内容を調べて、入力ノード (これは特定のメッセージ形式を受け取ったことをチェックする) が検出できない基準を満たしていることを確認したい場合もあります。
以下の例では、サンプル・メッセージを使用して、ESQL THROW ステートメントの使用方法を示します。 送り状番号が特定の範囲内にあることをチェックするには、有効範囲内になかった受信済みの Invoice メッセージについて例外をスローします。
--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.Invoice.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;