PROPAGATE 语句

PROPAGATE 语句将消息传播到下游节点中。

语法

您可以在 Compute 和 Database 节点中使用 PROPAGATE 语句,但不能在 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 节点的 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 子句,则使用节点的“compute mode”属性决定要传播的消息。

FINALIZE 子句
最终化是固定头链并使 Properties 文件夹匹配这些头的过程。如果存在 FINALIZE 子句,便可以控制最终化。

该子句只适用于 Compute 节点(它在 Database 节点中不起作用)。

Compute 节点允许其他节点更改其输出消息(通过其他节点更改其输入消息)。但是,Compute 节点创建的消息发生过以下情况后,其他节点便无法再更改它:
  • 已最终化
  • 已到达任何输出节点或其他生成位流的节点

如果 FINALIZE 设置为 DEFAULT,或者没有 FINALIZE 子句,则在传播输出消息(但不是 Environment、Local Environment 或 Exception List)前先对其进行最终化。

更新开始如果 FINALIZE 设置为 NONE,则不进行最终化。如果您要保留并允许通过消息流中的节点下游进行的整个输出消息树的更新,该选项则是必需的,并与 DELETE NONE 一起使用,如下一部分中所述。更新结束

DELETE 子句
DELETE 子句用于控制输出本地环境、消息和异常列表的清除。

DELETE 子句只适用于 Compute 节点(它在 Database 节点中不起作用)。

如果 DELETE 设置为 DEFAULT,或者没有 DELETE 子句,则在传播后立即清除所有输出本地环境、消息和异常列表并回收它们的内存。

更新开始如果 DELETE 设置为 NONE,则不清除任何内容。如果您希望下游节点能够看到输出本地环境消息的单个实例和异常列表树,则使用 DELETE NONE。每次传播都从上一次传播所创建的这些树的内容开始,而不是从空树开始。 如果您还希望这些节点更新输出树,则必须将 DELETE NONE 与上一部分中所述的 FINALIZE NONE 选项一起使用。更新结束

注意,无论传播哪些内容,输出树都会最终确定和清除。

传播是一个同步过程。即,直到下游节点中的所有消息都已处理完,才执行下一条语句。请注意,此过程可能会抛出异常,如果未捕获这些异常,它们将阻止执行 PROPAGATE 调用后面的语句。这可能就是您的流所需的逻辑,但如果不是,您可以使用处理程序来捕获异常并执行必需的操作。请注意,如果未捕获传播的下游抛出的异常,也会阻止执行 Compute 或 Database 节点的自动操作(例如,发出 COMMIT 事务集进行落实)。

DECLARE i INTEGER 1;
  DECLARE count INTEGER;
SET count = CARDINALITY(InputRoot.XML.Invoice.Purchases."Item"[])
WHILE i <= count DO
  --use the default tooling-generated procedure for copying message headers
  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 最后一次更新时间:2006/08/14
ak05110_