右键单击节点(必须是 Compute、Database 或 Filter 节点)并单击打开 ESQL。 该消息流的缺省 ESQL 文件 <message_flow_name>.esql 将在编辑器视图中打开(如果文件不存在,将创建文件)。(如果已经创建了缺省文件并单击了打开 ESQL,此文件将在编辑器视图中打开,同时新模块被创建并且突出显示。)
在 ESQL 文件结束处,为此节点创建一个框架模块。该模块的具体内容取决于节点的类型。下列模块是为 Compute 节点而创建的:
CREATE COMPUTE MODULE <module_name>
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;
要使上述 ESQL 能够部署到 V2.1 的代理,必须如下例中的粗体文本所示,将模块级变量
InputRoot 和
OutputRoot 传递到过程或函数:
CREATE COMPUTE MODULE <module_name>
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
-- CALL CopyMessageHeaders(InputRoot, OutputRoot);
-- CALL CopyEntireMessage(InputRoot, OutputRoot);
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders(IN InputRoot REFERENCE, IN
OutputRoot REFERENCE) BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
WHILE I < J DO
CREATE LASTCHILD OF OutputRoot DOMAIN FIELDNAME (
InputRoot.*[I] ); /*create the parser for OutputRoot*/
SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
CREATE PROCEDURE CopyEntireMessage(IN InputRoot REFERENCE, IN
OutputRoot REFERENCE) BEGIN
SET OutputRoot = InputRoot;
END;
END MODULE;
模块名称取决于为相应的节点属性设置的值。缺省名称是 <message_flow_name>_<node_type>。
函数 Main 下面的 Compute 节点模块中声明了两个过程,Main 函数包含对这两个过程的调用,下面会对这两个过程进行描述。这些调用已被注释掉。如果希望包含这两个过程提供的功能,就必须对这些命令行取消注释,并在为 Main 函数创建的 ESQL 中将它们放到适当的位置。
- CopyMessageHeaders
- 此过程在输入消息包含的各个头之间循环,并将每个头复制到输出消息。
如果是从 V2.1 进行迁移,那么此过程等同于在“Compute 节点属性”对话框上选择“复制消息头”按钮时生成的代码。
- CopyEntireMessage
- 此过程将包括头在内的全部输入消息内容复制到输出消息。
如果是从 V2.1 进行迁移,那么此过程等同于在“Compute 节点属性”对话框上选择“复制整条消息”按钮时生成的代码。
如果是为 Database 节点创建 ESQL 模块,则创建以下模块:
CREATE DATABASE MODULE <module_name>
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
RETURN TRUE;
END;
END MODULE;
为 Filter 节点创建的模块除第一行(如下所示)之外,其他内容均与为 Database 节点创建的模块相同:
CREATE FILTER MODULE <module_name>