Activiti工作流(二)——入门Demo及数据库
上篇博客简单介绍了Activiti流程图的使用,这篇博客我们就根据这个流程图来完成这一个流程。
下图是Activiti的系统服务结构图,在后面的流程中,我们会用到其中的功能组件,如RepositoryService、RuntimeService、TaskService等等。
首先回顾下流程图:
每个流程大致要经过这几个阶段:部署流程定义、启动流程实例和完成。
1、部署
//获取默认的流程引擎,加载默认配置文件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、启动
/**
* 启动流程实例
*/
@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:3604RuntimeService 运行时的服务,负责启动流程定义的实例、获取保存流程变量等操作。
此时,查询act_ru_execution,act_ru_task,act_hi_procinst,act_hi_taskinst等表都有数据产生,具体区别稍后分析。
3、完成
/**
* 完成我的任务
*/
@Test
public void completeMyTask() {
String taskId = "3704"; //act_ru_task表的id
processEngine.getTaskService().complete(taskId);
System.out.println("完成任务,id" + taskId);
}
完成任务,id3704
TaskService 所有与任务相关的功能都由他负责,包括查询、完成等操作。
现在,流程到达审批【部门经理】节点。
部门经理审批人为小李,小李即可查询个人任务,但提交申请的小王则不可以查到。
/**
* 查询个人当前任务
*/
@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库中提供的字段比较少,一般开发中用业务中的表比较多。
Activiti工作流(二)——入门Demo及数据库的更多相关文章
- Activiti工作流(二)之常用操作
前面介绍了Activiti工作流的基本操作,但是在实际应用过程中,往往不满足项目需求,因此还需要了解一些其他的功能比如:连线.排他网关.并行网管.流程变量.个人任务及组任务的三种发布方式. 下面将介绍 ...
- 【知识总结】Activiti工作流学习入门
1. 我理解的工作流: 在工作中慢慢接触的业务流程,就向流程控制语言一样,一步一步都对应的不同的业务,但整体串联起来就是一个完整的业务.而且实际工作中尤其是在企业内部系统的研发中,确实需要对应许多审批 ...
- Activiti工作流简单入门 (zhuan)
https://my.oschina.NET/Barudisshu/blog/309721 *********************************************** 摘要: 自j ...
- 使用idea进行activiti工作流开发入门学习
1.安装插件 在idea里面,activiti的插件叫actiBPM,在插件库里面把它安装好,重启idea就行了. 2.新建一个maven项目,并更改pom.xml.pom中依赖如下: <?xm ...
- Activiti工作流的入门介绍
一.activiti介绍 Activiti5是一个 业务流程管理(BPM)框架,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩展的可执行流程语言框架.Activiti基于Ap ...
- 一、activiti工作流(workflow)入门介绍
activiti官方网站(官网通常很卡,不建议看,直接看我教程就行) http://www.activiti.org/ eclipse离线安装activiti插件并下载教程 https://downl ...
- 【Activiti工作流引擎】官方快速入门demo
Activiti官方快速入门demo 地址: https://www.activiti.org/quick-start 0. 版本 activiti 5.22.0 JDK 1.8 1. 介绍 这个快速 ...
- activiti工作流学习链接
首页: http://www.activiti.org/书籍: activiti in action 入门demo: kft-activiti-demo http://www.oschina.n ...
- Activity工作流框架入门(二)API使用DEMO
工作流API使用Demo package activity.demo.test; import java.io.File; import java.io.FileInputStream; import ...
随机推荐
- c#分析SQL语句
最近总结了c#一般的功能,然后自己在博文中写了很多东西.主要是在用途上面.能够解决一些问题.现在分各个组件和方向写完了.主要的内容写了demo,也写了自己的项目组件和模型. 最后一个SQL分析.其实在 ...
- jquery mobile 移动web(1)
轻量级框架jQuery Mobile 所需文件 <link rel="stylesheet" href="jquery.mobile-1.1.2/jquery.mo ...
- React学习(1)—— 基础项目搭建以及环境配置
首先,我们需要安装node.js,直接搜索并在官网下载安装包. node.js官网:https://nodejs.org/en/ 现在我们成功安装了node和npm,然后我们来用npm创建新的项目,首 ...
- Asp.Net Core使用Nginx实现反向代理
---恢复内容开始--- 前两篇文章介绍了使用Docker作为运行环境,用Nginx做反向代理的部署方法,这篇介绍一下使用Nginx配合.Net Core运行时直接在Liunx上裸奔的方法. 一.安装 ...
- hive表格取差集
hive 求两个集合的差集 业务场景是这样的,这里由两个hive表格A和B A的形式大概是这样的:uid B的形式大概是这样的:uid 我想要得到存在A中但是不存在B中的uid 具体代码如下 sele ...
- python3 练习题100例 (二十一)打印一定范围内的水仙花数
题目内容: 水仙花数是指一个n位数 (n≥3),它的每个位上的数字的n次幂之和等于它本身. 例如:153是一个“水仙花数”,因为 153 是个 3位数,而1**3+5**3+3**3==153. 输入 ...
- PHP中的mysql_unbuffered_query与mysql_query的区别
对于mysql_query大家都很熟悉,下面先简单介绍下mysql_unbuffered_query mysql_unbuffered_query (PHP 4 >= 4.0.6, PHP 5) ...
- DHT11温湿度传感器编程思路以及代码的实现(转载)
源自:https://blog.csdn.net/qq_34952376/article/details/81193938 在我们刚开始进入单片机的学习中,练习写传感器的时序是必不可少的,其实我比较推 ...
- 生产Web架构优化方案(动态转静态)
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.门户新闻业务: 1. 特点:网页一旦发布,再次改动网页内容的几率很低,新闻业务内容的静态化相对比较简单 2. ...
- 2018年第九届蓝桥杯【C++省赛B组】【第二题:明码】
参考:https://blog.csdn.net/qq_34202873/article/details/79784242 #include <bits/stdc++.h> using n ...