PROPAGATE ステートメントは、メッセージをダウンストリーム・ノードに伝搬します。
PROPAGATE ステートメントは、Compute ノードや Database ノードでは使用できますが、Filter ノードでは使用できません。
‘nowhere’ : no propagation ‘failure’ : failure ‘out’ : out ‘out 1 : out1 ‘out 2 : out2 ‘out 3 : out3 ‘out 4’ : 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 文節は Compute ノードのみに適用できます (Database ノードでは効果がありません)。
DELETE を DEFAULT に設定するか、DELETE 文節がない場合は、出力ローカル環境、メッセージ、および例外リストはすべて消去され、それらのメモリーは伝搬の直後に回復されます。
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>