Filter ノード

このトピックには、以下のセクションが含まれています。

目的

メッセージ内容に従ってメッセージをルーティングするには、Filter ノードを使用します。ESQL でフィルター式をコーディングして、経路を定義します。 フィルター式には入力メッセージまたはメッセージ・プロパティーのエレメントを含めることができます。また、外部データベースに保持されているデータを使用して式を完成させることもできます。 メッセージがルーティングされる出力ターミナルは、フィルター式が true、false、または unknown のいずれに評価されるかによって異なります。

フィルター操作の結果として発生するすべての状態に対応するターミナルを接続します。 接続されていないターミナルにノードからメッセージを伝搬すると、トランザクションであってもメッセージは廃棄されます。

このノードは、Compute ノードや Database ノードと同じ方法で、ESQL ステートメントを受け入れます。 実行される最後のステートメントは、式がブール値に評価される RETURN <expression> ステートメントでなければなりません。 このブール値は、メッセージがルーティングされるターミナルを決定します。 多くの場合、ルーティング・アルゴリズムはメッセージ・フィールド値の単純な比較です。 比較は式によって記述され、RETURN ステートメントが唯一のステートメントになります。 式を指定せずに RETURN をコード化したり (RETURN;)、NULL 式を指定したりすると、ノードはメッセージを不明のターミナルに伝搬します。

さらに複雑なルーティング・オプションが必要なメッセージ・フローの場合は、RouteToLabel および Label ノードを使用できます。

ワークベンチでは、Filter ノードは次のアイコンで表されます。

Filter ノード・アイコン

メッセージ・フロー内でのこのノードの使用

このノードが使用される方法の例に関しては、次のサンプルを参照してください。

10 の選択肢がある質問が含まれるオンライン・テストを作成したという状況について考慮します。 着信するそれぞれのメッセージには、候補者の名前と住所に続けて一連の応答が含まれています。 それぞれの応答は検査され、正しい場合には、フィールド SCORE に 1 が増分されます。 すべての応答が検査されると、フィールド SCORE は 5 より大きいかどうか調べるためにテストされます。 5 より大きい場合には、Filter ノードは、成功した候補者入力を処理するメッセージ・フローにメッセージを伝搬し、そうでない場合には、メッセージは拒否プロセスにフィルター掛けされ、拒否メッセージが作成されます。

Filter ノードの構成

Filter ノードのインスタンスをメッセージ・フローに入れると、Filter ノードを構成することができます。 エディター・ビューでノードを右クリックし、「プロパティー」をクリックします。 ノードの基本プロパティーが表示されます。

値を入力する必要のある (デフォルト値が定義されていない) すべての必須プロパティーには、プロパティー・ダイアログにアスタリスクが表示されます。

以下のように、Filter ノードを構成します。

  1. データ・ソース」に、メッセージ・フローが実行されるシステム上で該当するデータベースが認識される名前を指定します。ブローカーは、mqsicreatebrokermqsichangebroker、または mqsisetdbparms コマンドを使用してセットアップしたユーザー ID およびパスワード情報を使用して、このデータベースに接続します。

    z/OS システムの場合、ブローカーは、ブローカーが開始するタスクの ID を使用するか、または mqsisetdbparms コマンド JCL の、カスタマイズ・データ・セット <hlq>.SBIPPROC の BIPSDBP で指定されたユーザー ID とパスワードを使用します。

  2. フィルター式」に、ノードが実行する ESQL ステートメントを含む ESQL ファイル内のモジュールを指定します。モジュール名に 1 つ以上のスペースを含めるには、「フィルター式」プロパティーで、それを二重引用符で囲みます。

    Filter ノードの動作をカスタマイズするための ESQL ステートメントは、この Filter ノードのインスタンスが含まれるメッセージ・フローに関連付けられた ESQL ファイル内にコーディングします。デフォルトで <message_flow_name>.esql という名前を持つこの ESQL ファイルには、ESQL を必要とするメッセージ・フロー内のすべてのノード用の ESQL が含まれています。特定のノードに関連したコードの部分はモジュールと呼ばれます。

    このメッセージ・フロー用の ESQL ファイルが存在していない場合、Filter ノードを右クリックして、「ESQL のオープン」をクリックします。これにより、ESQL エディター・ビューに新しい ESQL ファイルが作成されてオープンされます。

    ファイルが既に存在する場合は、「フィルター式 」プロパティーの横にある「ブラウズ」ボタンをクリックします。「モジュール選択」ダイアログが表示され、このメッセージ・フローで使用可能な ESQL ファイルで定義されている Filter ノード・モジュールがリストされます (ESQL ファイルは従属する他のプロジェクトで定義することができます)。適切なモジュールを選択して、「OK」をクリックします。使用できる適切なモジュールがない場合は、リストは空になります。

    指定するモジュールが存在しない場合、モジュールが作成され、エディターはファイルを表示するために位置付けします。 ファイルとモジュールが既に存在する場合、エディターはファイルを位置付けし、正しいモジュールを強調表示します。

    「リソース・ナビゲーター」で適切な ESQL ファイルをオープンし、「アウトライン」ビューでこのノードを選択することもできます。

    新規または既存の ESQL ファイル内でこのノード用にモジュール・スケルトンが作成された場合、以下の ESQL が含まれます。この例では、デフォルトのモジュール名が表示されています。

    CREATE FILTER MODULE <flow_name>_Filter
           CREATE FUNCTION Main() RETURNS BOOLEAN
           BEGIN
                   RETURN TRUE;
           END;
    END MODULE;

    自分で ESQL モジュールを作成する場合、このスケルトンを正確に作成する必要があります。 デフォルトの名前を更新することができますが、指定する名前は、対応するノード・プロパティー「フィルター式」と一致することを確認してください。

    このノードをカスタマイズするための ESQL を、BEGIN ステートメントと RETURN ステートメントの間に追加します。 RETURN ステートメントの式が TRUE または FALSE ではない場合、メッセージが伝搬されるターミナルを決定するためにその値は解決されます。 式が解決されて NULL になったり、RETURN; をコード化したり、または RETURN ステートメントを省略する場合、ノードはメッセージを不明のターミナルに伝搬します。

    「ファイル」 > 「新規」 > 「メッセージ・フロー ESQL ファイル」をクリックすることにより、ESQL ファイルを作成することもできます。

    このモジュールでは、SET、WHILE、DECLARE、および IF を含む ESQL ステートメントすべてを使用できますが、(Compute ノードとは異なり) Filter ノードは、入力ターミナルで受信したメッセージを変更せずに出力ターミナルに伝搬します。つまり、Database ノードと同様に、Filter ノードには参照されるメッセージが 1 つしかないということです。

    メッセージのどのような部分も変更できないため、割り当てステートメント (INSERT ステートメントの SET 文節ではなく、SET ステートメント) では、一時的な変数への値の割り当てしか行うことができません。 したがって、割り当てステートメントで行えるアクションの有効範囲は限られています。

  3. ドロップダウン・メニューから「トランザクション」を選択します。値は以下のとおりです。
    • 「自動」(デフォルト)。Filter ノードが属するメッセージ・フローが正常に行われると、そのメッセージ・フローがコミットされます。 つまり、ESQL モジュールで定義したアクションが実行され、メッセージはメッセージ・フローを通して継続します。 メッセージ・フローは、失敗するとロールバックされます。 そのため、「自動 」を選択した場合、データベース上で Filter ノードのアクションをコミットするかロールバックするかは、メッセージ・フロー全体の成功または失敗に依存します。
    • 「コミット」。メッセージ・フロー全体の成功または失敗に関係なく、このノードに接続しているデータベースのメッセージ・フローで実行されたコミットされていないアクションをコミットしたい場合は、「コミット」を選択します。 メッセージ・フロー自体が失敗しても、データベースへの変更はコミットされます。
  4. プロパティー・ダイアログ・ナビゲーターで「基本」を選択し、次の 2 つのチェック・ボックスを設定するかまたはチェックを外します。
    • データベース警告メッセージをエラーとして扱い、ノードからの出力メッセージを failure ターミナルに伝搬したい場合は、「警告をエラーとして扱う 」チェック・ボックスを選択します。 最初、このチェック・ボックスはチェックされていません。

      このボックスを選択した場合、ノードはデータベースからのすべての正の戻りコードをエラーとして扱い、負の戻りコードについてと同じ方法で例外を生成するか、問題がより重大である場合はエラーを生成します。

      このボックスを選択しなかった場合、ノードは警告を通常の戻りコードとして扱い、例外を生成しません。 生成される最も重大な警告は「見つかりません」であり、これはほとんどの環境で正常な戻りコードとして支障なく扱うことができます。

    • データベース・エラーが検出されたときにブローカーが例外を生成するようにしたい場合は、「データベース・エラーで例外をスローする」チェック・ボックスを選択します。最初、このチェック・ボックスは選択されています。

      このチェック・ボックスのチェックを外す場合、データベース呼び出しを行うたびに返される可能性のあるデータベース・エラーを調べるために ESQL を含める必要があります。(これには SQLCODE および SQLSTATE を使うことができます。) エラーが発生した場合、メッセージ・フロー内のエラーを処理してブローカーとデータベースの整合性を確認する必要があります。ブローカーによるデフォルト・エラー処理を呼び出さないように選択してあるため、自分でエラーを処理しない限り、エラーは無視されます。例えば、このノードで例外をスローするために ESQL THROW ステートメントを含めることができます。あるいは、Throw ノードを使用して後で独自の例外を生成することができます。

  5. 簡略説明または詳細説明 (あるいはその両方) を入力するには、プロパティー・ダイアログ・ナビゲーターの「説明」を選択します。
  6. 「適用」をクリックすると、プロパティー・ダイアログを閉じずに Filter ノードが変更されます。 「OK」をクリックすると、変更を適用してプロパティー・ダイアログを閉じます。

    「キャンセル」をクリックすると、ダイアログを閉じてプロパティーに対して行った変更をすべて破棄します。

ターミナルおよびプロパティー

Filter ノードのターミナルについては、次の表に説明されています。

ターミナル 説明
In ノードが処理するメッセージを受け入れる入力ターミナル。
Failure 計算時に障害が検出された場合、メッセージがルーティングされる出力ターミナル。
Unknown 指定されたフィルター式が unknown またはヌルに評価された場合にメッセージがルーティングされる出力ターミナル。
False 指定されたフィルター式が false に評価された場合にメッセージがルーティングされる出力ターミナル。
True 指定されたフィルター式が true に評価された場合にメッセージがルーティングされる出力ターミナル。

以下の表でノードのプロパティーを説明します。M の見出しの列は、プロパティーが必須 かどうかを示します (デフォルトが定義されていない場合に値を入力することが必要なら、プロパティー・ダイアログにアスタリスクのマークが付きます)。 C の見出しの列は、プロパティーが構成可能 かどうかを示します (メッセージ・フローを bar ファイルに追加してデプロイするとき、値を変更できます)。

Filter ノードの「基本」プロパティーについては、次の表に説明されています。

プロパティー M C デフォルト 説明
データ・ソース いいえ はい   このノードに関連付けられた ESQL (「フィルター式」プロパティーで識別される) で参照する表が存在するデータベースの ODBC データ・ソース名。
トランザクション はい いいえ 自動 ノードのトランザクション・モードです。「自動」または「コミット」を選択できます。
フィルター式 はい いいえ Filter ノードで受信したメッセージに対して実行するステートメントを含む、ESQL リソース (ファイル) 内のモジュールの名前。
警告をエラーとして扱う はい いいえ 選択されていない データベース SQL 警告をエラーとして扱います。 チェック・ボックスを選択すると、このアクションが実行されます。
データベース・エラーで例外をスローする はい いいえ 選択されている データベース・エラーによりブローカーは例外をスローします。 チェック・ボックスを選択すると、このアクションが実行されます。

Filter ノードの「説明」プロパティーについては、次の表に説明されています。

プロパティー M C デフォルト 説明
簡略説明 いいえ いいえ   ノードの簡単な説明
詳細説明 いいえ いいえ   メッセージ・フロー内のノードの目的を説明するテキスト
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ac04780_