2013-03-11 99 views
3

在我們的工作流程,我們有幾個多實例調用活動,如下所示:Activiti的多實例與空收集每個迴路

<callActivity id="loopFoos" calledElement="${workflowResolver.resolveWorkflowName(foo)}"> 
    <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${foos}" activiti:elementVariable="foo" /> 
</callActivity> 

的問題是,一些集合是空的,並導致例外,因爲activiti假定集合中至少有一個元素。我們可以圍繞所有的子工作流程調用做出決定,但是這會污染工作流程圖並顯示與業務無關的詳細信息。

我們需要是用java的每個像

for (Foo foo : foos) { 
// call workflow 
} 

其中空的集合根本就沒有進入循環的行爲。

有沒有辦法讓activiti像這樣行事?如果沒有,你將如何建模工作流程?

回答

2

使用標準Activiti功能無法解決此問題。所以唯一的選擇是使用網關或Java服務任務,實施ActivityBehaviour(不推薦)類來控制序列流。我更喜歡使用exclusiveGateway s。檢查此鏈接瞭解更多信息:

  1. Discussion at Activiti official forum

  2. MultiInstanceActivityBehavior.java - INT resolveNrOfInstances(ActivityExecution執行) ParallelMultiInstanceBehavior - 無效createInstances(ActivityExecution執行); SequentialMultiInstanceBehavior - void createInstances(ActivityExecution execution);