最近,我开始使用IBM Integration Bus v10.0.0.9的文档,并使用它们的工作原理以及ESQL语法和技巧来进行工作。
根据this,他们建议使用引用来访问消息树,以免进行过多的导航。他们甚至展示了如何在OutputRoot消息树中使用参考变量here。
知道了这一点,我一直在尝试在ComputeNode中执行以下操作:
-- ComputeNode MRM Writer
DECLARE refPointer REFERENCE TO OutputRoot.MRM.PARENT_NODE;
SET refPointer.CHILD_NODE = 'Some value';
理论上,这应该等效于:
SET OutputRoot.MRM.PARENT_NODE.CHILD_NODE = 'Some value';
但是,当尝试在下一个ComputeNode上达到该值时,我发现它为空:
-- ComputeNode MRM Reader
DECLARE someValue CHARACTER InputRoot.MRM.PARENT_NODE.CHILD_NODE;
我尝试使用CREATE LASTCHILD OF OutputRoot.MRM DOMAIN 'MRM' NAME 'PARENT_NODE';
,然后尝试引用,但仍给出空值。而且我知道问题出在我使用完整路径时存在引用。我也知道引用确实有效,因为我正在使用引用变量从InputRoot消息树中获取值。
我该怎么做才能使参考工作?还是无法在某些域中使用它们?如果是,哪个域可以使用它们?
我已经注意到这个问题很普遍,即使使用常规的OutputRoot.XMLNSC引用,它也会发生。因此,问题实际上不是MRM域,而是引用本身。 我还注意到,如果我设置了一个对引用可变的环境,然后将OutputRoot.MRM设置为环境变量的值,它似乎可以解决问题,但是这样做是多余的,并且由于某些原因它有时会失败。 >
-- Redundant workaround:
SET Environment.Variables.Output = refPointer;
SET OutputRoot.MRM.PARENT_NODE = Environment.Variables.Output;
SET Environment.Variables.Output = NULL;
答案 0 :(得分:-1)
您需要在分配前创建一个子属性:
创建字段OutputRoot.MRM.PARENT_NODE类型NameValue值'这是我的TestCase';