0

下面是我的骡流程的一部分

     <until-successful objectStore-ref="ObjStreuntil" maxRetries="60"              
secondsBetweenRetries="60" doc:name="Until Successful" failureExpression="#   [payload.state == 'Queued' || payload.state == 'InProgress']">
       <processor-chain doc:name="Processor Chain">
       <sfdc:batch-info config-ref="Salesforce" doc:name="Salesforce">
          <sfdc:batch-info ref="#[payload]"/>
       </sfdc:batch-info>
       <logger message="#[payload]" level="INFO" doc:name="Logger"/>
       </processor-chain>
       </until-successful>

我希望我的流程等到我的批处理完成,然后继续下一个处理器。我相信使用处理链会得到结果。

但是流程不起作用。我知道在 3.5 中同步完成之前,是否有任何方法可以在 3.4.0 上实现这一点

任何建议都会有很大帮助

先感谢您

4

1 回答 1

1

这已经在这里得到了回答:在 mule 3.4 中进行直到成功同步

但是,如果您只想在批处理完成时执行某些操作,则需要再次检查状态,与您的 failureExpression 相反。

就像是:

<flow name="main">
        <until-successful objectStore-ref="ObjStreuntil"
            maxRetries="60" secondsBetweenRetries="60" doc:name="Until Successful"
            failureExpression="#[payload.state == 'Queued' || payload.state == 'InProgress']">
            <flow-ref name="checkBatch" />
        </until-successful>
    </flow>

    <sub-flow name="checkBatch">
        <sfdc:batch-info config-ref="Salesforce" doc:name="Salesforce">
            <sfdc:batch-info ref="#[payload]" />
        </sfdc:batch-info>
        <choice>
            <when expression="#[payload.state == 'Completed'">
                <!-- Do what needs to be done next -->
            </when>
            <otherwise>
                <!-- Do nothing so the until-successful retries -->
            </otherwise>
        </choice>
    </sub-flow>

正如另一篇文章所述,如果您确实需要返回主流程,则可以将其与请求-回复一起使用。您可以将直到成功放在 vm 端点后面,并将其用作“请求”阶段,并将上面的 when 表达式写入回复队列。

于 2014-08-07T11:07:09.807 回答