foreach 活动允许通过一条单独的流程路径 开始执行多条流程分支。 它的属性描述见下表。
foreach 属性:
属性 类型 默认值 是否必须? 描述
in 表达式或字符串 必须 将被迭代的集合。集合中的每个元素会生成一个新的同步分支 沿着默认的转移向外执行。in 执行任意类型的集合,数组和以逗号分隔的字符串。
var 字符串 必须 用来保存集合中当前元素的变量。 这个变量会设置到同步流程分支中, 并且只对这个流程分支可见。
在这个例子中,我们需要收集 不同部门的考勤表。同一个任务可以被不同的组织执行。 使用foreach就很容易实现了。 流程变量departments提供了所需要的组织名称, 同时,变量quota代表了多少个任务必须被完成, 在流程离开join之前。
<process name="ForEach" xmlns="http://jbpm.org/4.4/jpdl">
<start g="28,61,48,48" name="start1">
<transition to="foreach1"/>
</start>
<foreach var="department" in="#{departments}" g="111,60,48,48" name="foreach1">
<transition to="Collect reports"/>
</foreach>
<task candidate-groups="#{department}" g="201,58,92,52" name="Collect reports">
<transition to="join1"/>
</task>
<join g="343,59,48,48" multiplicity="#{quorum}" name="join1">
<transition to="end1"/>
</join>
<end g="433,60,48,48" name="end1"/>
</process>
<process name="ForEach" xmlns="http://jbpm.org/4.4/jpdl">
<start g="28,61,48,48" name="start1">
<transition to="foreach1"/>
</start>
<foreach var="department" in="#{departments}" g="111,60,48,48" name="foreach1">
<transition to="Collect reports"/>
</foreach>
<task candidate-groups="#{department}" g="201,58,92,52" name="Collect reports">
<transition to="join1"/>
</task>
<join g="343,59,48,48" multiplicity="#{quorum}" name="join1">
<transition to="end1"/>
</join>
<end g="433,60,48,48" name="end1"/>
</process>
重要
在使用foreach的时候,对应的join必须设置一个multiplicity属性。 如果没有设置,join会根据它的进入转移来判断当前的流程是否需要继续流转。 在上面的例子里,join只有一个单独的进入转移。 如果multiplicity没有设置,第一个流程到达join活动 就会立刻触发继续执行离开join。
下面是如何初始化迭代用的流程变量。
view plaincopy to clipboardprint?
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("departments", new String[] { "sales-dept", "hr-dept", "finance-dept" });
variables.put("quorum", 3);
ProcessInstance processInstance = executionService.startProcessInstanceByKey("ForEach", variables);
分享到:
相关推荐
#### 2.3 foreach实现动态分支 - 解释了如何利用foreach构造动态分支逻辑,增强流程的灵活性和响应性。 #### 2.4 java活动至2.10历史会话链 - 这部分涵盖了从Java活动、数据分配、规则发布器到JMS活动等多种业务...
讲解了如何利用Foreach结构来实现动态分支处理,提高了流程的灵活性。 ##### 2.4 Java活动 介绍了如何在流程中嵌入Java代码以执行复杂的逻辑操作。 ##### 2.5 Assign 解释了Assign操作,用于在流程中进行变量赋值...
这一特性允许在流程中使用 foreach 循环来动态地创建多个实例,非常适合处理列表数据。 ##### 2.4 Java 活动 允许开发者直接在 Java 中编写业务逻辑,提高代码的可读性和维护性。 ##### 2.5 赋值 在流程中定义...
- **乘法拆分(ForEach)**:介绍如何利用ForEach结构实现循环处理。 - **Java活动**:探讨如何通过Java代码自定义流程中的活动。 - **分配**:讲解如何在流程中自动分配任务。 - **规则部署器**:解释如何将业务...
- **foreach实现动态分支**:描述了如何利用`foreach`循环来实现动态的流程分支。 - **java活动**:讨论了如何编写Java代码来实现自定义的活动逻辑。 - **assign**:介绍了如何在流程中分配任务给特定的参与者或角色...
jBPM的孵化器功能提供了定时器、group活动、foreach实现动态分支等高级特性,这些特性在复杂的业务流程中非常有用。 #### 事务和持久化 事务管理在工作流执行中起着至关重要的作用。jBPM提供了独立事务、JTA事务和...