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