同时从IBM文档中复制示例:https://www.ibm.com/support/knowledgecenter/SSMKHH_9.0.0/com.ibm.etools.mft.doc/ak04864_.htm带有以下示例消息:https://www.ibm.com/support/knowledgecenter/SSMKHH_9.0.0/com.ibm.etools.mft.doc/ak05911_.htm没有应用消息模型,上:IBM Integration Toolkit版本:10.0.0.16带有以下代码片段:
CALL CopyEntireMessage();
-- Declare the dynamic reference
DECLARE myref REFERENCE TO OutputRoot.XMLNSC.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 = CAST(myref AS INTEGER) + 1;
-- Move the dynamic reference to the next item in the array
MOVE myref NEXTSIBLING;
END WHILE;
我突然发现下面的代码行:
SET myref = myref + 1;
或替代:
SET myref = CAST(myref AS INTEGER) + 1;
对第一项的值没有任何影响,而且,它甚至阻止了以下各项的预期工作:
MOVE myref NEXTSIBLING;
所以myref指针不会移到下一个同级(没有从item [1]移到item [2],并且myref只是从调试视图中的变量列表中消失了。
我的问题:
[为什么SET myref = myref + 1;
或SET myref = CAST(myref AS INTEGER) + 1;
不起作用?根据该文档,后者应在没有消息模型的情况下工作。
我无法解释症状,但是我可以提出一些有用的建议:
CALL CopyEntireMessage();
-- For each item in the array...
FOR refItem AS OutputRoot.XMLNSC.Invoice.Purchases.Item[] DO
SET refItem = CAST(refItem AS INTEGER) + 1;
END FOR;
无需声明参考变量(但是您可以根据需要阻止ESQL编辑器抱怨“未声明”参考变量)。无需自己移动参考变量-FOR循环为您完成。
您会发现调试器仅告诉您what正在发生。但是(正如您所发现的那样)它不能告诉您为什么发生了。为此,您需要一个用户跟踪。不是跟踪节点,而是用户跟踪。您必须打开IIB控制台,并使用mqsichangetrace,mqsireadlog,mqsiformatlog命令(按此顺序)开始用户跟踪,将其读取并格式化为文本。前几次比较麻烦,但是几乎可以肯定会向您显示代码为什么不起作用。