有一个需求是这个样子的:员工请假,填写好请假单后,提交申请.上级主管会有一个审核请假的任务,同时申请人有一个撤回的任务.这这两个任务互斥,也就是说两个任务有一个先执行.另一个任务取消.
曾经看过网上一篇文章使用分支节点创建两个任务节点.当一个任务节点执行后写一个action类负责结束另一个任务节点.达到互斥撤回的效果.本人试验过确实可以完成.
不过这不符合我们常规的流程定义方式(需要增加一对分支,联合节点).并且不符合jbpm关于节点描述.
jbpm认为一个节点代表流程中的一个等待状态.显然领导审核和员工撤销请假处于同一个等待状态,也应该处于一个节点中.使用一对分支,联合节点的方式虽然形式上处于一个等待状态.但这样的流程设计是不合适的.
可以这样设计这个互斥回撤节点
<task-node name="审核" signal="first" end-tasks="true"><task name="审核员工请假" swimlane="boss" template="apply_2.ftl"><controller><variable name="reason" access="read" mapped-name="reason"><variable name="day" access="read,write" mapped-name="day"><variable name="applyman" access="read" mapped-name="applyman"> </variable></variable></variable></controller></task></task-node>
xml 代码
- <task-node name="审核" signal="first" end-tasks="true">
- <task name="审核员工请假" swimlane="boss" template="apply_2.ftl">
- <controller>
- <variable name="reason" access="read" mapped-name="reason"/>
- <variable name="day" access="read,write" mapped-name="day"/>
- <variable name="applyman" access="read" mapped-name="applyman"/>
- <variable name="decision" access="read,write" mapped-name="decision"/>
- <!---->controller>
- <!---->task>
- <task name="撤回请假单" swimlane="applyman" template="apply_3_new.ftl">
- <controller>
- <variable name="reason" access="read" mapped-name="reason"/>
- <variable name="day" access="read" mapped-name="day"/>
- <variable name="applyman" access="read" mapped-name="applyman"/>
- <variable name="decision" access="read,write" mapped-name="decision"/>
- <!---->controller>
- <!---->task>
-
- <transition name="结束" to="归档"><!---->transition>
- <transition name="撤销" to="请假结束"><!---->transition>
- <transition name="修改" to="修改"><!---->transition>
- <!---->task-node>
<task name="撤回请假单" swimlane="applyman" template="apply_3_new.ftl"><controller><variable name="reason" access="read" mapped-name="reason"><task-node name="审核"><task template="apply_2.ftl" swimlane="boss" name="审核员工请假"><controller><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read,write" name="day"><task template="apply_3_new.ftl" swimlane="applyman" name="撤回请假单"><controller><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read" name="day">
这个节点包含了我们刚才说的两个任务.我们知道当流传到这个节点的时候.这两个任务会同时创建并分配给各自的人员.有一个人完成任务后 节点向指定的节点转向.同时结束另一个任务. signal="first" 有一个任务结束节点就流转. end-tasks="true" 结束该节点的时候自动结束其他没有完成的任务.
这是个小例子没什么特别.可能早有高人知晓.在这我只是感觉到jbpm对节点是流程的一个等待状态这个含义,对我们设计流程有重要的意义.欢迎大家指正批评
完整的xml流程定义.如果你要部署这个流程.这里需要说明的是</variable></variable></controller></task></variable></variable></controller></task></task-node></variable></controller></task><variable name="reason" access="read" mapped-name="reason"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read,write" name="day"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read" name="day">
com.jbpmexample.jbpm.Assignment类是我自己的授权类.你自己写一个代替就好了,</variable></variable></variable></variable></variable><variable name="reason" access="read" mapped-name="reason"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read,write" name="day"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read" name="day">
template="apply_1.ftl" 这样的属性是我自己加的 为了实现显示页面的定制.需要去掉.否则部署的时候会报错</variable></variable></variable></variable></variable><task name="撤回请假单" swimlane="applyman" template="apply_3_new.ftl"><controller><variable name="reason" access="read" mapped-name="reason"><task-node name="审核"><task template="apply_2.ftl" swimlane="boss" name="审核员工请假"><controller><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read,write" name="day"><task template="apply_3_new.ftl" swimlane="applyman" name="撤回请假单"><controller><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read" name="day">
xml 代码
- <?xml version="1.0" encoding="UTF-8"?>
-
- <process-definition
- xmlns="urn:jbpm.org:jpdl-3.1" name="新请假流程">
- <swimlane name="applyman" />
-
- <swimlane name="boss">
- <assignment class="com.jbpmexample.jbpm.Assignment">
- <swimlaneName>boss</swimlaneName>
- </assignment>
- </swimlane>
-
- <start-state name="请假开始">
- <task name="填写请假单" swimlane="applyman" <variable name="reason" access="read" mapped-name="reason"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read,write" name="day"><variable mapped-name="reason" access="read" name="reason"><variable mapped-name="day" access="read" name="day">template="apply_1.ftl"</variable></variable></variable></variable></variable>>
- <controller>
- <variable name="reason" access="read,write" mapped-name="reason"/>
- <variable name="day" access="read,write" mapped-name="day"/>
- <variable name="applyman" access="read,write" mapped-name="applyman"/>
- </controller>
- </task>
- <transition name="结束" to="审核"></transition>
- </start-state>
- <task-node name="审核" signal="first" end-tasks="true">
- <task name="审核员工请假" swimlane="boss" template="apply_2.ftl">
- <controller>
- <variable name="reason" access="read" mapped-name="reason"/>
- <variable name="day" access="read,write" mapped-name="day"/>
- <variable name="applyman" access="read" mapped-name="applyman"/>
- <variable name="decision" access="read,write" mapped-name="decision"/>
- </controller>
- </task>
- <task name="撤回请假单" swimlane="applyman" template="apply_3_new.ftl">
- <controller>
- <variable name="reason" access="read" mapped-name="reason"/>
- <variable name="day" access="read" mapped-name="day"/>
- <variable name="applyman" access="read" mapped-name="applyman"/>
- <variable name="decision" access="read,write" mapped-name="decision"/>
- </controller>
- </task>
-
- <transition name="结束" to="归档"></transition>
- <transition name="撤销" to="请假结束"></transition>
- <transition name="修改" to="修改"></transition>
- </task-node>
- <task-node name="归档">
- <task name="请假归档" swimlane="applyman" template="apply_4.ftl">
- <controller>
- <variable name="reason" access="read" mapped-name="reason"/>
- <variable name="day" access="read" mapped-name="day"/>
- <variable name="applyman" access="read" mapped-name="applyman"/>
- <variable name="decision" access="read" mapped-name="decision"/>
- </controller>
- </task>
- <transition name="结束" to="请假结束"></transition>
- </task-node>
- <end-state name="请假结束"></end-state>
-
- <task-node name="修改">
- <task name="修改" swimlane="applyman" template="apply_1.ftl">
- <controller>
- <variable name="reason" access="read,write" mapped-name="reason"/>
- <variable name="day" access="read,write" mapped-name="day"/>
- <variable name="applyman" access="read" mapped-name="applyman"/>
- </controller>
- </task>
- <transition name="结束" to="审核"></transition>
- </task-node>
- </process-definition>
</variable></variable></controller></task></variable></variable></controller></task></task-node></variable></controller></task>
分享到:
相关推荐
【jbpm5完整的例子】是针对企业业务流程管理(Business Process Management, BPM)的一个实践教程,其中涵盖了jbpm5框架的多个核心功能和用法。jbPM是一个开源的工作流管理系统,它提供了强大的流程定义、执行和监控...
jbpm3.2.2是jbpm的一个版本,它在当时提供了许多关键功能,如流程定义、流程实例管理、任务管理和事件处理等。本入门例子旨在帮助初学者快速理解和应用jbpm。 在jbpm3.2.2中,工作流引擎是核心组件,它负责解析流程...
jbpm4.3是JBoss Business Process Management (BPM) Suite的一个版本,它是一个开源的企业级BPM平台,用于设计、执行和管理业务流程。在这个"jbpm4.3工作流程管理例子"中,我们将深入探讨jbpm4.3的核心特性和如何...
通过这个例子,开发者可以学习到如何在jbpm4.4中设计和实现一个简单的业务流程,包括流程图的绘制、数据库配置、任务处理和流程实例管理。同时,对于熟悉Eclipse环境的人来说,也可以了解到如何在Eclipse中搭建和...
JBPM(Java Business Process Management)是一个开源的工作流管理系统,它提供了一整套解决方案,用于设计、执行和管理业务流程。在本示例中,我们将深入探讨如何利用JBPM实现销售批复这一具体场景。 一、JBPM核心...
总结,jbpm是一个功能强大的业务流程管理框架,通过理解基础概念、搭建开发环境、编写代码实现流程实例的启动和任务处理,可以逐步掌握jbpm的使用。"myjbpm"压缩包中的例子是一个很好的起点,通过实践加深理解,将...
- 创建流程定义后,可以通过Jbpm的工作流API启动一个新的流程实例,这个操作会根据流程定义创建出可执行的实例。 - 运行时,每个实例都有唯一的ID,可以跟踪和管理。 4. **流程实例的获取与管理** - 通过工作流...
总的来说,这个"jbpm5 web整合例子"是一个实践性的教程,涵盖了JBPM5与Spring和Hibernate的集成,对于希望在Web应用中实现业务流程自动化和管理的开发者来说,是一个宝贵的资源。通过学习和运行这个例子,开发者可以...
JBPM是一个开源的企业级平台,主要用于管理和执行业务流程。它提供了全面的工作流解决方案,包括流程建模、执行、监控以及集成能力。 在【描述】中提到的“全部原代码”,意味着我们可以深入学习和理解JBPM的各种...
【jbpm4的员工请假例子原码】是一个基于jbpm4流程引擎的示例项目,展示了如何在企业中实现一个简单的员工请假流程。这个Web项目是完全开源的,可以通过Eclipse这样的集成开发环境来打开和运行,对于学习和理解jbpm4...
JBPM4(Java Business Process Management 4)是一个开源的工作流管理系统,它提供了业务流程的建模、部署、执行和监控功能。Spring框架则是Java应用开发中的一个核心组件,主要负责依赖注入和面向切面编程,同时也...
**JBPM4.4工作流入门例子 - HelloWorld** ...总之,JBPM4.4提供了一个强大且灵活的工作流平台,通过"HelloWorld"这样的入门实例,你可以逐步掌握如何构建和管理业务流程,从而实现企业流程的自动化和优化。
做好myeclipse集成后,按官方的文档做第一个例子即可。 http://www.mastertheboss.com/jbpm5/jbpm-5-tutorial-first-example 一般不会的问题,从官方找就行,但上面说的也不详细,结果搞了一天也没通,后来把条件...
在JBPM4.4版本中,我们可以看到一个具体的请假流程示例,该示例包含了实现回退功能的完整代码和Jar包,便于开发者理解和学习。 1. **流程设计** JBPM使用BPMN2.0(Business Process Model and Notation)标准进行...
Jbpm(Java Business Process Management)是一个开源的工作流管理系统,主要用于处理业务流程的建模、部署、执行和监控。jbpm4.4是该系统的较早版本,但它仍然是许多开发人员学习工作流管理的基础。在本教程中,...
总结来说,jbpm4.0三个例子为Java开发者提供了一个很好的学习平台,通过实际操作可以深入理解jbpm4的工作原理和应用方式。如果你在MyEclipse 7.5或Eclipse 3.42环境中遇到问题,如库文件冲突,可以参考描述中的建议...
JBPM4.4是该系统的一个特定版本,它提供了全面的工作流支持,包括流程设计、执行、监控和优化。本篇文章将详细探讨JBPM4.4的基础知识,以及如何通过jsp和servlet来实现入门级的应用。 **1. 工作流管理系统介绍** ...
JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子。带有文档教程和所有源码+JAR包。在网上找了半天jbpm6\jbpm7的资料,都很少。所以 环境:Myeclipse2015 JDK1.7 mysql 5.0 Struts2+Spring3.1 1...
【JBPM web(SSH+JBPM)例子】是一个基于Java技术栈实现的工作流管理系统示例,其中SSH代表Spring、Struts和Hibernate这三个流行的Java企业级开发框架的组合,而JBPM则是Business Process Management(业务流程管理...
【jbpm4.4+s2sh请假流程例子】是一个典型的结合了jbpm4.4工作流引擎和Struts2、Spring、Hibernate(S2SH)框架的实战项目,旨在演示如何在企业级应用中实现一个完整的请假流程。在这个例子中,jbpm4.4作为流程管理的...