1.BPMN 业务流程建模标注 详细介绍请看
http://www.uml.org.cn/RequirementProject/200904141.asp
2.BPMN是OMG推出的一种工作流建模的标准。还有JBoss自己搞的Jbpm,但jbpm不是标准。
3.BPMN的资料不多,设计器设计出来的BPMN很多不是标准的BPMN2.0.如果eclipse stp bpmn,oracle bpm..
4.Jbpm4.3推出来之后,开始支持BPMN2.0.所以这次我用jbpm4.3的跑我设计的BPMN工作流。
5.准备工作(我的平台)
Eclipse 3.5.2
JDK1.6
Tomcat 6
JBPM4.3(安装请看http://blog.csdn.net/inkfish/archive/2010/01/10/5169700.aspx)
6.请假系统工作流
7.实现上面工作流的BPMN代码---leave.bpmn.xml
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 ../../../../../../../../../../bpmn/src/main/resources/BPMN20.xsd"
xmlns="http://schema.omg.org/spec/BPMN/2.0" typeLanguage="http://www.w3.org/2001/XMLSchema"
expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://jbpm.org/example/bpmn2/none_start_end_event"
xmlns:jbpm="http://jbpm.org/bpmn2">
<process id="leave" name="BPMN2 Example process">
<startEvent id="start" />
<sequenceFlow id="flow1" name="To Apply Leave" sourceRef="start"
targetRef="applyLeave" />
<userTask id="applyLeave" name="Apply Leave" implementation="other">
<potentialOwner resourceRef="user" jbpm:type="group">
<resourceAssignmentExpression>
<formalExpression>user</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<sequenceFlow id="to_teacher" name="To Teacher Check"
sourceRef="applyLeave" targetRef="techerCheck" />
<userTask id="techerCheck" name="Teacher Check"
implementation="other">
<potentialOwner resourceRef="user" jbpm:type="group">
<resourceAssignmentExpression>
<formalExpression>teachers</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<sequenceFlow id="teacherRefuse" name="Teacher Refuse"
sourceRef="techerCheck" targetRef="applyLeave">
<conditionExpression xsi:type="tFormalExpression">${approveResult == 'NotOK'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="to_decide" name="To Decide" sourceRef="techerCheck"
targetRef="decideBasedOnAmountGateway" >
<conditionExpression xsi:type="tFormalExpression">${approveResult == 'OK'}</conditionExpression>
</sequenceFlow>
<exclusiveGateway id="decideBasedOnAmountGateway"
name="decideBasedOnAmount" />
<sequenceFlow id="to_master" name="To Master"
sourceRef="decideBasedOnAmountGateway" targetRef="masterCheck">
<conditionExpression xsi:type="tFormalExpression">${days > 3}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="to_end1" name="To End1"
sourceRef="decideBasedOnAmountGateway" targetRef="theEnd">
<conditionExpression xsi:type="tFormalExpression">${days <= 3}</conditionExpression>
</sequenceFlow>
<userTask id="masterCheck" name="Master Check"
implementation="other">
<potentialOwner resourceRef="user" jbpm:type="group">
<resourceAssignmentExpression>
<formalExpression>masters</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<sequenceFlow id="masterRefuse" name="Master Refuse"
sourceRef="masterCheck" targetRef="applyLeave">
<conditionExpression xsi:type="tFormalExpression">${approveResult == 'NotOK'}</conditionExpression>
</sequenceFlow>
<sequenceFlow id="to_end2" name="To End2" sourceRef="masterCheck"
targetRef="theEnd">
<conditionExpression xsi:type="tFormalExpression">${approveResult == 'OK'}</conditionExpression>
</sequenceFlow>
<endEvent id="theEnd" name="End" />
</process>
</definitions>
没有设计器,都是我自己看BPMN2.0的介绍和JBPM的内容,自己写出来的 leave.bpmn.xml
8.剩下的使用JBPM4.3的API让我的leave.bpmn.xml,跑起来
思想是:
学生都放在user用户组。user组都可以申请请假
老师放在teachers用户组。该用户组都可以审批学生请假(登录是用teacher)
主任放在masters用户组。该用户组审批请假超过3天的学生请假。(登录是用master)
部分代码:
String username = session.getAttribute("username").toString();
ProcessEngine processEngine = Configuration.getProcessEngine();//获得工作流引擎
RepositoryService repositoryService = processEngine//获得启动的工作流
.getRepositoryService();
ExecutionService executionService = processEngine//获得 工作流实例
.getExecutionService();
TaskService taskService = processEngine.getTaskService();//获得 任务
List<ProcessDefinition> pdList = repositoryService
.createProcessDefinitionQuery().processDefinitionKey(
"leave").list();
List<ProcessInstance> piList = executionService
.createProcessInstanceQuery().list();
List<Task> taskList = taskService.createTaskQuery().candidate(
username).list();
具体看代码。我上传了
分享到:
相关推荐
BPMN 2.0 示例 - BPMN 2.0 by Example
**BPMN2.0 Modeler for Visio** 是一个专为Microsoft Visio设计的插件,用于创建、编辑和管理Business Process Modeling Notation(BPMN)2.0流程图。BPMN是一种国际标准的图形化表示法,旨在为业务流程提供统一的...
在BPMN 2.0中,活动(Activity)是业务流程中的一个工作单元,即要执行的任务。任务(Task)通常表示需要完成的工作,可以被标记为子流程(Sub-Process),即可以进一步细化的活动。执行行为通过活动标记(Activity Markers...
9. **用户任务(User Task)**:等待用户参与的任务,可以与工作流引擎集成,实现任务分配和审批。 10. **服务任务(Service Task)**:调用外部服务或系统进行处理的活动,如调用Web服务。 通过中英文对照的图解...
Activiti是一个开源的工作流和业务自动化引擎,由Alfresco Software公司开发。它基于BPMN 2.0标准,提供了高度灵活、可扩展和企业级的流程管理功能。Activiti的主要目标是使业务流程的实现变得更加简单,同时也便于...
这意味着,BPMN模型可以直接被工作流引擎解析和执行。 **7. 综合示例** 文档中的"BPMN_2.0_by_Example.pdf"可能包含了一系列实际案例,帮助用户理解如何在不同场景下应用BPMN 2.0规范。 通过学习和应用BPMN 2.0...
综上所述,《BPMN 2.0 by Example》是一份非常有价值的资源,它不仅介绍了BPMN 2.0的基本概念和元素,还通过丰富的实例帮助读者深入理解如何将这些理论应用于实际工作中。对于任何希望提升业务流程管理水平的专业...
BPMN 2.0规范在企业信息化、流程优化、工作流管理等多个领域有广泛应用。通过BPMN,企业能够清晰地描绘业务流程,发现瓶颈,提高效率,并确保流程的标准化和一致性。此外,BPMN还与其他标准如SOA(面向服务架构)和...
### BPMN 2.0 标注详解 #### 一、引言 BPMN (Business Process Model and Notation) 2.0 是一种用于绘制业务流程图的标准规范,其目的是帮助业务分析师、IT 开发人员及最终用户之间能够更好地沟通和理解业务流程。...
Activiti 是一个开源的工作流和业务流程管理(BPM)平台,它基于Java技术栈,广泛应用于企业级应用中,以提升流程效率和自动化水平。BPMN 2.0(Business Process Model and Notation)是一种国际标准,用于定义和...
Activiti 是一个开源的工作流和业务流程管理(BPM)系统,它基于Java,与Spring框架深度集成,广泛应用于企业级应用中。版本5.16是其历史的一个稳定版本,提供了丰富的流程定义、执行和监控功能。与MyEclipse 10的...
bpmn-server提供BPMN 2.0建模,执行和持久性,作为Node.js的开源工作流服务器 该软件包是专门为Node.js设计的,并且完全使用TypeScript开发 WebApp通过建模和开发工作流提供UI 目录 文献资料 流程建模者 基于包括一...
"tumbleweed"是一个基于BPMN2.0标准的工作流引擎,它的设计目标是提供一个通用、灵活且易于集成的解决方案,以满足不同行业的业务流程自动化需求。BPMN,全称为Business Process Model and Notation,是一种国际公认...
**BPMN 2.0工作流程设计器:tumbleweed-designer** BPMN(Business Process Model and Notation)2.0是一种国际标准,用于图形化表示业务流程。它为业务分析师、流程设计师和IT专业人员提供了一种通用的语言,以便...
- **开发API和插件**:编写C#代码来扩展BPMS的功能,创建自定义服务任务或工作流引擎插件。 - **实现业务逻辑**:通过C#实现流程中的业务逻辑,如计算、验证、数据处理等。 - **与数据库交互**:利用C#访问SQL ...
许多软件厂商和开发者选择了BPMN2.0作为其工作流引擎的标准。 - **社区贡献**:BPMN2.0的成功还得益于活跃的开源社区和企业的贡献。这些贡献包括但不限于工具的开发、案例研究的分享以及最佳实践的推广。 **2.3 ...