Activiti工作流(二)——入门Demo及数据库
2016-01-17 11:54
579 查看
上篇博客简单介绍了Activiti流程图的使用,这篇博客我们就根据这个流程图来完成这一个流程。
下图是Activiti的系统服务结构图,在后面的流程中,我们会用到其中的功能组件,如RepositoryService、RuntimeService、TaskService等等。
![](http://img.blog.csdn.net/20160113163058609)
首先回顾下流程图:
![](http://img.blog.csdn.net/20160113162345297)
每个流程大致要经过这几个阶段:部署流程定义、启动流程实例和完成。
![](http://img.blog.csdn.net/20160113162746077)
1、部署
Console Output
deploymentId:3601
deployment名称:hello审批
RepositoryService负责管理和控制发布包和流程定义的操作,上面的例子是部署流程定义的使用实例。部署信息会存储到数据库中的act_re_deployment,act_re_procdef,act_ge_bytearray表中。
查询act_re_deployment表:
![](http://img.blog.csdn.net/20160117110558366)
2、启动
Console Output
启动流程实例id:3701
流程定义id:hello:2:3604
RuntimeService 运行时的服务,负责启动流程定义的实例、获取保存流程变量等操作。
此时,查询act_ru_execution,act_ru_task,act_hi_procinst,act_hi_taskinst等表都有数据产生,具体区别稍后分析。
3、完成
完成任务,id3704
TaskService 所有与任务相关的功能都由他负责,包括查询、完成等操作。
现在,流程到达审批【部门经理】节点。
![](http://img.blog.csdn.net/20160113173317477)
部门经理审批人为小李,小李即可查询个人任务,但提交申请的小王则不可以查到。
任务id3802
任务名称审批【部门经理】
任务办理人小李
任务实例id3701
上面提到TaskService,所以查询也使用TaskService来操作。具体操作的表是act_ru_task.
这个小demo中简单介绍了几张常用的表,下图是具体的分类介绍。
图中是对表进行的分类,拼接他们的缩写形成的表名,例如act_ru_task, act_id_user等等
![](http://img.blog.csdn.net/20160117114324678)
运行时的库runtime中存放的是临时数据,类似临时的表。在activiti中,一般是执行RuntimeService操作后产生的。在一个实例执行完成后,runtime中数据清空,这时如果要查看,就只能从历史库中去查了。
如果说runtime是动态表的话,那么与他对应的就是repository这类表了。带_re前缀的表存放的是静态信息,包括流程定义、图片等。
组织机构表就很好理解了,不过activiti库中提供的字段比较少,一般开发中用业务中的表比较多。
下图是Activiti的系统服务结构图,在后面的流程中,我们会用到其中的功能组件,如RepositoryService、RuntimeService、TaskService等等。
首先回顾下流程图:
每个流程大致要经过这几个阶段:部署流程定义、启动流程实例和完成。
1、部署
[code]//获取默认的流程引擎,加载默认配置文件activiti.cfg.xml ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /** * 部署流程定义 * */ @Test public void deploymentProcessDefinition() { // Deployment deployment = processEngine.getRepositoryService()// 与流程定义和部署对象相关的Service .createDeployment()// 创建一个部署对象 .name("hello审批")// 添加部署名称 .addClasspathResource("diagrams/hello.bpmn") // 从classpath资源中加载,一次只加载一个文件 .addClasspathResource("diagrams/hello.png").deploy();// 完成部署 System.out.println("deploymentId:" + deployment.getId()); System.out.println("deployment名称:" + deployment.getName()); }
Console Output
deploymentId:3601
deployment名称:hello审批
RepositoryService负责管理和控制发布包和流程定义的操作,上面的例子是部署流程定义的使用实例。部署信息会存储到数据库中的act_re_deployment,act_re_procdef,act_ge_bytearray表中。
查询act_re_deployment表:
2、启动
[code]/** * 启动流程实例 */ @Test public void startProcessInstance() { //流程定义key String processDefinitionKey = "hello"; // 与正在执行的流程实例和执行对象相关的Service ProcessInstance processInstance = processEngine.getRuntimeService() // 使用流程定义的key,key对应hello.bpmn文件中id值,默认按照最新版本的流程定义启动 .startProcessInstanceByKey(processDefinitionKey); System.out.println("启动流程实例id:" + processInstance.getId());//401 System.out.println("流程定义id:" + processInstance.getProcessDefinitionId());//304 }
Console Output
启动流程实例id:3701
流程定义id:hello:2:3604
RuntimeService 运行时的服务,负责启动流程定义的实例、获取保存流程变量等操作。
此时,查询act_ru_execution,act_ru_task,act_hi_procinst,act_hi_taskinst等表都有数据产生,具体区别稍后分析。
3、完成
[code]/** * 完成我的任务 */ @Test public void completeMyTask() { String taskId = "3704"; //act_ru_task表的id processEngine.getTaskService().complete(taskId); System.out.println("完成任务,id" + taskId); }
完成任务,id3704
TaskService 所有与任务相关的功能都由他负责,包括查询、完成等操作。
现在,流程到达审批【部门经理】节点。
部门经理审批人为小李,小李即可查询个人任务,但提交申请的小王则不可以查到。
[code]/** * 查询个人当前任务 */ @Test public void findMyTask() { String assignee = "小李"; List<Task> list = processEngine.getTaskService()// 与个人任务相关 .createTaskQuery() // 创建任务查询对象 .taskAssignee(assignee) // 指定办理人 .list(); // 列表集合 if (list != null && list.size() > 0) { for (Task task : list) { System.out.println("任务id" + task.getId()); System.out.println("任务名称" + task.getName()); System.out.println("任务办理人" + task.getAssignee()); System.out.println("任务实例id" + task.getProcessInstanceId()); } } }
任务id3802
任务名称审批【部门经理】
任务办理人小李
任务实例id3701
上面提到TaskService,所以查询也使用TaskService来操作。具体操作的表是act_ru_task.
这个小demo中简单介绍了几张常用的表,下图是具体的分类介绍。
图中是对表进行的分类,拼接他们的缩写形成的表名,例如act_ru_task, act_id_user等等
运行时的库runtime中存放的是临时数据,类似临时的表。在activiti中,一般是执行RuntimeService操作后产生的。在一个实例执行完成后,runtime中数据清空,这时如果要查看,就只能从历史库中去查了。
如果说runtime是动态表的话,那么与他对应的就是repository这类表了。带_re前缀的表存放的是静态信息,包括流程定义、图片等。
组织机构表就很好理解了,不过activiti库中提供的字段比较少,一般开发中用业务中的表比较多。
相关文章推荐
- 数据库一次性插入10w条数据,怎么插入效率快
- mongodb数据备份
- ORACLE 更新关联多张表
- redis的安装以及常见的使用
- SQL IF while 游标
- Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0.jar的问题
- 通过jdbc实现对数据库中数据的增删查改操作
- 数据库事物之冲突可串行化、优先图、视图等价和视图可串行化
- 数据库操作
- 在线学习SQL语句?没问题~~
- Mycat学习笔记 第二篇. MySql 读写分离与日志分析——主从多结点
- Mysql 数据类型--课程笔记
- MongoDB写关注
- mysql安装教程
- GreenPlumn数据库体系结构
- Mac下使用MySQL
- SQL高级查询
- mysql安装配置
- 删除指定时间段分区的SQL
- [数据库] SQL语句select简单记录总结