我如何停止<;foreach>;在mulesoft的中间循环

我如何停止<;foreach>;在mulesoft的中间循环,mule,mule-studio,mule-esb,Mule,Mule Studio,Mule Esb,我有一个数组列表值,我使用foreach和choice循环它。一旦第一次成功发生在choice中,我想退出foreach循环。我不想继续检查剩下的情况。在mulesoft流中 提前感谢。请根据您的条件true使用Break语句退出foreach循环。请根据您的条件true使用Break语句退出foreach循环。正如您在用例中提到的那样 将消息过滤器包装在for循环中 <foreach doc:name="For Each" collection="#[]"> <mes

我有一个数组列表值,我使用foreach和choice循环它。一旦第一次成功发生在choice中,我想退出foreach循环。我不想继续检查剩下的情况。在mulesoft流中


提前感谢。

请根据您的条件true使用Break语句退出foreach循环。

请根据您的条件true使用Break语句退出foreach循环。

正如您在用例中提到的那样 将
消息过滤器
包装在
for循环中

<foreach doc:name="For Each" collection="#[]">
    <message-filter onUnaccepted="flow" >
        <expression-filter expression="#[]"/>
    </message-filter>
</foreach>

正如您在用例中提到的 将
消息过滤器
包装在
for循环中

<foreach doc:name="For Each" collection="#[]">
    <message-filter onUnaccepted="flow" >
        <expression-filter expression="#[]"/>
    </message-filter>
</foreach>

首先,您应该使用indexOf方法找出在哪个索引上可以获得成功消息。然后使用subList方法获取所需的列表,并在Foreach循环中使用该列表

 <foreach collection="#[payload.subList(0,3)]" doc:name="For Each">
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
    </foreach>

首先,您应该使用indexOf方法找出在哪个索引上可以获得成功消息。然后使用subList方法获取所需的列表,并在Foreach循环中使用该列表

 <foreach collection="#[payload.subList(0,3)]" doc:name="For Each">
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
    </foreach>

您可能无法“中断”foreach循环,但始终可以使用expression/groovy脚本实现此功能。请参阅:

您可能无法“中断”foreach循环,但始终可以使用expression/groovy脚本实现此功能。请参阅以下内容:

使用

与传统的“for-each”转换器相比,您可以更轻松地控制Groovy脚本的流。在您的特定情况下,您的groovy脚本看起来(但不是完全)像:


if(row.identifierName==exitCondition)
{
返回
}
其他的
{
//继续处理
}   
}
返回有效负载]]>
使用策略停止处理

我能想到的另一种方法是,一旦你进入循环,就使用a,看看之前是否满足了条件,如果满足了,就什么也不做;详情如下:

<flow name="testsFlow">
        <set-variable variableName="conditionMet" value="#[false]" doc:name="conditionMet"/>
        <foreach doc:name="For Each">
            <choice doc:name="Choice">
                <when expression="#[(flowVars.conditionMet == true)]">
                    <scripting:component doc:name="Do nothing">
                        <scripting:script engine="Groovy"/>
                    </scripting:component>
                </when>
                <otherwise>
                    <scripting:component doc:name="Continue Loop">
                        <scripting:script engine="Groovy"><![CDATA[// Define the collection to loop
def loopCollection = flowVars.nameOfCollectiontoLoop

// Define the condition which needs to be met
def exitCondition = "Some condition to match"

// Define the "conditionMet" variable
def conditionMet = flowVars.conditionMet

// Loop the collection to do what you need
loopCollection.each { row ->
    if (row.identifierName == exitCondition)
    {
        conditionMet = true
    }
    else
    {
        conditionMet = false
        // Continue your processing
    }   
}

return payload]]></scripting:script>
                    </scripting:component>
                </otherwise>
            </choice>
        </foreach>
    </flow>

if(row.identifierName==exitCondition)
{
条件满足=真
}
其他的
{
条件满足=错误
//继续处理
}   
}
返回有效负载]]>
试试这些,如果您需要更多帮助,请告诉我们。

使用

与传统的“for-each”转换器相比,您可以更轻松地控制Groovy脚本的流。在您的特定情况下,您的groovy脚本看起来(但不是完全)像:


if(row.identifierName==exitCondition)
{
返回
}
其他的
{
//继续处理
}   
}
返回有效负载]]>
使用策略停止处理

我能想到的另一种方法是,一旦你进入循环,就使用a,看看之前是否满足了条件,如果满足了,就什么也不做;详情如下:

<flow name="testsFlow">
        <set-variable variableName="conditionMet" value="#[false]" doc:name="conditionMet"/>
        <foreach doc:name="For Each">
            <choice doc:name="Choice">
                <when expression="#[(flowVars.conditionMet == true)]">
                    <scripting:component doc:name="Do nothing">
                        <scripting:script engine="Groovy"/>
                    </scripting:component>
                </when>
                <otherwise>
                    <scripting:component doc:name="Continue Loop">
                        <scripting:script engine="Groovy"><![CDATA[// Define the collection to loop
def loopCollection = flowVars.nameOfCollectiontoLoop

// Define the condition which needs to be met
def exitCondition = "Some condition to match"

// Define the "conditionMet" variable
def conditionMet = flowVars.conditionMet

// Loop the collection to do what you need
loopCollection.each { row ->
    if (row.identifierName == exitCondition)
    {
        conditionMet = true
    }
    else
    {
        conditionMet = false
        // Continue your processing
    }   
}

return payload]]></scripting:script>
                    </scripting:component>
                </otherwise>
            </choice>
        </foreach>
    </flow>

if(row.identifierName==exitCondition)
{
条件满足=真
}
其他的
{
条件满足=错误
//继续处理
}   
}
返回有效负载]]>

试试这些,如果您需要更多帮助,请告诉我们。

没有任何组件可以中断foreach循环。如果只希望处理到成功条件,则可以使用MEL在子列表上执行foreach,如下所示:

<foreach collection="#[payload<condition>]" />
 ...
</foreach>

没有可中断foreach循环的组件。如果只希望处理到成功条件,则可以使用MEL在子列表上执行foreach,如下所示:

<foreach collection="#[payload<condition>]" />
 ...
</foreach>

感谢您的回复,拉朱·马里先生。在java中运行良好,但我需要“Mulesoft”中的解决方案。感谢您的回复Raju Mali先生。在java中,它工作得很好,但我需要“Mulesoft”中的解决方案。谢谢vijay刚才的回复。我尝试了您的建议,如下所示----------但在这种情况下,它会重定向流的起点,并引发异常,因为我的输入是xml。在此操作后,我获得了json消息筛选器,尝试将json作为流的输入。我只想中断for循环,不需要重定向整个流。谢谢谢谢vijay刚才的回复我尝试了你的建议,就像这样----------但是在这个场景中,它重定向了流的起点,并且抛出了一个异常,因为我的输入是xml。在这个操作之后,我得到了json消息过滤器,试图将json作为我的流的输入。我只想中断for循环,不需要重定向整个流。谢谢,这不起作用,因为OP希望在for-each循环中找到匹配行。这不起作用,因为OP希望在for-each循环中找到匹配行。Groovy是我要建议的,但是,您可以扩展这个答案吗?它没有为OP提供一个真正可行的解决方案。你能提供一些例子吗?Groovy是我要建议的,但是,你能扩展一下这个答案吗?它没有为OP提供一个真正可行的解决方案。你能举个例子吗?