PROPAGATE 语句

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

语法

您可以在 Compute 和 Database 节点中使用 PROPAGATE 语句,但不能在 Filter 节点中使用。为此语句添加适当的内容有助于错误处理,请参阅编写 ESQL 代码以处理错误

TO TERMINAL 子句
如果存在 TO TERMINAL 子句,则对 TerminalExpression 求值。如果结果属于 CHARACTER 类型,则按照规则将消息传播到终端:
‘nowhere’ : no propagation
‘failure’ : Failure
‘out’ : Out
‘out 1' : Out1
‘out 2' : Out2
‘out 3' : Out3
‘out 4’ : 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 节点中不起作用)。

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

如果 FINALIZE 设置为 NONE,则不进行最终化。

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

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

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

如果 DELETE 设置为 NONE,则不清除任何内容。

请注意,无论传播的是什么内容,都会最终化和清除输出树。

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

传播是一个同步过程。即,直到下游节点中的所有消息都已处理完,才执行下一条语句。请注意,此过程可能会抛出异常,如果未捕获这些异常,它们将阻止执行 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/05/19
ak05110_