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

value changed in nested child flow not reflected in main parent flow (MULE 4)

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

Usecase:

before 1st iteration value of var2="abc" after first iteration 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 设置了目标变量,这就是为什么对 payload/variables 的任何更改都没有反映在流 1 中。 在流引用组件中设置目标变量会导致原始消息保持不变。这意味着在引用流完成其处理器执行后,对引用流中发生的对负载或变量的任何修改都会恢复,将负载和变量返回到它们的原始值。

或者,如果您未定义目标变量,则在引用流完成执行后,对负载或引用流中的变量进行的任何修改都会持续存在,从而更改负载或变量的原始值。

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