我如何停止<;foreach>;在mulesoft的中间循环
我有一个数组列表值,我使用foreach和choice循环它。一旦第一次成功发生在choice中,我想退出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
提前感谢。请根据您的条件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提供一个真正可行的解决方案。你能举个例子吗?