このトピックには、以下のセクションが含まれています。
メッセージ内容に従ってメッセージをルーティングするには、Filter ノードを使用します。ESQL でフィルター式をコーディングして、経路を定義します。 フィルター式には入力メッセージまたはメッセージ・プロパティーのエレメントを含めることができます。また、外部データベースに保持されているデータを使用して式を完成させることもできます。 メッセージがルーティングされる出力ターミナルは、フィルター式が true、false、または unknown のいずれに評価されるかによって異なります。
フィルター操作の結果として発生するすべての状態に対応するターミナルを接続します。 接続されていないターミナルにノードからメッセージを伝搬すると、トランザクションであってもメッセージは廃棄されます。
このノードは、Compute ノードや Database ノードと同じ方法で、ESQL ステートメントを受け入れます。 実行される最後のステートメントは、式がブール値に評価される RETURN <expression> ステートメントでなければなりません。 このブール値は、メッセージがルーティングされるターミナルを決定します。 多くの場合、ルーティング・アルゴリズムはメッセージ・フィールド値の単純な比較です。 比較は式によって記述され、RETURN ステートメントが唯一のステートメントになります。 式を指定せずに RETURN をコード化したり (RETURN;)、NULL 式を指定したりすると、ノードはメッセージを不明のターミナルに伝搬します。
さらに複雑なルーティング・オプションが必要なメッセージ・フローの場合は、RouteToLabel および Label ノードを使用できます。
ワークベンチでは、Filter ノードは次のアイコンで表されます。
このノードが使用される方法の例に関しては、次のサンプルを参照してください。
10 の選択肢がある質問が含まれるオンライン・テストを作成したという状況について考慮します。 着信するそれぞれのメッセージには、候補者の名前と住所に続けて一連の応答が含まれています。 それぞれの応答は検査され、正しい場合には、フィールド SCORE に 1 が増分されます。 すべての応答が検査されると、フィールド SCORE は 5 より大きいかどうか調べるためにテストされます。 5 より大きい場合には、Filter ノードは、成功した候補者入力を処理するメッセージ・フローにメッセージを伝搬し、そうでない場合には、メッセージは拒否プロセスにフィルター掛けされ、拒否メッセージが作成されます。
Filter ノードのインスタンスをメッセージ・フローに入れると、Filter ノードを構成することができます。 エディター・ビューでノードを右クリックし、「プロパティー」をクリックします。 ノードの基本プロパティーが表示されます。
値を入力する必要のある (デフォルト値が定義されていない) すべての必須プロパティーには、プロパティー・ダイアログにアスタリスクが表示されます。
以下のように、Filter ノードを構成します。
z/OS システムの場合、ブローカーは、ブローカーが開始するタスクの ID を使用するか、または mqsisetdbparms コマンド JCL の、カスタマイズ・データ・セット <hlq>.SBIPPROC の BIPSDBP で指定されたユーザー ID とパスワードを使用します。
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 ファイルを作成することもできます。
このモジュールでは、SET、WHILE、DECLARE、および IF を含む ESQL ステートメントすべてを使用できますが、(Compute ノードとは異なり) Filter ノードは、入力ターミナルで受信したメッセージを変更せずに出力ターミナルに伝搬します。つまり、Database ノードと同様に、Filter ノードには参照されるメッセージが 1 つしかないということです。
メッセージのどのような部分も変更できないため、割り当てステートメント (INSERT ステートメントの SET 文節ではなく、SET ステートメント) では、一時的な変数への値の割り当てしか行うことができません。 したがって、割り当てステートメントで行えるアクションの有効範囲は限られています。
このボックスを選択した場合、ノードはデータベースからのすべての正の戻りコードをエラーとして扱い、負の戻りコードについてと同じ方法で例外を生成するか、問題がより重大である場合はエラーを生成します。
このボックスを選択しなかった場合、ノードは警告を通常の戻りコードとして扱い、例外を生成しません。 生成される最も重大な警告は「見つかりません」であり、これはほとんどの環境で正常な戻りコードとして支障なく扱うことができます。
このチェック・ボックスのチェックを外す場合、データベース呼び出しを行うたびに返される可能性のあるデータベース・エラーを調べるために ESQL を含める必要があります。(これには SQLCODE および SQLSTATE を使うことができます。) エラーが発生した場合、メッセージ・フロー内のエラーを処理してブローカーとデータベースの整合性を確認する必要があります。ブローカーによるデフォルト・エラー処理を呼び出さないように選択してあるため、自分でエラーを処理しない限り、エラーは無視されます。例えば、このノードで例外をスローするために ESQL THROW ステートメントを含めることができます。あるいは、Throw ノードを使用して後で独自の例外を生成することができます。
「キャンセル」をクリックすると、ダイアログを閉じてプロパティーに対して行った変更をすべて破棄します。
Filter ノードのターミナルについては、次の表に説明されています。
ターミナル | 説明 |
---|---|
In | ノードが処理するメッセージを受け入れる入力ターミナル。 |
Failure | 計算時に障害が検出された場合、メッセージがルーティングされる出力ターミナル。 |
Unknown | 指定されたフィルター式が unknown またはヌルに評価された場合にメッセージがルーティングされる出力ターミナル。 |
False | 指定されたフィルター式が false に評価された場合にメッセージがルーティングされる出力ターミナル。 |
True | 指定されたフィルター式が true に評価された場合にメッセージがルーティングされる出力ターミナル。 |
以下の表でノードのプロパティーを説明します。M の見出しの列は、プロパティーが必須 かどうかを示します (デフォルトが定義されていない場合に値を入力することが必要なら、プロパティー・ダイアログにアスタリスクのマークが付きます)。 C の見出しの列は、プロパティーが構成可能 かどうかを示します (メッセージ・フローを bar ファイルに追加してデプロイするとき、値を変更できます)。
Filter ノードの「基本」プロパティーについては、次の表に説明されています。
プロパティー | M | C | デフォルト | 説明 |
---|---|---|---|---|
データ・ソース | いいえ | はい | このノードに関連付けられた ESQL (「フィルター式」プロパティーで識別される) で参照する表が存在するデータベースの ODBC データ・ソース名。 | |
トランザクション | はい | いいえ | 自動 | ノードのトランザクション・モードです。「自動」または「コミット」を選択できます。 |
フィルター式 | はい | いいえ | Filter | ノードで受信したメッセージに対して実行するステートメントを含む、ESQL リソース (ファイル) 内のモジュールの名前。 |
警告をエラーとして扱う | はい | いいえ | 選択されていない | データベース SQL 警告をエラーとして扱います。 チェック・ボックスを選択すると、このアクションが実行されます。 |
データベース・エラーで例外をスローする | はい | いいえ | 選択されている | データベース・エラーによりブローカーは例外をスローします。 チェック・ボックスを選択すると、このアクションが実行されます。 |
Filter ノードの「説明」プロパティーについては、次の表に説明されています。
プロパティー | M | C | デフォルト | 説明 |
---|---|---|---|---|
簡略説明 | いいえ | いいえ | ノードの簡単な説明 | |
詳細説明 | いいえ | いいえ | メッセージ・フロー内のノードの目的を説明するテキスト |