我有一个数组列表值,我使用foreach和choice循环。一旦第一次成功发生在选择中我想要走出foreach循环。我不想继续检查剩余的条件。在mulesoft流程
提前谢谢。
答案 0 :(得分:0)
请根据您的条件使用Break语句退出foreach循环。
答案 1 :(得分:0)
正如您在用例中提到的那样
将message filter
包裹在for-loop
内。
<foreach doc:name="For Each" collection="#[]">
<message-filter onUnaccepted="flow" >
<expression-filter expression="#[]"/>
</message-filter>
</foreach>
答案 2 :(得分:0)
首先,您应该通过使用indexOf方法找出您将获得成功消息的索引。然后使用subList方法获取所需的列表并在Foreach循环中使用该列表。
<foreach collection="#[payload.subList(0,3)]" doc:name="For Each">
<logger message="#[payload]" level="INFO" doc:name="Logger"/>
</foreach>
答案 3 :(得分:0)
你可能无法打破&#34;打破&#34; foreach循环,但您始终可以使用expression / groovy脚本来实现此功能。请参阅:Is there a break statement in Mule <foreach>
答案 4 :(得分:0)
使用Groovy
您可以比传统的“for-each”转换器更轻松地控制Groovy脚本的流程。在您的特定情况下,您的groovy脚本看起来像(但不完全)像:
<scripting:component doc:name="Groovy">
<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"
// Loop the collection to do what you need
loopCollection.each { row ->
if (row.identifierName == exitCondition)
{
return
}
else
{
// Continue your processing
}
}
return payload]]></scripting:script>
</scripting:component>
使用Choice策略停止处理
我能想到的另一种方法是在你进入循环后立即使用Choice来查看先前是否满足条件,如果是,则什么都不做;如下:
<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>
试试这些,如果您需要更多帮助,请告诉我们。
答案 5 :(得分:0)
没有组件可以打破foreach循环。如果您只想处理成功条件,那么您可以使用MEL在子列表上执行foreach,如下所示:
<foreach collection="#[payload<condition>]" />
...
</foreach>
您还可以在Groovy中使用循环。
实施例。在有效载荷中我有一些HashMap -
def nap = payload.Result
for (v in nap)
{
if (v.Name == '!!! а папка')
{
assert v.Id != null
flowVars['folderid'] = v.Id
payload = 'recived Id of folder object is '+v.Id
break
}
}
return payload