PROPAGATE ステートメントは、メッセージをダウンストリーム・ノードに伝搬します。
PROPAGATE ステートメントは、Compute ノードや Database ノードでは使用できますが、Filter ノードでは使用できません。このステートメントへの追加により、エラー処理を支援します。『エラー処理のための ESQL のコーディング』を参照してください。
‘nowhere’ : no propagation ‘failure’ : Failure ‘out’ : Out ‘out1' : Out1 ‘out2' : Out2 ‘out3' : Out3 ‘out4’ : Out4
-2 : no propagation -1 : failure 0 : out 1 : out1 2 : out2 3 : out3 4 : out4
TerminalExpression の結果が CHARACTER でも INTEGER でもない場合は、ブローカーは例外をスローします。
TO TERMINAL 文節も TO LABEL 文節もない場合は、ブローカーはメッセージを "out" ターミナルに伝搬します。
LabelExpression の結果が NULL の場合、タイプが CHARACTER でない場合、またはフロー内に一致する Label ノードがない場合には、ブローカーは例外をスローします。
TO TERMINAL 文節も TO LABEL 文節もない場合は、ブローカーはメッセージを "out" ターミナルに伝搬します。
MessageSources 文節は、伝搬されるメッセージ・ツリーを選択します。この文節は Compute ノードのみに適用できます (Database ノードでは効果がありません)。
ENVIRONMENT : InputLocalEnvironment OutputLocalEnvironment Message : InputRoot OutputRoot ExceptionList : InputExceptionList OutputExceptionList
MessageSources 文節がない場合、ノードの "計算モード" 属性を使用して、どのメッセージを伝搬するか判別されます。
この文節は Compute ノードのみに適用できます (Database ノードでは効果がありません)。
FINALIZE を DEFAULT に設定するか、FINALIZE 文節がない場合は、伝搬の前に出力メッセージがファイナライズされます (ただし Environment、Local Environment、または Exception List はファイナライズされません)。
FINALIZE を NONE に設定すると、ファイナライズは行われません。メッセージ・フローのダウンストリームのノードで出力メッセージ・ツリー全体の更新を保持および許可したい場合、このオプションは必須であり、次のセクションで説明する DELETE NONE とともにこのオプションを使用します。
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>