PROPAGATE ステートメント

PROPAGATE ステートメントは、メッセージをダウンストリーム・ノードに伝搬します。

構文

PROPAGATE ステートメントは、Compute ノードや Database ノードでは使用できますが、Filter ノードでは使用できません。このステートメントへの追加により、エラー処理を支援します。『エラー処理のための ESQL のコーディング』を参照してください。

TO TERMINAL 文節
TO TERMINAL 文節がある場合は、TerminalExpression が評価されます。 その結果のタイプが CHARACTER の場合は、以下の規則に従ってメッセージがターミナルに伝搬されます。 変更の始まり
‘nowhere’ : no propagation
‘failure’ : Failure
 ‘out’ : Out
 ‘out1'  : Out1
 ‘out2'  : Out2
 ‘out3'  : Out3
 ‘out4’  : Out4
変更の終わり
ヒント: ターミナル名は大/小文字の区別があるので、例えば "Out1" はどのターミナルとも一致しません。
TerminalExpression の結果のタイプが INTEGER の場合は、以下の規則に従ってメッセージがターミナルに伝搬されます。
-2 : no propagation
-1 : failure
 0 : out
 1 : out1
 2 : out2
 3 : out3
 4 : out4

TerminalExpression の結果が CHARACTER でも INTEGER でもない場合は、ブローカーは例外をスローします。

TO TERMINAL 文節も TO LABEL 文節もない場合は、ブローカーはメッセージを "out" ターミナルに伝搬します。

ヒント: ターミナル式で文字値を使用すると、最も自然で読みやすいコードになります。しかし、整数値の方がループに関する操作が容易で、やや高速です。
TO LABEL 文節
TO LABEL 文節がある場合は、LabelExpression が評価されます。その結果のタイプが CHARACTER で、しかもラベル属性が LabelExpression と一致する Label ノードが同じフロー中にある場合は、ブローカーはメッセージをそのノードに伝搬します。
ヒント: ラベルはターミナルと同様に大/小文字の区別があります。さらに、Label ノードへのルーティングの場合と同様に、ターゲットを定義するのは Label ノードのラベル自体ではなく Label ノードの labelName 属性であることに注意してください。

LabelExpression の結果が NULL の場合、タイプが CHARACTER でない場合、またはフロー内に一致する Label ノードがない場合には、ブローカーは例外をスローします。

TO TERMINAL 文節も TO LABEL 文節もない場合は、ブローカーはメッセージを "out" ターミナルに伝搬します。

MessageSources 文節

MessageSources 文節は、伝搬されるメッセージ・ツリーを選択します。この文節は Compute ノードのみに適用できます (Database ノードでは効果がありません)。

MessageSources 文節に指定できる値は以下のとおりです。
ENVIRONMENT :
  InputLocalEnvironment
  OutputLocalEnvironment

Message :
  InputRoot
  OutputRoot

ExceptionList :
  InputExceptionList
  OutputExceptionList

MessageSources 文節がない場合、ノードの "計算モード" 属性を使用して、どのメッセージを伝搬するか判別されます。

FINALIZE 文節
ファイナライズとは、ヘッダー・チェーンを固定し、「プロパティー」フォルダーとヘッダーを一致させるプロセスのことです。FINALIZE 文節がある場合、この文節を使用してファイナライズを制御できます。

この文節は Compute ノードのみに適用できます (Database ノードでは効果がありません)。

Compute ノードを使用すると、他のノード (入力メッセージに変更を加える他のノード) によって、出力メッセージに変更を加えることができます。しかし、以下のようになった後に、Compute ノードで作成されたメッセージに、別のノードで変更を加えることはできません。
  • ファイナライズされた後
  • ビット・ストリームを生成する output ノードまたは他のノードに達した後

FINALIZE を DEFAULT に設定するか、FINALIZE 文節がない場合は、伝搬の前に出力メッセージがファイナライズされます (ただし Environment、Local Environment、または Exception List はファイナライズされません)。

変更の始まりFINALIZE を NONE に設定すると、ファイナライズは行われません。メッセージ・フローのダウンストリームのノードで出力メッセージ・ツリー全体の更新を保持および許可したい場合、このオプションは必須であり、次のセクションで説明する DELETE NONE とともにこのオプションを使用します。変更の終わり

DELETE 文節
DELETE 文節を使用すると、出力ローカル環境、メッセージ、および例外リストの消去を制御できます。

DELETE 文節は Compute ノードのみに適用できます (Database ノードでは効果がありません)。

DELETE を DEFAULT に設定するか、DELETE 文節がない場合は、出力ローカル環境、メッセージ、および例外リストはすべて消去され、それらのメモリーは伝搬の直後に回復されます。

変更の始まりDELETE を NONE に設定すると、何も消去されません。 ダウンストリームのノードで出力ローカル環境メッセージの単一インスタンスと例外リスト・ツリーを表示できるようにしたい場合は、DELETE NONE を使用します。 それぞれの伝搬は、空のツリーから開始されるのではなく、以前の伝搬によって作成されたこれらのツリーの内容から開始されます。 これらのノードを使用して出力ツリーも更新したい場合は、先のセクションで説明した FINALIZE NONE オプションと一緒に DELETE NONE を使用する必要があります。変更の終わり

どちらのツリーが伝搬されたかにかかわらず、ファイナライズされた出力ツリーが消去されることに注意してください。

伝搬は同期プロセスの一種です。つまり、ダウンストリーム・ノードでのメッセージの処理がすべて完了するまで、次のステートメントは実行されません。この処理により例外がスローされることがあり、その例外がキャッチされない場合は PROPAGATE 呼び出しの後のステートメントに達することができなくなるので注意してください。この処理はフローのロジックで必要である可能性があり、必要でない場合は、ハンドラーを使用して例外をキャッチし、必要なアクションを実行できます。伝搬のダウンストリームでスローされる例外も、キャッチされない場合は、Compute ノードや Database ノードの最後の自動アクション (例えば、COMMIT Transaction set to Commit の発行) が実行できないようになることに注意してください。

DECLARE i INTEGER 1;
DECLARE count INTEGER;
SET count = CARDINALITY(InputRoot.XML.Invoice.Purchases."Item"[])
WHILE i <= count DO 
  -- メッセージ・ヘッダーのコピーのために、ツールが生成したデフォルト・プロシージャーを使用
  CALL CopyMessageHeaders();
  SET OutputRoot.XML.BookSold.Item = InputRoot.XML.Invoice.Purchases.Item[i]; 
  PROPAGATE; 
  SET i = i+1;
END WHILE; 
RETURN FALSE;

PROPAGATE ステートメントによって OUT ターミナルで生成されるメッセージは次のとおりです。

<BookSold>
 <Item>
  <Title Category="Computer" Form="Paperback" Edition="2">The XML Companion </Title>
  <ISBN>0201674866</ISBN>
  <Author>Neil Bradley</Author>
  <Publisher>Addison-Wesley</Publisher>
  <PublishDate>October 1999</PublishDate>
  <UnitPrice>27.95</UnitPrice>
  <Quantity>2</Quantity>
 </Item>
</BookSold>
<BookSold>
 <Item>
  <Title Category="Computer" Form="Paperback" Edition="2">A Complete Guide to
   DB2 Universal Database</Title>
  <ISBN>1558604820</ISBN>
  <Author>Don Chamberlin</Author>
  <Publisher>Morgan Kaufmann Publishers</Publisher>
  <PublishDate>April 1998</PublishDate>
  <UnitPrice>42.95</UnitPrice>
  <Quantity>1</Quantity>
 </Item>
</BookSold>
<BookSold>
 <Item>
  <Title Category="Computer" Form="Hardcover" Edition="0">JAVA 2 Developers
  Handbook</Title>
  <ISBN>0782121799</ISBN>
  <Author>Phillip Heller, Simon Roberts </Author>
  <Publisher>Sybex, Inc.</Publisher>
  <PublishDate>September 1998</PublishDate> <UnitPrice>59.99</UnitPrice>
  <Quantity>1</Quantity>
 </Item>
</BookSold>
関連概念
ESQL の概要
エラー処理のための ESQL のコーディング
関連タスク
ESQL の開発
複数の出力メッセージの生成
データベース更新のコミット
関連資料
構文図: 使用可能なタイプ
ESQL のステートメント
RETURN ステートメント
サンプル・メッセージ
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ak05110_