创建动态字段引用

可以使用类型 REFERENCE 的变量作为动态引用来浏览消息树。它的用法类似于消息光标或变量指针。访问重复结构时,优先于数组下标使用引用变量通常更为简单和高效。任何地方都可接受引用变量。接受字段引用并与一个语句集合和函数放在一起以允许消息树的详细操作。

在您可以使用之前,必须声明一个动态引用。 动态引用在单句语句中声明和初始化。下例显示如何创建并使用引用。

-- Declare the dynamic reference
DECLARE myref REFERENCE TO OutputRoot.XML.Invoice.Purchases.Item[1];

--  Continue processing for each item in the array
WHILE LASTMOVE(myref)=TRUE 
DO  
-- Add 1 to each item in the array
      SET myref = myref + 1;
-- Move the dynamic reference to the next item in the array
      MOVE myref NEXTSIBLING;
END WHILE;

此示例声明动态引用 myref,它指向 Purchases 中数组的第一项。第一项中的值增加 1,然后指针(动态引用)移动到下一个项。项的值再增加 1。这个过程继续直到指针移动到消息数组的作用域之外(处理了该数组中的所有项),然后 LASTMOVE 函数返回 FALSE。

下例显示进一步的示例。

DECLARE ref1 REFERENCE TO InputBody.Invoice.Purchases.Item[1];

DECLARE ref2 REFERENCE TO 
	InputBody.Invoice.Purchases.NonExistentField;

DECLARE scalar1 CHARACTER;
DECLARE ref3 REFERENCE TO scalar1; 

在第二个示例中,ref2 设置为指向 InputBody,因为指定的字段不存在。

除了 MOVE 语句(它更改动态引用的位置)之外,动态引用可用于任何可以使用静态引用的地方。任何表达式或语句中的动态引用的值是它当前指向的字段或变量的值。例如,使用示例消息中的消息,Invoice.Customer.FirstName 的值是 Andrew。如果动态引用 myref 按如下所示设置为指向 FirstName 字段:

DECLARE myref REFERENCE TO Invoice.Customer;

myref 的值为 Andrew。您可以扩展此动态引用,如下所示:

SET myref.Billing.Address[1] = 'Oaklands';

该语句把示例中的地址更改为 Oaklands Hursley Village Hampshire SO213JR。

即使修改了树,动态引用的位置仍保持固定。为了说明这点,下面的步骤将示例消息中的消息用作它们的输入消息,然后创建此消息的修改后版本作为输出消息:

  1. 将输入消息复制到输出消息。
  2. 要修改输出消息,首先声明一个动态引用 ref1,它指向第一个项“The XML Companion”。
    DECLARE ref1 REFERENCE TO 
    	OutputRoot.XML.Invoice.Purchases.Item[1];
    现在,动态引用等价于静态引用 OutputRoot.XML.Invoice.Purchases.Item[1]
  3. 使用 create 语句插入新的第一项用于此购买。
    CREATE PREVIOUSSIBLING OF ref1 VALUES 'Item'; 
    现在,动态引用等价于静态引用 OutputRoot.XML.Invoice.Purchases.Item[2]
相关概念
消息流概述
ESQL 概述
消息建模
相关任务
设计消息流
定义消息流内容
管理 ESQL 文件
相关参考
Compute 节点
Database 节点
Filter 节点
ESQL 引用
DECLARE 语句
IF 语句
LASTMOVE 函数
MOVE 语句
SET 语句
WHILE 语句
示例消息
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ak04864_