10分钟入门指南
通过一个(非常简单的)业务流程,介绍一些基本的Activiti工作流感念和API接口。
使用案例
这个用例叫干脆(straightfoward):有一个公司,暂且叫它BPMCorp。在BPMCorp内部,会计部门每个月都要写一份财务报告给公司的股东。 但在发送给所有股东之前必须经过上级部门的批准。
下面涉及的所有文件及代码片段均可以通过Activiti分发的examples范例包中找到,请查看包org.activiti.examples.bpmn.usertask的内容。
如上所述的业务流程可以使用Activiti的可视化流程编辑器 Activiti Modeler查看及编辑。 使用BPMN2.0的标准符号则如下图所示:
这里没有什么特殊的东西,图中看到的是一个 none start event (左边的圆圈),其次是两个 user tasks: "撰写财务报告"和”批准财务报告",以 none end event (右边边框加粗型的圆圈) 结束。
上述业务流程的XML表示形式如下所示 (FinancialReportProcess.bpmn20.xml). 流程中包含一些主要的元素 (通过点击链接可以查看更详细的BPMN 2.0 元素的说明):
-
none start event 让我们认识到要开始一个流程。
-
user tasks 声明一个基于用户操作的流程任务. 注意第一个任务是分派用户组 accountancy 的, 而第二个任务是分派到用户组management 的. 查看 分派用户任务章节 可以得到更多怎样分派任务到用户或组的信息。
-
当到达 none end event 节点后流程就结束。
<processid="financialReport"name="每月财务报告处理流程">
<startEventid="theStart"/>
<sequenceFlowid='flow1'sourceRef='theStart'targetRef='writeReportTask'/>
<userTaskid="writeReportTask"name="撰写财务报告">
<documentation>
撰写要发送给公司股东的每月财务报告。
</documentation>
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>accountancy</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<sequenceFlowid='flow2'sourceRef='writeReportTask'targetRef='verifyReportTask'/>
<userTaskid="verifyReportTask"name="批准财务报告">
<documentation>
核实并批准会计部门提交的每月财务报告,报告将发送给公司的所有股东们。
</documentation>
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>management</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
</userTask>
<sequenceFlowid='flow3'sourceRef='verifyReportTask'targetRef='theEnd'/>
<endEventid="theEnd"/>
</process>
现在我们有了业务流程的流程定义(process definition)。通过这个流程定义我们就可以创建一个流程实例(process instances)了。在这个用例中,一个流程实例将和每月财务报告的创建和批准项匹配。
为了能够通过一个流程定义创建一个流程实例,我们必须先将定义的流程发布(deploy),发布流程意味着两件事:
-
流程定义保存到Activiti引擎的持久化数据库中。通过发布业务流程,我们就能确保就算在引擎重启后也能够找到该流程的定义。
-
BPMN2.0流程定义文件将被解释到内存中,从而可以通过activiti的API执行相应的操作。
更详细的信息可以通过专门的发布流程章节获取。
就像专门的发布流程章节中提及的,可以通过多种方式来发布流程,以下是其中的一种:
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("org/activiti/examples/bpmn/usertask/FinancialReportProcess.bpmn20.xml")
.deploy();
现在我们可以通过在流程id(看XML流程定义文件中的第一行)来初始化一个流程实例了。注意这个id在Activiti的术语中称为key。
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("financialReport");
一经上面的初始化将立即通过流程的start event,在start event.之后,紧跟着就是流出流向(在这个用例中只有一条)和到达第一个任务(撰写财务报告)。Activiti引擎将保存一个任务到数据库中。这时候附属于该任务的相关用户或用户组的作业也会被保存到数据库中。
任务创建后,处于等待接收状态,引擎将仅在下次接收到而外的触发调用后才会继续下去。在这个节点,任务是分派到用户组的,意指该用户组中的任何人都可以作为这个任务的候选者来执行这个任务。
现在我们可以通过taskService来获取用户的任务列表了。
List<Task> tasks = taskService.createTaskQuery().taskCandidateUser("fozzie").list();
因为流程定义中这个任务是定义为分派到用户组accountancy的,因此方法中传入的用户名参数"fozzie"必须是属于该用户组的用户:
<potentialOwner> <resourceAssignmentExpression> <formalExpression>accountancy</formalExpression> </resourceAssignmentExpression> </potentialOwner>
也可以通过任务的查询API,如下获取用户组的任务:
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("accountancy").list();
上面描述的业务流程已经发布到了演示数据中。在运行ant demo.start后,以用户fozzie(他是一个会计师)身份登录到Activiti Explorer,选择PROCESSES页签,在列表的Action列中点击流程“Monthly financial report'”的“Start Process"链接来启动一个流程实例。如下图所示:
正如前面解解释的,流程将运行到第一个任务处。由于我们是以用户fozzie登录,故在我们启动了这个流程实例后,可以看到一个新的候选任务。我们这是切换到TASKS页签页去看看这个新任务(如下图),可以发现就算其他人启动的流程实例,所有属于用户组accountancy的用户都可以看到这个新的候选任务。
现在其中一个会计人员需要领取这个任务(claim the task)。通过领取任务操作,特定的用户就会成为这个任务的代理人(assignee),这是这个任务就会从用户组accountancy的其他所有用户的列表视图中消失。领取任务的调用代码如下:
taskService.claim(task.getId(),"fozzie");
现在这个任务成为了任务领取者的个人任务了。
List<Task> tasks = taskService.createTaskQuery().taskAssignee("fozzie");
通过Activiti Explorer界面点击claim按钮将执行相同的领取任务操作。现在这个任务将显示在任务领取者的个人任务列表中,如下图所示:
现在会计员可以开始撰写财务报表了,一但报表撰写完毕,就可以执行完成任务的操作将任务完成掉:
taskService.complete(task.getId());
对Activiti引擎来说,这是通知流程实例必须继续跑下去的额外信号。该任务的外出流向将被解析执行,引导到第二个任务(批准财务报告)。同样的原理,就像上面第一个任务所发生的事情一样将在第二个任务出发生,唯一不同的是这次任务将被分派到用户组management。
在上面的demo中,使它能够过点击complete按钮来完成任务的。因Frozzie不是管理者,所以我们需要注销并以kermit(他是管理者)用户登录。第二个任务现在就显示在待指定任务列表中了。如下图所示:
这个批准任务就像第一个任务的处理一样可以接受和领取。完成这个任务将导致流程执行到end event节点,在这个节点将终止该流程实例。该流程实例以及所有与其相关的运行时期的执行数据将会从数据库中删除。
可以通过 Activiti Probe来证实这些数据已被清除。因为表中已经没有任何流程的执行数据。
-
通过定义一个 timer start event 节点每月自动开始启动流程。
-
定义 gateways 节点执行条件判断。为此,管理者可以拒绝财务报表让会计师重建原来的任务。
-
通过声明和使用变量(variables),控制报告在表单的编辑权限。
-
通过在流程结束时定义一个service task任务将报告自动发送给所有股东。.
-
...
相关推荐
通过一个简单的业务流程,介绍了基本的Activiti概念和API。
《Activiti5 10分钟入门指南:中文官方解读》 Activiti5是一款开源的、高效的工作流引擎,用于管理业务流程。它以其简洁而强大的特性,在企业级应用开发中备受青睐。本篇将深入解析Activiti5的10分钟入门指南,带你...
### BPM软件 Activiti5 的10分钟入门指南 #### 使用案例背景 本指南旨在通过一个极为简单的业务场景——“财务报告审批流程”来快速引入Activiti工作流的基础概念及其API接口。这一流程涉及BPMCorp公司,其核心...
二、Activiti5 10分钟入门指南 快速入门通常包括安装配置、创建第一个流程定义和运行实例。首先,你需要在项目中引入Activiti5的依赖库,然后使用Activiti提供的Modeler工具创建流程定义文件(.bpmn20.xml)。流程...
**Activiti 5.17 入门指南** Activiti 是一个开源的工作流引擎,它提供了高度可扩展性和灵活性,广泛应用于企业的业务流程自动化。在 Activiti 5.17 版本中,该框架已经相当成熟,为开发者提供了一整套工具集,包括...
Activiti入门 - **一分钟版本**:Activiti发行版包含大部分来源为jar文件。 - **Activiti UI应用安装**:下载activiti-app.war文件并复制到Tomcat的webapps目录下,然后启动Tomcat,使用默认设置访问Activiti UI...
本10分钟入门指南旨在帮助初学者快速理解 Activiti 的基本概念和API接口,通过一个简单的业务流程示例进行讲解。 首先,我们来看这个名为“干脆”的业务流程例子,它描述了在名为BPMCorp的公司内部,会计部门如何每...
- **10分钟教程**:快速了解如何创建和执行一个简单的BPMN 2.0流程。 8. **BPMN 2.0构造** - **自定义扩展**:通过扩展BPMN元素以满足特定业务需求。 - **大事记**:包括各种事件,如定时器、错误、信号事件,...
《Activiti5用户手册》是一本专为初学者设计的指南,旨在帮助读者掌握Activiti这一流行的业务流程管理(BPM)平台的核心开发与扩展技术。Activiti是基于Java的开源工作流引擎,广泛应用于企业的流程自动化和业务流程...
Activiti 5是一个较早的版本,而提供的这份中文指南详细地介绍了如何使用Activiti 5,从而让用户快速地掌握这一工具。 首先,文档的"简介"章节涵盖了基本的许可、下载方式、源码获取、所需软件和环境、报告问题的...
提供了“一分钟入门”的快速指南,介绍了如何安装Activiti引擎、如何安装Activiti数据库以及如何引入Activiti jar包和依赖。手册还强调了创建ProcessEngine的重要性,这是启动和管理Activiti流程引擎的关键组件。 ...
在本文中,我们将深入理解如何入门Activiti,包括配置安装、创建Java项目以及配置工作流。 1. **Activiti5.10的配置与安装** - 插件安装:在Eclipse中,通过`Help -> Install New Software -> Add`,然后输入插件...
文档《Activiti5.4 用户指南(中文版)》将详细阐述这些概念,并提供实际操作示例。《Activiti工作流使用步骤.doc》可能是更具体的步骤指导,包括如何使用这些API和概念来实现具体功能。通过学习这两个资源,你可以...
- **10分钟教程**:通过一个简单的示例,介绍如何创建、部署和执行一个BPMN流程。 8. **BPMN 2.0构造**: - **扩展和事件**:Activiti支持BPMN的自定义扩展和各种事件,如计时器事件、错误事件和信号事件。 以上...
##### 7.4 入门指南:10 分钟快速入门 - 提供一个快速上手 BPMN 的指南,帮助初学者在 10 分钟内理解基本概念和操作。 ##### 7.5 BPMN 2.0 结构 - 详细解析 BPMN 2.0 的各种元素,包括事件、活动、分支等。 - **...
### Activiti6 用户指南知识点详解 #### 一、概述与许可 - **许可协议**:Activiti6基于Apache V2许可证发布,这意味着它遵循开放源代码许可证条款,允许用户自由使用、修改和分发该软件及其衍生作品。 - **下载...
4. **activiti5.14中文手册**:这是一本针对Activiti 5.14版本的中文指南,包含详细的API参考、用户指南和开发者教程。手册将帮助读者深入理解Activiti的内部工作原理,以及如何利用其功能进行流程设计和编程。 5. ...
Activiti的入门指南提供了快速上手的教程。它包括安装Activiti环境、安装数据库、引入Activiti的jar包及依赖库,以及配置数据库和创建数据库表的步骤。 ### 3. 配置Activiti - **创建ProcessEngine**:...