Compute ノードは、1 つ以上の新規出力メッセージを構成するために使用します。
このトピックには、以下のセクションが含まれています。
Compute ノードで作成する出力メッセージは、入力メッセージに提供された情報を変更することによって作成するか、データベースまたはその他のソースから入手できる新規情報のみを使って作成することができます。 入力メッセージのエレメント (例えばヘッダー、ヘッダー・フィールド、および本体データ)、関連する環境、および例外リストを使用して、新規の出力メッセージを作成できます。
メッセージ・フロー ESQL リソース・ファイル内に ESQL をコーディングすることにより、新規メッセージの作成方法を指定します。詳しくは、ESQL の指定を参照してください。
以下の目的で、Compute ノードを使用します。
Compute ノードはパレットの 「変換」ドロワーに含まれていて、ワークベンチ内では次のアイコンによって表されます。
監査目的のため、受け取るオーダーのそれぞれに固有な ID を付けたいメッセージ・フローを考えてください。Compute ノードは入力メッセージを変更しないで、変更された新しいメッセージのコピーを出力メッセージとして作成します。 Compute ノードを使ってオーダーに対する固有の ID を出力メッセージに挿入し、メッセージ・フロー内の後続ノードがそのメッセージを使用することができます。
Compute ノードのインスタンスをメッセージ・フローに入れると、それを構成することができます。メッセージ・フロー・ノードの構成を参照してください。 ノードのプロパティーが、「プロパティー」ビューに表示されます。ノードのプロパティーを「プロパティー」ダイアログに表示するには、ノードをダブルクリックするか、またはノードを右クリックしてから「プロパティー」をクリックします。
値を入力する必要のある (デフォルト値が定義されていない) すべての必須プロパティーには、アスタリスクが表示されます。
以下のように、Compute ノードを構成します。
このノードからデータベースにアクセスするには、以下のようにします。
z/OS® システムの場合、ブローカーは、ブローカーが開始するタスクの ID を使用するか、または mqsisetdbparms コマンド JCL の、カスタマイズ・データ・セット <hlq>.SBIPPROC の BIPSDBP で指定されたユーザー ID とパスワードを使用します。
ここで選択した値が、ユーザーが追加した 1 つ以上のデータベース表にインプリメントされます。表毎に違う値を選択することはできません。
このチェック・ボックスを選択した場合、ノードはデータベースからのすべての正の戻りコードをエラーとして扱い、負の戻りコードに対する処理と同じ方法で例外を生成するか、問題がより重大である場合はエラーを生成します。
このチェック・ボックスを選択しなかった場合、ノードは警告を通常の戻りコードとして扱い、例外を生成しません。 生成される最も重大な警告は「見つかりません」であり、これはほとんどの環境で正常な戻りコードとして支障なく扱うことができます。
このチェック・ボックスのチェックを外す場合、データベース呼び出しを行うたびに返される可能性のあるデータベース・エラーを調べるために ESQL を含める必要があります (これには SQLCODE および SQLSTATE を使うことができます)。エラーが発生した場合、メッセージ・フロー内のエラーを処理してブローカーとデータベースの整合性を確認する必要があります。ブローカーによるデフォルト・エラー処理を呼び出さないように選択してあるため、自分でエラーを処理しない限り、エラーは無視されます。例えば、このノードで例外をスローするために ESQL THROW ステートメントを含めることができます。あるいは、メッセージ・フローの中で Throw ノードを使用して後で独自の例外を生成することができます。
Compute ノードの動作をカスタマイズするには、ESQL ステートメントをコーディングします。 例えば、入力メッセージ、データベースの内容 (変更なし、または変更あり)、または新しいデータを使って 1 つ以上の新規出力メッセージを作成するようにこのノードをカスタマイズできます。 データベースからの値を追加することにより入力メッセージ内の値を変更し、その結果を出力メッセージ内のフィールドに保管することもできます。
必要な ESQL ステートメントは、この Compute ノードのインスタンスが含まれるメッセージ・フローに関連付けられた ESQL ファイル内にコーディングします。デフォルトで <message_flow_name>.esql という名前を持つこの ESQL ファイルには、ESQL を必要とするメッセージ・フロー内のすべてのノード用の ESQL が含まれています。特定のノードに関連したコードの部分はモジュールと呼ばれます。
このメッセージ・フロー用の ESQL ファイルが存在していない場合、Compute ノードをダブルクリックするか、またはこのノードを右クリックして、「ESQL のオープン」をクリックします。 このアクションにより、ESQL エディター・ビューに新しい ESQL ファイルが作成されてオープンされます。 「ブローカー開発」ビューで適切な ESQL ファイルをオープンし、「アウトライン」ビューでこのノードを選択することもできます。
このファイルが既に存在する場合、「ESQL モジュール」プロパティーの隣にある「参照」をクリックすると、「モジュール選択」ダイアログ・ボックスが表示され、このメッセージ・フローからアクセスできる ESQL ファイルで定義されている選択可能な Compute ノード・モジュールがリストされます (ESQL ファイルは従属する他のプロジェクトで定義することができます)。 適切なモジュールを選択して、「OK」をクリックします。使用できる適切なモジュールがない場合は、リストは空になります。
指定されたモジュールが存在しない場合は作成され、エディターはそれを表示します。 ファイルとモジュールが既に存在する場合、エディターは正しいモジュールを強調表示します。
新規または既存の ESQL ファイル内でこのノード用にモジュール・スケルトンが作成された場合、以下の ESQL が含まれます。この例では、デフォルトのモジュール名が表示されています。
CREATE COMPUTE MODULE <flow_name>_Compute CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN -- CALL CopyMessageHeaders(); -- CALL CopyEntireMessage(); RETURN TRUE; END; CREATE PROCEDURE CopyMessageHeaders() BEGIN DECLARE I INTEGER 1; DECLARE J INTEGER CARDINALITY(InputRoot.*[]); WHILE I < J DO SET OutputRoot.*[I] = InputRoot.*[I]; SET I = I + 1; END WHILE; END; CREATE PROCEDURE CopyEntireMessage() BEGIN SET OutputRoot = InputRoot; END; END MODULE;
DECLARE I INTEGER 1;次の内容で置換します。
DECLARE I INTEGER; SET I=1;
DECLARE J INTEGER CARDINALITY(InputRoot.*[]);次の内容で置換します。
DECLARE J INTEGER; SET J=CARDINALITY(InputRoot.*[]);
自分で ESQL モジュールを作成する場合、このスケルトンをそのまま正確に作成する必要があります。 ただし、プロシージャー呼び出しと定義は別です (後述)。 デフォルトの名前を変更することができますが、指定する名前は、対応するノード・プロパティー「ESQL モジュール」の名前と一致することを確認してください。 モジュール名に 1 つ以上のスペースを含めるには、「ESQL モジュール」プロパティーで、名前を二重引用符で囲まなければなりません。
このノードをカスタマイズするための ESQL を、BEGIN ステートメントと CREATE FUNCTION から RETURN TRUE の間に追加します。 スケルトンに組み込まれている、プロシージャー CopyEntireMessage と CopyMessageHeaders への 2 つの呼び出しを使用することができます。
これらのプロシージャーは、関数 Main の次に定義されており、メッセージを操作するときに必要となるかもしれない一般的な機能を備えています。 スケルトンの中で、呼び出しはコメント化されています。 プロシージャーを使用するには、コメント・マーカーを除去します。 プロシージャーを使用しない場合は、呼び出しとプロシージャー定義を両方ともモジュールから除去します。
「計算モード」プロパティーは、どのコンポーネントがデフォルトで出力メッセージ内で使用されるかを制御します。 プロパティーを選択し、「メッセージ」、 「LocalEnvironment」(以前は DestinationList と呼ばれていました)、および「例外」コンポーネント (これらはノード内で生成されるかまたは着信メッセージに含まれているかのどちらか) が使用されるかどうかを指定します。
このデフォルト値は、ノードにおける処理完了時に変換済みメッセージが Out ターミナルにルーティングされるときに使用されます。 また、PROPAGATE ステートメントがその出力メッセージの構成を指定していない場合にもこのデフォルト値が常に使用されます。
選択に含めなかったコンポーネントは、未変更で渡されます。 これらのコンポーネントを変更しても、更新はこのノードに対してローカルになります。
逆に、選択に含めたコンポーネントは渡されず、このノードで行われた更新が持続します。
モード | 説明 |
---|---|
メッセージ (デフォルト) | メッセージが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 |
LocalEnvironment | LocalEnvironment ツリー構造が Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 |
LocalEnvironment とメッセージ | LocalEnvironment ツリー構造とメッセージが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 |
例外 | 例外リストが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 |
例外とメッセージ | 例外リストとメッセージが Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 |
例外と LocalEnvironment | 例外リストと LocalEnvironment ツリー構造が Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 |
すべて | メッセージ、例外リスト、および LocalEnvironment が Compute ノードにより生成されるか、または Compute ノード内で変更されて渡されます。 |
「計算モード」プロパティーの値により、Compute ノードからどの新規メッセージ・ツリーを伝搬するかが指定されます。 そのため選択したメッセージ・ツリーにおいて、入力メッセージは、同等の新規出力メッセージ・ツリーに明示的にコピーされるのでない限り、廃棄されます。
「すべて」を選択すると、Compute ノードは、OutputRoot、OutputLocalEnvironment、および OutputExceptionList にデータを取り込むことにより、Root、LocalEnvironment、および ExceptionList のための新規メッセージ・ツリーを 3 つすべて生成する準備をします。 入力メッセージ・ツリーは、入力から出力に明示的にコピーされるのでない限り、出力には渡されません。
SET OutputRoot = InputRoot; SET OutputLocalEnvironment = InputLocalEnvironment; SET OutputExceptionList = InputExceptionList;ESQL が CopyEntireMessage() であった場合、LocalEnvironment および ExceptionList は出力ターミナル全体にコピーされず、そこに伝搬されません。これらは、メッセージ・フローのそのノードにおいて失われます。
新規または変更された出力メッセージを作成し、同じ LocalEnvironment および ExceptionList を伝搬するには、「計算モード」プロパティーを「メッセージ」に設定し、Compute ノードまたはMapping ノードに渡される LocalEnvironment および ExceptionList が Compute ノードから渡されるようにします。
「計算モード」は、このノードからの伝搬のみに適用されます。 3 つの出力ツリーすべてを Compute または Mapping ノードに作成し、そのノード内でこれらを取り扱ったり共存させることができます。 ただし、「計算モード」では、ノードからの伝搬時にそのような出力ツリーが使用されるかどうかが判別されます。
計算モード | 伝搬されるツリー |
---|---|
すべて | OutputRoot、OutputLocalEnvironment、OutputExceptionList |
メッセージ | OutputRoot、InputLocalEnvironment、InputExceptionList |
LocalEnvironment | InputRoot、OutputLocalEnvironment、InputExceptionList |
LocalEnvironment とメッセージ | OutputRoot、OutputLocalEnvironment、InputExceptionList |
例外 | InputRoot、InputLocalEnvironment、OutputExceptionList |
例外とメッセージ | OutputRoot、InputLocalEnvironment、OutputExceptionList |
例外と LocalEnvironment | InputRoot、OutputLocalEnvironment、OutputExceptionList |
出力ツリーが指定された場所で、ESQL は伝搬の前にこのメッセージ・ツリーを作成します。 ESQL がツリーを作成しない場合、その相関名にツリーは伝搬されず、その代わりに入力ツリーは使用されません (「計算モード」プロパティーがこのオプションを示さなかったため)。 そのため、「計算モード」プロパティーの設定値と ESQL によっては、ノードに入力されたツリーを出力ツリーに転送しなかったためにその入力されたツリーを削除したり、変更されたツリーを意図したように伝搬させることができます。
その逆も成り立ちます。 ESQL が入力ツリーに照会を行ってこれらのツリーを伝搬する必要がない場合、「計算モード」プロパティーの値は、メッセージ・ツリーの伝搬を意図していない時にメッセージ・ツリーが伝搬するということを意味する場合があります。 例えば、LocalEnvironment および ExceptionList を Compute ノードから伝搬したくない場合でも、「メッセージ」を選択したためにツリーの入力バージョンが伝搬される場合があります。 ESQL が明示的に OutputLocalEnvironment および OutputExceptionList を削除する場合でも、「 計算モード」プロパティーの設定により入力ツリーが伝搬されるため、これらの変更はそのノードに対するローカルなものになります。
メッセージ・ツリーの「環境」コンポーネントは、「計算モード」プロパティーの設定に影響されません。 これに内容がある場合、その内容は出力メッセージの中のこのノードから受け渡されます。
このプロパティーは、必要な出力メッセージ形式を反映するように設定します。 メッセージの特定の部分を含んでいないオプションを選択した (またはデフォルト値を受け入れた) 場合、メッセージのその部分は、構成される出力メッセージに組み込まれません。
Compute ノードは入力メッセージと出力メッセージの両方を持つため、ESQL を使って両方のメッセージのフィールドを参照することができます。 また、入力および出力メッセージの本体だけでなく、InputLocalEnvironment、OutputLocalEnvironment、InputExceptionList および OutputExceptionList で作業することもできます。
妥当性検査プロパティーを設定して、Compute ノードによって生成されたメッセージの妥当性検査を行う方法を定義します。 これらのプロパティーによって、入力メッセージの妥当性検査は行われません。 そのような妥当性検査が必要な場合には、入力ノードまたは先行する validation ノードによって妥当性検査がすでに行われていることが期待されます。
詳細については、メッセージの妥当性検査および妥当性検査プロパティーを参照してください。
Compute ノードのターミナルについては、次の表に説明されています。
ターミナル | 説明 |
---|---|
In | ノードが処理するメッセージを受け入れる入力ターミナル。 |
Failure | 処理されない例外が計算時に発生した場合、入力メッセージがルーティングされる出力ターミナル。 |
Out | ノードでの処理が終了した時に、変換されたメッセージがルーティングされる出力ターミナル。 変換されたメッセージは、PROPAGATE ステートメントによってこのターミナルにルーティングされる場合もあります。 |
Out1 | 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 1 の代替出力ターミナル。 |
Out2 | 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 2 の代替出力ターミナル。 |
Out3 | 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 3 の代替出力ターミナル。 |
Out4 | 変換されたメッセージが PROPAGATE ステートメントによってルーティングされる第 4 の代替出力ターミナル。 |
PROPAGATE ステートメントの構文については、PROPAGATE ステートメントを参照してください。
以下の表は、ノード・プロパティーについて説明しています。 M の見出しの列は、プロパティーが必須 かどうかを示します (デフォルトが定義されていない場合に値を入力することが必要なら、アスタリスクのマークが付きます)。 C の見出しの列は、プロパティーが構成可能 かどうかを示します (メッセージ・フローを BAR ファイルに追加してデプロイするとき、値を変更できます)。
Compute ノードの「説明」プロパティーについては、次の表に説明されています。
プロパティー | M | C | デフォルト | 説明 |
---|---|---|---|---|
ノード名 | いいえ | いいえ | ノード・タイプ | ノードの名前。 |
簡略説明 | いいえ | いいえ | ノードの簡単な説明 | |
詳細説明 | いいえ | いいえ | メッセージ・フロー内のノードの目的を説明するテキスト |
Compute ノードの「基本」プロパティーについては、次の表に説明されています。
プロパティー | M | C | デフォルト | 説明 |
---|---|---|---|---|
データ・ソース | いいえ | はい | このメッセージ・フローに関連付けられた ESQL ファイル (「ESQL モジュール」プロパティーにより識別される) で参照する表が存在するデータベースの ODBC データ・ソース名。ノードに対して指定できるデータ・ソースは 1 つだけです。 | |
トランザクション | はい | いいえ | 自動 | ノードのトランザクション・モードです。有効なオプションは、「自動」および「コミット」です。 このプロパティーは、データベース表を入力として選択した場合にのみ有効です。 |
ESQL モジュール | はい | いいえ | Compute | データベースおよび入力・出力メッセージに対して実行されるステートメントを含む、ESQL リソース (ファイル) 内のモジュールの名前。 |
計算モード | はい | いいえ | メッセージ | 以下から選択できます。
|
警告をエラーとして扱う | はい | いいえ | 選択されていない | このチェック・ボックスを選択すると、データベースの SQL 警告はエラーとして処理されます。 |
データベース・エラーで例外をスローする | はい | いいえ | 選択されている | このチェック・ボックスを選択すると、データベース・エラーによりブローカーは例外をスローします。 |
Compute ノードの「パーサー・オプション」のプロパティーについては、次の表に説明されています。
プロパティー | M | C | デフォルト | 説明 |
---|---|---|---|---|
構文解析のタイミング | はい | いいえ | 要求時 | このプロパティーは、入力メッセージを構文解析する時を制御します。
有効な値は、「要求時」、「即時」、および「完全」です。 このプロパティーに関する詳しい説明については、要求時の構文解析を参照してください。 |
XMLNSC コンパクト・パーサーを XMLNS ドメインに使用 | いいえ | いいえ | 選択されていない | ![]() ![]() |
混合内容の保存 | いいえ | いいえ | 選択されていない | このプロパティーは、XMLNSC パーサーが入力メッセージ内に混合テキストを検出したとき、メッセージ・ツリー内にエレメントを作成するかどうかを制御します。 チェック・ボックスを選択すると、混合テキスト用のエレメントが作成されます。 このチェック・ボックスのチェックを外した場合、混合テキストは無視されて、エレメントは作成されません。 |
コメントの保存 | いいえ | いいえ | 選択されていない | このプロパティーは、XMLNSC パーサーが入力メッセージ内にコメントを検出したとき、メッセージ・ツリー内にエレメントを作成するかどうかを制御します。 チェック・ボックスを選択すると、コメント用のエレメントが作成されます。 このチェック・ボックスのチェックを外した場合、コメントは無視されて、エレメントは作成されません。 |
処理命令の保存 | いいえ | いいえ | 選択されていない | このプロパティーは、XMLNSC パーサーが入力メッセージ内に処理命令を検出したとき、これらのメッセージ・ツリー内にエレメントを作成するかどうかを制御します。 チェック・ボックスを選択すると、処理命令用のエレメントが作成されます。 このチェック・ボックスのチェックを外した場合、処理命令は無視されて、エレメントは作成されません。 |
Compute ノードの「妥当性検査」プロパティーについては、次の表に説明されています。
これらのプロパティーの詳細については、妥当性検査プロパティーを参照してください。プロパティー | M | C | デフォルト | 説明 |
---|---|---|---|---|
妥当性検査 | いいえ | はい | なし | このプロパティーは、妥当性検査を行うかどうかを制御します。 有効な値は、「なし」、「内容と値」、「内容」、および「継承」です。 |
失敗時の処置 | いいえ | いいえ | 例外 | このプロパティーは、妥当性検査で障害が発生した場合の動作を制御します。 「妥当性検査」が「内容」または「内容と値」に設定されている場合にのみ、このプロパティーを設定できます。 有効な値は、「ユーザー・トレース」、「ローカル・エラー・ログ」、「例外」、および「例外リスト」です。 |
すべての値制約を含める | いいえ | いいえ | 選択されている | このプロパティーは編集できません。 チェック・ボックスが選択されていることにより示されるデフォルトのアクションは、すべての値制約が妥当性検査に含まれるということです。 |
修正 | いいえ | いいえ | なし | このプロパティーは編集できません。 最小限の修正が行われます。 有効な値は、「なし」、および「フル」です。 |