网址
https://www.activiti.org
https://github.com/Activiti/Activiti
版本
5.16 2014.07.23
5.17 2014.12.18
5.18 2015.07.31
5.19 2015.11.05
5.20 2016.04.18
5.21 2016.07.13
5.22 2016.11.04
工作流
定义
工作的流程,实际业务的一个执行过程
预先定义需要执行的任务,参与的人或者角色,执行的规则,
参与者按照规则执行这些任务,最终完成整个过程
核心概念
流程定义和流程实例
流程人员,执行实例,任务,流程变量
流程定义中 包含 流程人员,任务,流程变量 等
BPMN
业务流程模型的一组符号,用来定义业务流程图,描述一个业务流程
配置spring集成activiti
使用流程引擎配置类, SpringProcessEngineConfiguration
配置流程引擎 ProcessEngine,
配置service服务, 有
RepositoryService 管理流程定义
RuntimeService 管理流程的执行实例,包括启动、推进、删除流程实例等操作
TaskService 管理流程的任务
HistoryService 管理历史流程的执行实例/任务/流程变量/流程人员等
IdentityService 管理流程人员
FormService 管理任务表单
————————————————————————————————-
<!-- 定义流程引擎 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<!-- 定义Service服务 -->
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
<bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/>
<bean id="formService" factory-bean="processEngine" factory-method="getFormService"></bean>
SpringProcessEngineConfiguration需要注入DataSource,TransactionManager,
ProcessEngine需要注入SpringProcessEngineConfiguration
ProcessEngine 可以得到
RepositoryService
RuntimeService
TaskService
HistoryService
IdentityService
FormService
activiti的数据库表
ACT_RE_*: ‘RE’表示repository。
这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: ‘RU’表示runtime。
这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。
Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。
这样运行时表可以一直很小速度很快。
ACT_ID_*: ‘ID’表示identity。
这些表包含身份信息,比如用户,组等等。
ACT_HI_*: ‘HI’表示history。
这些表包含历史数据,比如历史流程实例, 变量,任务等等。
开发activiti
使用eclipse插件,绘制流程定义文件,
生成 .bpmn,.png,打成压缩包*.zip
创建activiti自带的数据库表
可以使用一个配置文件,配置数据库的jdbc连接信息,
使用activiti的api自动创建表
创建业务数据表
创建参与人员的数据
在项目中部署流程,
使用RepositoryService
repositoryService.createDeployment()//创建一个流程部署
.name(deployFile.getOriginalFilename())//流程部署的名称
.addZipInputStream(new ZipInputStream(deployFile.getInputStream()))//添加zip输入流
.deploy();//开始部署
业务流程操作
提交申请
// 启动流程, 根据流程定义*.bpmn里面定义的流程的id,启动具体的流程实例
ProcessInstance pi= runtimeService.startProcessInstanceByKey("leavebill",variables);
// 根据流程实例Id查询任务
Task task=taskService.createTaskQuery().processInstanceId(pi.getProcessInstanceId()).singleResult();
// 完成 学生填写请假单任务
taskService.complete(task.getId());
审核操作
// 创建任务查询,根据taskId获得任务
Task task=taskService.createTaskQuery()
.taskId(taskId) // 根据任务id查询
.singleResult();
Map<String,Object> variables=new HashMap<String,Object>();
//取得角色用户登入的session对象
MemberShip currentMemberShip=(MemberShip) session.getAttribute("currentMemberShip");
//取出用户,角色信息
User currentUser=currentMemberShip.getUser();
Group currentGroup=currentMemberShip.getGroup();
// 获取流程实例id
String processInstanceId=task.getProcessInstanceId();
// 设置用户id
Authentication.setAuthenticatedUserId(currentUser.getFirstName()+currentUser.getLastName()+"["+currentGroup.getName()+"]");
// 添加批注信息
taskService.addComment(taskId, processInstanceId, comment);
// 完成任务
taskService.complete(taskId, variables);
请假流程
生成数据库表
使用java代码生成
activiti.cfg.xml存放数据库连接信息
<!-- 创建单例子的流程引擎的配置文件 -->
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!-- 链接数据库配置 -->
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
<!-- 转义的话,需要加入& = & -->
<property name="jdbcUrl" value="jdbc:mysql://localhost:3316/activiti?useUnicode=true&characterEndocing=utf8"></property>
<property name="jdbcUsername" value="root"></property>
<property name="jdbcPassword" value=""></property>
<!-- 创建表配置自动创建 -->
<property name="databaseSchemaUpdate" value="true"></property>
</bean>
//通过让工作流引擎的全部配置对象来执行配置文件中的内容来创建流程引擎对象
ProcessEngine processEngine = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"activiti.cfg.xml").buildProcessEngine();
act_ge_property
属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录
next.dbid 7501 4
schema.history create(5.20.0.2) 1
schema.version 5.20.0.2 1
schema.version 5.20.0.2 1
[
添加业务数据表
DROP TABLE IF EXISTS `t_leave`;
CREATE TABLE `t_leave` (
`id` int(11) NOT NULL auto_increment,
`userId` varchar(255) default NULL,
`leaveDate` datetime default NULL,
`leaveDays` int(11) default NULL,
`leaveReason` text,
`state` varchar(255) default NULL,
`processInstanceId` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
]
添加用户信息
手动插入数据
INSERT INTO `act_id_group` VALUES ('bz', null, '班主任', '');
INSERT INTO `act_id_group` VALUES ('manager', null, '管理员', '');
INSERT INTO `act_id_group` VALUES ('student', null, '学生', '');
INSERT INTO `act_id_group` VALUES ('yz', null, '院长', '');
INSERT INTO `act_id_group` VALUES ('zr', null, '主任', '');
INSERT INTO `act_id_user` VALUES ('admin', null, 'old', 'noop', '123@qq.com', '123', '');
INSERT INTO `act_id_user` VALUES ('lisi', null, '李', '四', '123@qq.com', '123', '');
INSERT INTO `act_id_user` VALUES ('wangwu', null, '王', '五', '123@qq.com', '123', '');
INSERT INTO `act_id_user` VALUES ('zhangsan', null, '张', '三', '123@qq.com', '123', '');
INSERT INTO `act_id_user` VALUES ('zhaoliu', null, '赵', '六', '123@qq.com', '123', '');
INSERT INTO `act_id_membership` VALUES ('lisi', 'bz');
INSERT INTO `act_id_membership` VALUES ('admin', 'manager');
INSERT INTO `act_id_membership` VALUES ('zhangsan', 'student');
INSERT INTO `act_id_membership` VALUES ('zhaoliu', 'yz');
INSERT INTO `act_id_membership` VALUES ('wangwu', 'zr');
用户信息
admin manager oldnoop 管理员 123
lisi bz 李四 班主任 123
wangwu zr 王五 主任 123
zhangsan student 张三 学生 123
zhaoliu yz 赵六 院长 123
数据表
act_id_group 用户组信息表
act_id_info 用户扩展信息表
act_id_membership 用户与用户组对应信息表
act_id_user 用户信息表
select u.ID_,g.ID_,concat(u.FIRST_,u.LAST_) as name,g.NAME_,u.PWD_
from act_id_membership m
join act_id_user u on m.USER_ID_ =u.ID_
join act_id_group g on m.GROUP_ID_=g.ID_;
流程图
设计
eclipse插件
生成*.bpmn,*.png,
生成*.zip
流程定义部署
管理员登录系统
admin,123
部署流程实例
数据库表数据
act_ge_bytearray 二进制数据表
"2",1,"leaveBill.png","1",0
"3",1,"leaveBill.bpmn","1",0
act_re_deployment 部署信息表
1 leave.zip 2017-05-10 12:28:06
act_re_model 流程设计模型部署表
act_re_procdef 流程定义数据表
leavebill:1:4 1 http://www.activiti.org/test My process leavebill 1 1 leaveBill.bpmn leaveBill.png 0 1 1
流程实例运行
学生登录系统
zhangsan,123
填写请假表单
业务数据表t_leave
3 zhangsan 2017-05-11 11:23:35 3 睡觉 未提交
提交申请
业务数据表t_leave
3 zhangsan 2017-05-11 11:23:35 3 睡觉 审核中 5021
[执行对象id]
activiti数据表
act_ru_*
act_ru_execution
运行时流程 [执行实例] 表
[REV_,ACT_ID_ 2,usertask4]
5021 2 5021 leavebill:1:4 usertask4 1 0 1 0 1 2
act_ru_task
运行时任务节点表
5029 1 5021 5021 leavebill:1:4 审核【班主任】 usertask4 50 2017-05-11 11:24:37 1 pizhun.jsp
act_ru_variable
运行时流程变量数据表
5024 1 string leaveId 5021 5021 3
act_ru_identitylink
运行时流程人员表,主要存储任务节点与参与者的相关信息
5022 1 starter 李四[班主任] 5021
5030 1 bz candidate 5029
班主任登录系统
lisi,123
办理任务
activiti数据表
act_ru_*
act_ru_execution
运行时流程 [执行实例] 表
[REV_,ACT_ID_ 3,usertask2]
5021 3 5021 leavebill:1:4 usertask2 1 0 1 0 1 2
act_ru_task
运行时任务节点表
[NAME_,TASK_DEF_KEY_, 主任,usertask2]
5036 1 5021 5021 leavebill:1:4 主任 usertask2 50 2017-05-11 11:36:47 1 pizhun.jsp
act_ru_variable
运行时流程变量数据表
5024 1 string leaveId 5021 5021 3
5032 1 integer day 5021 5021 3 3
5033 1 string msg 5021 5021 通过
act_ru_identitylink
运行时流程人员表,主要存储任务节点与参与者的相关信息
5022 1 starter 李四[班主任] 5021
5037 1 zr candidate 5036
主任登录系统
办理任务
activiti数据表
act_ru_*正在执行数据表
act_ru_execution
act_ru_task
act_ru_variable
act_ru_identitylink
数据删除
act_hi_*历史执行数据表
act_hi_procinst 历史流程实例表
5021 5021 leavebill:1:4 2017-05-11 11:24:36 2017-05-11 11:45:03 1227785 李四[班主任] startevent1 endevent1
act_hi_actinst 历史节点表
5023 leavebill:1:4 5021 5021 startevent1 Start startEvent 2017-05-11 11:24:36 2017-05-11 11:24:36 0
5025 leavebill:1:4 5021 5021 usertask1 5026 学生提出申请 userTask 2017-05-11 11:24:36 2017-05-11 11:24:37 1118
5028 leavebill:1:4 5021 5021 usertask4 5029 审核【班主任】 userTask 2017-05-11 11:24:37 2017-05-11 11:36:47 730662
5034 leavebill:1:4 5021 5021 exclusivegateway1 Exclusive Gateway exclusiveGateway 2017-05-11 11:36:47 2017-05-11 11:36:47 0
5035 leavebill:1:4 5021 5021 usertask2 5036 主任 userTask 2017-05-11 11:36:47 2017-05-11 11:45:03 496784
5040 leavebill:1:4 5021 5021 endevent1 End endEvent 2017-05-11 11:45:03 2017-05-11 11:45:03 0
act_hi_taskinst 历史任务实例表
5026 leavebill:1:4 usertask1 5021 5021 学生提出申请 2017-05-11 11:24:36 2017-05-11 11:24:37 1116 completed 50
5029 leavebill:1:4 usertask4 5021 5021 审核【班主任】 2017-05-11 11:24:37 2017-05-11 11:36:47 730661 completed 50 pizhun.jsp
5036 leavebill:1:4 usertask2 5021 5021 主任 2017-05-11 11:36:47 2017-05-11 11:45:03 496782 completed 50 pizhun.jsp
act_hi_identitylink 历史流程人员表
5022 starter 李四[班主任] 5021
5039 participant 王五[主任] 5021
act_hi_varinst 历史变量表
5024 5021 5021 leaveId string 1 3 2017-05-11 11:24:36 2017-05-11 11:45:03
5032 5021 5021 day integer 1 3 3 2017-05-11 11:36:47 2017-05-11 11:45:03
5033 5021 5021 msg string 1 通过 2017-05-11 11:36:47 2017-05-11 11:45:03
act_hi_comment 历史意见表
5031 comment 2017-05-11 11:36:47 李四[班主任] 5029 5021 AddComment 可以啊 鍙互鍟?
5038 comment 2017-05-11 11:45:03 王五[主任] 5036 5021 AddComment 可以 鍙互