每个循环的activiti多实例,带有空集合

时间:2013-03-11 10:23:52

标签: java activiti bpmn

在我们的工作流程中,我们有几个多实例调用活动,如下所示:

<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表现得像这样?如果没有,您将如何建模工作流程?

1 个答案:

答案 0 :(得分:2)

使用标准的Activiti功能无法解决此问题。所以唯一的选择是使用网关或Java服务任务,实现ActivityBehaviour(不推荐)的类来控制序列流。我更喜欢使用exclusiveGateway s。请查看此链接以获取更多信息:

  1. Discussion at Activiti official forum

  2. MultiInstanceActivityBehavior.java - int resolveNrOfInstances(ActivityExecution execution) ParallelMultiInstanceBehavior - void createInstances(ActivityExecution execution); SequentialMultiInstanceBehavior - void createInstances(ActivityExecution execution);