在mule中访问forEach内部的变量

问题描述 投票:0回答:1

我有两个问题

  1. 假设我在forEachflowVars.ABC之类的flowVars.DEF中声明了两个变量,我如何在forEach块之外访问那两个变量?
  2. 每个变量都有一个JSON有效负载,如何将这两个变量的数据添加到单个JSON有效负载中?

任何人都可以帮我吗?我无法访问foreach中的变量并添加2个JSON。

这是我的示例代码

<flow name="test">
        <foreach doc:name="For Each">
            <scatter-gather doc:name="Scatter-Gather">
                <set-variable variableName="ABC" value="#[payload]" mimeType="application/json" doc:name="ABC"/>
                <set-variable variableName="DEF" value="#[payload]" mimeType="application/json" doc:name="DEF"/>
            </scatter-gather>
        </foreach>
        <set-payload value="#[flowVars.ABC + flowVars.DEF]" mimeType="application/json" doc:name="adding 2 vars"/>
    </flow>
mule mule-studio dataweave mule-esb
1个回答
1
投票

您需要了解范围如何与foreach一起使用。在foreach范围内设置的任何变量都不会在该范围之外。但是,在foreach范围之外设置的变量(例如set-variable之前的foreach)将在foreach范围内可用。这应该可以帮助您解决问题。我正在取消分散 - 聚集,因为它在你的例子中没有任何用处:

<flow name="test">
    <set-variable variableName="ABC value="#[payload] mimeType="application/json" doc:name="ABC"/>
    <set-variable variableName="DEF value="#[payload] mimeType="application/json" doc:name="DEF"/>
    <foreach doc:name="For Each">
        <set-variable variableName="ABC" value="#[payload]" mimeType="application/json" doc:name="ABC"/>
        <set-variable variableName="DEF" value="#[payload]" mimeType="application/json" doc:name="DEF"/>
    </foreach>
    <set-payload value="#[flowVars.ABC ++ flowVars.DEF]" mimeType="application/json" doc:name="adding 2 vars"/>
</flow>

除此之外,我不确定你的代码是否是简化代码,但是现在有一些问题值得怀疑:

你为什么使用分散聚集?如果您不需要异步执行多项操作(例如调用多个服务),那么这只是代码中的一个复杂问题。在我看来,设置两个vars不符合条件。

你的代码应该做什么?从我的角度来看,您似乎只是将有效负载设置为原始有效负载中最后一个元素的副本。如果是这样,你可以在变压器中这样做:

%dw 2.0
output application/json
---
if (not isEmpty(payload))
  payload[-1] ++ payload[-1]
else
  []
© www.soinside.com 2019 - 2024. All rights reserved.