【问题标题】:Get Multiple Outputs From Single Input Message从单个输入消息中获取多个输出
【发布时间】:2018-06-03 21:37:24
【问题描述】:

我想从单个 XML 输入消息中获得多个输出。

<List>
<type>mailbox</type>
<Docs>
  <DocID>38ghjk</DocID>
</Docs>
<Docs>
  <DocID>39ghjk</DocID>
</Docs>

这就是我的 XML 的样子,它包含更多的 DocID。我的要求是我想要每个 DocID 的单独输出消息。我尝试使用 while 循环,但我没有收到每个 DocID 的单独消息。我可以获取所有 DocID,但无法获取每个 DocID 的单独输出。

请提出任何方法或解决方案,如有任何疑问,请发表评论。

【问题讨论】:

  • 您应该包含您的 esql 代码。同时检查 PROPAGATE 语句。
  • 感谢循环中的 Attila PROPAGATE 语句帮助我获得所有 docID 的单独输出。并祝你新年快乐。
  • 您应该用您的解决方案发布您自己问题的答案。

标签: ibm-mq ibm-integration-bus extended-sql


【解决方案1】:
DECLARE I INTEGER;
DECLARE J INTEGER;
SET J = CARDINALITY(InputRoot.XMLNSC.List.Docs[]);
SET I = 1;
WHILE I < J  DO
SET OutputRoot.XMLNSC.LIST.DocId[K] = InputRoot.XMLNSC.List.Docs[I].DocId;
PROPAGATE TO TERMINAL 'out' delete none;
SET I = I + 1;
END WHILE;

之前我没有使用传播语句,所以我得到了单个输出,但现在我得到了所有 docid 的不同输出。

【讨论】:

    【解决方案2】:

    CARDINALITY 不是最好的方法,你可以这样做:

    DECLARE refInDocument REFERENCE TO InputRoot.XMLNSC.List.Docs;
    WHILE LASTMOVE(refInDocument) DO
       SET OutputRoot.XMLNSC.Docs.DocId = refInDocument.DocId;
       PROPAGATE TO TERMINAL 'out' delete none;
       MOVE refInDocument NEXTSIBLING;
    END WHILE;
    

    您可以在以下链接中的 IBM 文档中阅读更多相关信息: https://www.ibm.com/support/knowledgecenter/en/SSMKHH_9.0.0/com.ibm.etools.mft.doc/bj28653_.htm

    【讨论】:

    • 是的,对于很长的列表来说,CARDINALITY 是一个非常糟糕的函数。而且参考更漂亮。
    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 2021-04-14
    • 2021-10-21
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    相关资源
    最近更新 更多