嵌套子流中更改的值未反映在主父流中MULE 4

问题描述

我在 foreach 循环外声明了一个变量 var2。

用例

在 var2="abc" 的第一次迭代值之前 第一次迭代后 var2="bcd"

我希望第二次迭代使用值作为“bcd”,但第二次迭代使用值“abc”。

请为我的用例提出一个解决方案。

更新

问题不是由于 foreach。

我有 3 个流 flow1--> flow2(childofflow1)--> flow3(childofflow2)

我在 flow1 中定义了变量 vars.var2 --> 在 flow3 中更新了它 --> 更新后的值反映在 flow2 中 --> 更新后的值没有反映在 flow1 中

value in flow1 = a
value in flow2 = a
value updated in flow3 to b 
value reflected in flow2 = b
value reflected in flow1 = a

解决方法

foreach 作用域实际上保留了前一次迭代中的变量值,并记录在案的行为:https://docs.mulesoft.com/mule-runtime/4.3/for-each-scope-concept#variable-propagation

也许您的流程正在覆盖该值。

示例:

        <set-variable value='abc' doc:name="Set Variable" variableName="var2"/>
        <set-payload value="#[[1,2,3]]"/>
        <foreach doc:name="For Each" >
            <set-variable value='#[vars.var2 ++ "def"]' doc:name="Set Variable" variableName="var2"/>
            <logger level="INFO" doc:name="Logger" message="Iteration #[vars.counter] value vars2: #[vars.var2]"/>
        </foreach>
        <logger level="INFO" doc:name="Logger" message="final value #[ vars.var2]"/>

输出日志:

Iteration 1 value vars2: abcdef
Iteration 2 value vars2: abcdefdef
Iteration 3 value vars2: abcdefdefdef
final value abcdefdefdef
,

我已经为流 2 设置了目标变量,这就是为什么对负载/变量的任何更改都没有反映在流 1 中的原因。 在 Flow Reference 组件中设置目标变量会导致原始消息保持不变。这意味着在引用流完成其处理器执行后,对负载或引用流中发生的变量的任何修改都会恢复,将负载和变量返回到它们的原始值。

或者,如果您不定义目标变量,则在引用流完成其执行后,负载或引用流中的变量发生的任何修改都会保留,从而更改负载或变量的原始值。

>
Documentation for reference:
https://docs.mulesoft.com/mule-runtime/4.3/flowref-about