本主题包含以下部分:
使用 Compute 节点以构造一个或多个新的输出消息。 这些输出消息可能通过修改输入消息中提供的信息来创建,或仅使用可能(或未必)取自数据库的新信息来创建。 可使用输入消息的元素(如,头、头字段和主体数据)、其相关的环境及其异常列表来创建新输出消息。
您指定在消息流 ESQL 资源文件中如何通过编码 ESQL 来创建新消息。您可以使用 ESQL 表达式创建和修改消息的组件,并可以引用外部数据库的输入消息和数 据的元素。表达式可以使用算术运算符、文本运算符(例如,并置)、逻辑运算符和其他内置函数。
使用 Compute 节点:
在该此消息流关联的 ESQL(.esql)文件中,定义与该节点关联的模块内的 ESQL 语句。您必须创建此文件来完成消息流的定义。
Compute 节点在工作台中由以下图标表示:
如果要从该节点访问数据库:
在 z/OS 系统上,代理使用 mqsisetdbparms 命令中指定的代理启动任务标识或用户标识和密码、JCL 和定制数据集 <hlq>.SBIPPROC 中的 BIPSDBP。
您选择的值是为您已经添加的一个或多个数据库表实现的:您无法为每个表选择不同的值。
当您选择此框时,节点将所有数据库的正返回码按错误处理并将以同样的方法生成异常,如同对负或更严重的错误那样的方式。
如果您没有选择框,则节点将警告作为正常返回码处理,并且不生成任何异常。生成的最明显的警告是未找到,在大多数情况下可以安全地作为正常返回码处理。
如果您清除此框,则必须包含 ESQL 来检查任何可能在对每个数 据库做出调用后(您可以使用 SQLCODE 和 SQLSTATE 来完成)返回的数据库错误。如果发生错误,您必须处理消息流中的错误来确保代理和数据库的完整性:如果您没有通过自己的处理来解决则会忽略错误,因为您已经选择不调用由代理处理的缺省错误。例如,您可以包含 ESQL THROW 语句以在该节点中抛出异常,或使用 Throw 节点在消息流中后面的点生成自己的异常。
对 ESQL 语句进行编码以定制 Compute 节点的行为。例如,使用输入消息或数据库内容(未经更改或修改)或新数据,您可以定制它来创建新输出消息或消息。例如,您可能要通过添加数据库的值在输入消息中修改值,并在输出消息中的字段存储结果。
对在 ESQL 文件中需要的 ESQL 语句进行编码,该文件与您包含 Compute 节点实例的消息流关联。ESQL 文件(缺省情况下名称为 <message_flow_name>.esql)在需要节点的消息流中包含每个节点的 ESQL。 每个与特定节点相关的代码部分都称为模块。
如果此消息流尚不存在 ESQL 文件,则右键单击 Compute 节点并单击打开 ESQL。这在 ESQL 编辑器视图中创建并打开了新的 ESQL 文件。
如果文件已存在,则单击 ESQL 模块属性旁的浏览按钮。这显示“模块选择”对话框,它列出可以由此消息流访问的在 ESQL 文件中定义的可用 Compute 节点模块(可以在其他独立的项目中定义 ESQL 文件)。选择相应的模块并单击确定。如果没有可用的合适模块,则列表为空。
如果您指定的模块不存在,则将为您创建该模块并由编辑器定位文件来显示它。如果文件和模块已经存在,则编辑器定位文件并显示和突出显示正确模块。
如果您愿意,可以在资源导航器中打开相应的 EAQL 文件并在大纲视图中选择此节点。
如果在新的或现有的 ESQL 文件中为此节点创建了模块骨架,则它由以下 ESQL 组成。此示例中显示缺省模块名称:
CREATE COMPUTE MODULE <flow_name>_Compute CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN -- CALL CopyMessageHeaders(); -- CALL CopyEntireMessage(); RETURN TRUE; END; CREATE PROCEDURE CopyMessageHeaders() BEGIN DECLARE I INTEGER 1; DECLARE J INTEGER CARDINALITY(InputRoot.*[]); WHILE I < J DO SET OutputRoot.*[I] = InputRoot.*[I]; SET I = I + 1; END WHILE; END; CREATE PROCEDURE CopyEntireMessage() BEGIN SET OutputRoot = InputRoot; END; END MODULE;
DECLARE I INTEGER 1;为
DECLARE I INTEGER; SET I=1;
DECLARE J INTEGER CARDINALITY(InputRoot.*[]);为
DECLARE J INTEGER; SET J=CARDINALITY(InputRoot.*[]);
如果创建了自己的 ESQL 模块,则必须完全按照所示内容创建该框架,过程调用和定义除外(如下所述)。您可更改缺省名称,但需确保所指定的名称与相应的节点属性 ESQL 模块的名称相匹配。如果要模块名称包含一个或多个空格,在 ESQL 模块属性中用双引号将名称括起。
添加自己的 ESQL 在 CREATE FUNCTION 后面的 BEGIN语句后,及 RETURN TRUE 前定制该节点。可使用两个包含在框架中的对过程 CopyEntireMessage 和 CopyMessageHeaders 的调用。
在函数 Main 后定义的这些过程提供了您可能在处理消息时需要的常用函数。 注释掉框架中的调用;如果要使用过程,则除去注释标记。如果不想使用某个过程,则从模块中同时除去调用和过程定义。
在前发行版中,这些过程执行的函数由“属性”对话框上两个等价的 Compute 节点单选按钮提供。
您还可以使用
创建 ESQL 文件。如果选择计算方式,则指定缺省情况下是否在输出消息中使用消息、LocalEnvironment(先前版本中指定为 DestinationList)和异常列表组件,这些组件在节点中生成或包含在入局消息中。
当已转换的消息在节点中完成处理的情况下路由到 out 终端时,会使用此缺省值。每当 PROPAGATE 语句未指定其输出消息的组合时,也会使用缺省值。
那些未包含在您的选择中的组件在传递时都保持不变;即使修改那些组件,这些更新对于该节点也是局部的。
消息树的 Environment 组件不受方式设置的影响。其内容(如果存在)会继续从输出消息中的该节点进行传递。
您必须设置此属性来正确反映所需的输出消息格式。如果您选择不包含消息的某个特殊部分的选项(或接收缺省值),则该部分不包含在任何构造的输出消息中。
在以下表中解释了这些选项。
方式 | 描述 |
---|---|
消息(缺省) | 按节点内的修改,通过 Compute 节点生成或传递消息。 |
LocalEnvironment | 按节点内的修改,通过 Compute 节点生成或传递 LocalEnvironment 树结构。 |
LocalEnvironment 和消息 | 按节点的修改,通过 Compute 节点生成或传递 LocalEnvironment 树结构和消息。 |
异常 | 按节点内的修改,通过 Compute 节点生成或传递异常列表。 |
异常和消息 | 按节点的修改,通过 Compute 节点生成或传递异常列表和消息。 |
异常和 LocalEnvironment | 按节点的修改,通过 Compute 节点生成或传递异常列表和 LocalEnvironment 树结构。 |
全部 | 按节点的修改,通过 Compute 节点生成或传递消息、异常列表和 LocalEnvironment。 |
因为 Compute 节点具有输入消息和输出消息,所以您可以使用 ESQL 在这两者中引用字段。您还可以使用 InputLocalEnvironment 和 OutputLocalEnvironment, InputExceptionList 和 OutputExceptionList,以及输入和输出消息体。
设置“验证”属性以定义如何验证 Compute 节点产生的消息。注意这些属性不会使输入消息生效。如果必需验证,则要求输入节点或先前的验证节点已经执行了验证。
有关更多详细信息,请参阅验证消息和MRM 域中消息的验证属性。
在以下表中描述了 Compute 节点终端。
终端 | 描述 |
---|---|
In | 接受供节点处理的消息的输入终端。 |
Failure | 当计算期间发生未处理的意外情况时输入消息路由到的输出终端。 |
Out | 当节点中的处理完成时已转换的消息路由到的输出终端。已转换的消息也可能由 PROPAGATE 语句路由到该终端。 |
Out1 | 已转换的消息可能由 PROPAGATE 语句路由到的第一个选用输出终端。 |
Out2 | 已转换的消息可能由 PROPAGATE 语句路由到的第二个选用输出终端。 |
Out3 | 已转换的消息可能由 PROPAGATE 语句路由到的第三个选用输出终端。 |
Out4 | 已转换的消息可能由 PROPAGATE 语句路由到的第四个选用输出终端。 |
下表描述该节点的属性;标题为 M 的列表示属性是否是必需的(如果在未定义缺省值时必须输入值,则在属性对话框上以星号作标记),标题为 C 的列表示属性是否是可配置的(将消息流添加到 BAR 文件以部署此文件时可以更改该值)。
下表描述 Compute 节点的“基本”属性。
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
数据源 | 否 | 是 | 数据库的 ODBC 数据源名,在该数据库中驻留着您在与该消息流关联的 ESQL 文件中引用的任何表(在 ESQL 模块属性中标识)。您仅可以为节点指定一个数据源。 | |
事务 | 是 | 否 | 自动 | 节点的事务方式。这可以是自动或落实。仅当您已经为输入选择数据库表时才有效。 |
ESQL 模块 | 是 | 否 | Compute | ESQL 文件中的模块名称,该文件包含针对数据库和输入、输出消息执行的语句。 |
计算方式 | 是 | 否 | 消息 | 从以下各项选择:
|
将警告作为错误处理 | 是 | 否 | 已清除 | 将数据库 SQL 警告作为错误处理。如果您选中该复选框,则执行此操作。 |
在数据库出错时抛出异常 | 是 | 否 | 选中 | 数据库错误导致代理抛出异常。如果您选中该复选框,则执行此操作。 |
下表描述 Compute 节点的“验证”属性。
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
验证 | 是 | 是 | 无 | 验证是否发生。有效值为无、内容和值、内容和继承。 |
故障操作 | 是 | 否 | 异常 | 验证失败后将发生什么操作。只有将验证设置为内容或内容和值,才可以设置该属性。有效值为用户跟踪、本地错误日志、异常和异常列表。 |
包含所有值约束 | 是 | 否 | 选中 | 无法编辑此属性。缺省操作,由所选的复选框表明,即验证中包含所有值约束。 |
固定 | 是 | 否 | 无 | 无法编辑此属性。提供了最小修订。 有效值为无和全部。 |
下表中描述了 MQGet 节点的“一般消息选项”的属性。
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
解析计时 | 是 | 否 | 按需解析 | 该属性控制何时解析输入消息。有效值为按需解析、立即解析和完全解析。 请参阅按需解析,以获取此属性的完整描述。 |
将 MQRFH2C 压缩解析器用于 MQRFH2 域 | 否 | 否 | False | 该属性控制 MQRFH2 头中是否使用 MQRFH2C 压缩解析器,而不是 MQRFH2 解析器。 |
下表描述 Compute 节点的“XMLNSC 解析器”属性。
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
将 XMLNSC 压缩解析器用于 XMLNS 域 | 是 | 已清除 | 否 | ![]() ![]() |
混合内容保留方式 | 是 | 否 | 无 | 此属性控制当 XMLNSC 解析器遇到输入消息中的混合文本时,是否使用该解析器创建消息树中的元素。有效值为无和全部。选择全部表示为混合文本创建元素。选择无表示忽略混合文本并且不创建元素。 |
注释保留方式 | 是 | 否 | 无 | 此属性控制当 XMLNSC 解析器遇到输入消息中的注释时,是否使用该解析器创建消息树中的元素。有效值为无和全部。选择全部表示为注释创建元素。选择无表示忽略注释并且不创建元素。 |
处理指令保留方式 | 是 | 否 | 无 | 此属性控制当 XMLNSC 解析器遇到输入消息中的处理指令时,是否使用该解析器创建消息树中的元素。有效值为无和全部。选择全部表示为处理指令创建元素。选择无表示忽略处理指令并且不创建元素。 |
下表描述 Compute 节点的“描述”属性。
属性 | M | C | 缺省值 | 描述 |
---|---|---|---|---|
简短描述 | 否 | 否 | 节点的简要描述。 | |
详细描述 | 否 | 否 | 描述消息流中节点用途的文本。 |