Activiti使用之Activiti-app的安装及流程创建
文章目录
一、简介
Activiti 是由 jBPM 的创建者 Tom Baeyens 离开 JBoss 之后建立的项目,构建在开发 jBPM 版本 1 到 4 时积累的多年经验的基础之上,旨在创建下一代的 BPM 解决方案。
Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。
Activiti 作为一个遵从 Apache 许可的工作流和业务流程管理开源平台,其核心是基于Java的超快速、超稳定的 BPMN2.0 流程引擎,强调流程服务的可嵌入性和可扩展性,同时更加强调面向业务人员。
Activiti 流程引擎重点关注在系统开发的易用性和轻量性上。每一项 BPM 业务功能 Activiti 流程引擎都以服务的形式提供给开发人员。通过使用这些服务,开发人员能够构建出功能丰富、轻便且高效的 BPM 应用程序。
Activiti是一个针对企业用户、开发人员、系统管理员的轻量级工作流业务管理平台,其核心是使用Java开发的快速、稳定的BPMN e 2.0流程引擎。Activiti是在ApacheV2许可下发布的,可以运行在任何类型的Java程序中,例如服务器、集群、云服务等。Activiti可以完美地与Spring集成。同时,基于简约思想的设计使Activiti非常轻量级。
二、Activiti-app安装
首先,如果需要使用Activiti-app简易流程软件,必须先按照jdk以及tomcat,若未安装读者可自行google
这里提供activiti6.0官网下载地址:
下载完毕后,解压Activiti6.0,然后将wars目录下的activiti-admin.war、activiti-app.war两个war包拷贝到tomcat的webapps目录下,然后进到tomcat的bin目录下启动tomcat
sh startup.sh
接着就可以在浏览器访问Activiti-app了,http://localhost:8080/activiti-app,默认密码为:admin/test,首页展示如下说明登陆成功:
三、流程创建
在工作流中,通常所说的流程是指流程定义,当使用这个流程定义去创建工单的时候,同时会创建一个流程实例,用于保存此时此刻的流程信息,防止工单在流转过程中流程发生变化而导致工单走不下去的情况。由于流程需要人员审批,因此首先我们需要创建人员
3.1 创建用户
从首页选择第三个模块即 Identity management(身份管理),进去之后选择Users标签页,如下
然后点击Create user,填写用户信息即可
3.2 创建流程定义
3.2.1 创建流程
然后点击左上角的标志回到首页,选择第一个模块即Kickstart App,开始创建流程定义
填好基本信息,点击创建即可
3.2.2 编辑流程
此时进入流程图编辑页面,如下:
3.2.3 赋值人员
第一次进来的话会有一些基本介绍,小白可以跟着学习下,这边我直接使用最简单的人工节点来画这第一个模型即User Task和End event
画好流程图之后还需要指定各流程的审批人员,人员是工作流中最为重要的一环,许多复杂流程往往会出现人员分配错误的情况,这边直接赋值即可
选中需赋值的流程环节,然后点击Assignments后的选项值,选择第一阶段我们所创建的人员,最后保存即可
3.2.4 保存流程
全部编辑完后点击左上角的保存按钮保存当前流程,在流程界面就能看到我们刚才创建的流程模型啦
3.2.5 创建app----关联流程
在Acitiviti-app中,创建流程还不够,还需要创建一个app来暴露给其余用户使用,相当于包了一层而已,因此我们需要创建一个app,进到Apps标签下新建一个app后然后关联我们刚才创建的请假流程即可
3.2.6 保存发布app
然后保存发布后,在首页就能看到我们新增的app啦
3.2.7 测试流程
测试的话就比较简单了,使用zhangzw账号登陆Activiti-app后就能看到我们刚才创建的请假app,然后创建单子即可,可以带上备注信息,之后分别切换各环节审批人员的账号上去进行审批,全部完成后流程自动结束
四、使用Activiti-admin查看历史记录
当流程走完后,我们可以使用Activiti-admin来查看我们的工单历史记录,进入http://localhost:8080/activiti-admin,默认密码为:admin/admin,
修改配置:进去之后需要修改配置信息,否则始终会报错,需要将端口号改成Tomcat默认的8080,同时这里的账号和密码是Activiti-app的账号密码,即admin/test
然后点击Check就能看到绿色的通行证啦~可以分别切换不同的标签页查看不同的内容
例如查看tasks
五、获取xml文件
进入流程模型详情点击下载即可得到该模型对应的xml文件xxxx.bpmn20.xml,这也就是一份完整的流程文件,可在代码中用于发布并最终作为流程运转。
xml文件:
<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"> <process id="vocation" name="请假流程" isExecutable="true"> <documentation>这是一个请假流程定义</documentation> <startEvent id="startEvent1"></startEvent> <userTask id="sid-5DBA82CB-06B9-46B7-B837-DB926133EF6F" name="部门经理审批" activiti:assignee="zhangzw"> <extensionElements> <modeler:activiti-idm-assignee xmlns:modeler="http://activiti.com/modeler"><![CDATA[true]]></modeler:activiti-idm-assignee> <modeler:assignee-info-email xmlns:modeler="http://activiti.com/modeler"><![CDATA[1321331@qq.com]]></modeler:assignee-info-email> <modeler:assignee-info-firstname xmlns:modeler="http://activiti.com/modeler"><![CDATA[zhangzw]]></modeler:assignee-info-firstname> <modeler:assignee-info-lastname xmlns:modeler="http://activiti.com/modeler"><![CDATA[zhangzw]]></modeler:assignee-info-lastname> <modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete> </extensionElements> </userTask> <sequenceFlow id="sid-D863FA21-BAAB-463D-9011-4176055A450C" sourceRef="startEvent1" targetRef="sid-5DBA82CB-06B9-46B7-B837-DB926133EF6F"></sequenceFlow> <userTask id="sid-37D82012-DB5B-470D-A7F6-5C4E18ABDEB3" name="总经理审批"></userTask> <sequenceFlow id="sid-3979577C-F13B-485F-A771-AC530DC0E9BC" sourceRef="sid-5DBA82CB-06B9-46B7-B837-DB926133EF6F" targetRef="sid-37D82012-DB5B-470D-A7F6-5C4E18ABDEB3"></sequenceFlow> <endEvent id="sid-58E831DB-5108-4FB1-AA74-3918D76CABF4"></endEvent> <sequenceFlow id="sid-19E166C3-F551-43E1-A713-A6549A9E125A" sourceRef="sid-37D82012-DB5B-470D-A7F6-5C4E18ABDEB3" targetRef="sid-58E831DB-5108-4FB1-AA74-3918D76CABF4"></sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_vocation"> <bpmndi:BPMNPlane bpmnElement="vocation" id="BPMNPlane_vocation"> <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1"> <omgdc:Bounds height="30.0" width="30.0" x="100.0" y="163.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="sid-5DBA82CB-06B9-46B7-B837-DB926133EF6F" id="BPMNShape_sid-5DBA82CB-06B9-46B7-B837-DB926133EF6F"> <omgdc:Bounds height="80.0" width="100.0" x="208.5" y="138.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="sid-37D82012-DB5B-470D-A7F6-5C4E18ABDEB3" id="BPMNShape_sid-37D82012-DB5B-470D-A7F6-5C4E18ABDEB3"> <omgdc:Bounds height="80.0" width="100.0" x="436.5" y="138.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="sid-58E831DB-5108-4FB1-AA74-3918D76CABF4" id="BPMNShape_sid-58E831DB-5108-4FB1-AA74-3918D76CABF4"> <omgdc:Bounds height="28.0" width="28.0" x="657.5" y="164.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="sid-D863FA21-BAAB-463D-9011-4176055A450C" id="BPMNEdge_sid-D863FA21-BAAB-463D-9011-4176055A450C"> <omgdi:waypoint x="130.0" y="178.0"></omgdi:waypoint> <omgdi:waypoint x="208.5" y="178.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="sid-3979577C-F13B-485F-A771-AC530DC0E9BC" id="BPMNEdge_sid-3979577C-F13B-485F-A771-AC530DC0E9BC"> <omgdi:waypoint x="308.5" y="178.0"></omgdi:waypoint> <omgdi:waypoint x="436.5" y="178.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="sid-19E166C3-F551-43E1-A713-A6549A9E125A" id="BPMNEdge_sid-19E166C3-F551-43E1-A713-A6549A9E125A"> <omgdi:waypoint x="536.5" y="178.0"></omgdi:waypoint> <omgdi:waypoint x="657.5" y="178.0"></omgdi:waypoint> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions>
六、activiti小结
6.1 activiti特点
1)数据持久化
- Activiti的设计思想是简洁、快速。有过应用开发经验的开发人员都知道应用的瓶颈体现在和数据库交换数据的过程中,针对这一点Activiti选择了使MyBatis,从而可以通过最优的SQL语句执行Command,仅凭如此就能让引擎在速度上保持最高的性能。
2)引擎service接口
- Activiti 流程引擎重点关注在系统开发的易用性和轻量性上。每一项 BPM 业务功能 Activiti 流程引擎都以服务的形式提供给开发人员。通过使用这些服务,开发人员能够构建出功能丰富、轻便且高效的 BPM 应用程序。
ctiviti.cfg.xml文件为核心配置文件,该配置文件集成在Spring的IOC容器当中,可以产生ProcessEngineConfiguration对象,这个对象就是流程引擎的配置对象,ProcessEngine对象则为流程引擎对象,该对象是工作流业务系统的核心,所有的业务操作都是由这个对象所派生出来的对象实现。
Activiti引擎提供了七大Service接口,均通过ProcessEngine获取,并且支持链式API编程风格。
3)流程设计器
- 在jBPM4时代有专门的Eclipse插件可以用来设计jPDL,同样Activiti团队也专门设计了用来设计BPMN 2.0规范的流程谩计器-Eclipse Designer。此外还有Signavio公司为Activiti定制的基于Web的Activiti Modeler流程设计器。喜欢用IDEA的,IDEA也有actiBPM插件支持。
4)原生支持Spring
- Activiti原生支持Spring,这一点对企业应用来说尤为重要:可以很轻松地进行Spring集成,非常方便管理事务和解析表达式( Expression)。
5)分离运行时与历史数据
- Activiti继承自jBPM4,在表结构设计方面也遵循运行时与历史数据的分离,这样的设计可以快速读取运行时数据,仅当需要查询历史数据时再从专门的历史数据表中读取。这种设计方式可以大幅提高数据的存取效率,尤其是当数据日积月累时依然能够快速反应。
6.2 Activiti架构和组件
- Activiti Engine:
作为最核心的模块,提供针对BPMN 2.0规范的解析、执行、创建、管理(任务、流程实例)、查询历史记录并根据结果生成报表。
- Activiti Modeler :
是模型设计器,其并非由Activiti公司所开发,而是由业界认可的Signavio公司赠送的(Signavio e原本是收费的产品,现在被免费授权给Activiti用户使用)。适用于业务人员把需求转换为规范流程定义。
- Activiti Designer:
功能和Activiti Modeler类似,同样提供了基于BPMN 2.0规范的可视化设计功能,但是目前还没有完全支持BPMN规范的定义。适用于开发人员,可以把业务需求人员用Signavio设计的流程定义(XML格式)导入到Designer中,从而让开发人员将其进一步加工成为可以运行的流程定义。
- Activiti Explorer:
可以用来管理仓库、用户、组,启动流程、任务办理等。此组件使用REST风格API,提供一个基础的设计模型。如果业务简单,也可以直接使用无需开发。还可以作为后台管理员的流程、任务管理系统使用。
- Activiti REST:
提供Restful风格的服务,允许客户端以JSON的方式与引擎的REST API交互,通用的协议具有跨平台、跨语言的特性。