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);
分享到:
相关推荐
jbpm4jbpm5是关于jbpm流程管理框架的专题,涵盖了jbpm4和jbpm5两个主要版本。jbpm是一个开源的工作流管理系统,用于帮助开发者实现业务流程自动化。以下是基于给定文件的信息,深入解析jbpm4和jbpm5的知识点: 1. *...
开发者可以通过查看和运行这些源代码,学习如何创建用户交互界面、与jbpm4服务交互以及如何实现流程的生命周期管理。 jbpm4还支持扩展和定制,例如,你可以通过编写自定义的工作流监听器、任务监听器和事件处理器来...
jBPM4作为该系列的一个版本,提供了一套完整的流程管理和执行框架,允许开发者构建灵活的工作流应用,以实现业务流程自动化。本指南由胡奇编写,旨在为开发者提供一个全面的参考,帮助他们快速学习和掌握使用jBPM4...
4. **规则集成**:jbpm4集成了Drools规则引擎,可以在流程执行过程中应用业务规则,根据条件动态改变流程路径。 5. **服务和事件**:jbpm4支持服务调用和服务激活,允许在流程中嵌入外部系统的服务。同时,它还提供...
jBPM4是一个企业级的工作流管理系统,它提供了强大的业务流程管理和工作流实现能力。这个"jBPM4完整例子"是一个基于SSH(Struts2、Spring、Hibernate)框架集成jBPM4.4的请假流程应用,非常适合初学者了解如何在实际...
通过编写Java代码并与jbpm4引擎交互,可以实现流程的动态启动、任务分配、流程监控等功能,从而提高工作效率,规范业务流程。而上述提供的代码和文档,就是实现这一目标的基础。对于开发者来说,深入学习和理解这些...
### JBPM4 表结构详解 JBPM (JBoss Business ...以上为JBPM4数据库表结构的详细说明及其操作信息的变化情况,这对于理解JBPM4的工作原理及其实现细节非常重要。希望这些信息能帮助您更好地理解和使用JBPM4系统。
JBPM4(Java Business Process Management 4)是一个轻量级的开源工作流管理系统,基于J2EE架构,旨在帮助开发者实现复杂的业务流程自动化。该项目于2004年10月18日发布2.0版本,并随后成为JBoss企业中间件平台的一...
它包含了执行上下文(如当前活动、变量等)的详细信息,是JBPM4实现其核心执行逻辑的关键表之一。 #### 7. `JBPM4_TASK` `JBPM4_TASK`表用于管理任务。每个任务都关联着一个或多个活动,并且可以包含分配给特定...
jbpm教程、jbpm动态设置参与者、jbpm实例下载
【jBPM4学习总结】 ...通过这些基础知识点的学习,开发者能够理解和使用jBPM4构建和管理业务流程,实现自动化工作流和业务流程的优化。在实际应用中,还需要结合具体需求进行定制和扩展,以适应不同的业务场景。
**jBPM4用户指南入门...通过实践,你可以熟练掌握jBPM4的工作原理,从而更好地实现业务流程自动化,提升企业的效率和灵活性。jBPM4.0GA.pdf文档中包含了更详细的步骤和示例,建议仔细阅读并进行实践操作以加深理解。
通过这些包的分析,我们可以看到JBPM4的设计思路和实现细节,为开发者提供了强大的流程管理和控制能力,同时支持与多种技术如Hibernate、JMS和Ant的集成。对于想要深入理解或定制JBPM4的开发者来说,了解这些源代码...
### jBPM4的PVM实现解析 #### 一、PVM概述 PVM(流程虚拟机)是jBPM4中的核心概念之一,它提供了一个抽象层来处理流程定义和执行逻辑。PVM的设计目的是为了使流程引擎更加灵活、可扩展,并能够支持多种流程语言。...
jBPM4还集成了业务规则管理系统,如Drools,使得流程决策可以动态调整,符合业务需求的灵活性。 在**jbpmDemo**中,**Canvas动画**是一个重要的特性。Canvas是一种HTML5的画布元素,允许开发者在浏览器端动态绘制...
**jBPM 4 使用手记** jBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了全面的业务流程管理和工作流解决方案。在jBPM 4这个版本中,开发者可以利用其强大的功能来设计、执行和管理...
此外,jBPM4还支持与规则引擎(如Drools)的无缝集成,实现了业务规则与流程的统一管理。 ### 2. 安装与环境配置 要开始使用jBPM4,首先需要安装以下基础环境: - **Java Development Kit (JDK)**:确保你的系统上...
jbpm4是一个基于Java的...通过深入研究这个“jbpm4 完整的请假流程”,不仅可以掌握jbpm4的基本用法,还能理解业务流程管理系统的运作机制,这对于在实际工作中设计和实现复杂的企业级流程管理解决方案具有重要意义。
【jbpm4web - JBPM4的Web版Demo详解】 JBPM4是一个开源的工作流管理系统,它提供了强大的业务流程管理(BPM)功能,包括流程设计、执行、监控和优化。"jbpm4web"是基于JBPM4开发的一个Web版本的示例项目,旨在帮助...