1 创建流程

首先选中存放图形的目录(本次我们选择 resources 下的 bpmn 目录),点击菜单: New-BpmnFile,如
下图所示:

起完名字 holiday 后(默认扩展名为 bpmn),就可以看到进入了流程设计页面,如图所示

绘制流程 :

图形绘制好后会生成两个文件:

指定流程定义 key

流程定义 key 即流程定义的标识,在 eclipse 中通过 properties 视图查看流程的 key
建议:相同的业务流程,流程定义的 key 名字定义一样,比如,如果需要创建新的业务流程,请假
流程则使用新的 key。

指定任务负责人

在 properties 视图指定每个任务结点的负责人,
比如下边是填写请假单的负责人为 zhangsan

2  部署流程定义

部署流程定义

    //流程定义部署
public static void main(String[] args) {
//1.创建ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RepositoryService实例
RepositoryService repositoryService = processEngine.getRepositoryService(); //3.进行部署
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("diagram/holiday.bpmn") //添加bpmn资源
.addClasspathResource("diagram/holiday.png")
.name("请假申请单流程")
.deploy(); //4.输出部署的一些信息
System.out.println(deployment.getName());
System.out.println(deployment.getId());
}

执行此操作后 activiti 会将上边代码中指定的 bpm 文件和图片文件保存在 activiti 数据库。

3 流程实例

启动一个流程实例
流程定义部署在 activiti 后就可以通过工作流管理业务流程了,也就是说上边部署的请假申请流
程可以使用了。
针对该流程,启动一个流程表示发起一个新的请假申请单,这就相当于 java 类与 java 对象的关
系,类定义好后需要 new 创建一个对象使用,当然可以 new 多个对象。对于请假申请流程,张三发
起一个请假申请单需要启动一个流程实例, 请假申请单发起一个请假单也需要启动一个流程实例。
代码如下

/**
* @author WGR
* @create 2019/11/13 -- 19:35
*/
public class ActivitiInstance { public static void main(String[] args) {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance holiday = runtimeService.startProcessInstanceByKey("holiday"); System.out.println(holiday.getDeploymentId());
System.out.println(holiday.getId());
System.out.println(holiday.getActivityId()); }
}

4 任务查询

流程启动后,各各任务的负责人就可以查询自己当前需要处理的任务,查询出来的任务都是该用户
的待办任务

/**
* 查询当前用户的任务列表
*/
public class ActivitiTaskQuery { //wangwu完成自己任务列表的查询
public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象
TaskService taskService = processEngine.getTaskService(); //3.根据流程定义的key,负责人assignee来实现当前用户的任务列表查询
Task task = taskService.createTaskQuery()
.processDefinitionKey("holiday")
.taskAssignee("wangwu")
.singleResult(); //4.任务列表的展示
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("任务ID:"+task.getId()); //
System.out.println("任务负责人:"+task.getAssignee());
System.out.println("任务名称:"+task.getName()); } //lishi完成自己任务列表的查询
// public static void main(String[] args) {
// //1.得到ProcessEngine对象
// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//
// //2.得到TaskService对象
// TaskService taskService = processEngine.getTaskService();
//
// //3.根据流程定义的key,负责人assignee来实现当前用户的任务列表查询
// Task task = taskService.createTaskQuery()
// .processDefinitionKey("holiday")
// .taskAssignee("lisi")
// .singleResult();
//
// //4.任务列表的展示
// System.out.println("流程实例ID:"+task.getProcessInstanceId());
// System.out.println("任务ID:"+task.getId()); //5002
// System.out.println("任务负责人:"+task.getAssignee());
// System.out.println("任务名称:"+task.getName());
//
//// 流程实例ID:2501
//// 任务ID:5002
//// 任务负责人:lisi
//// 任务名称:部门经理审批
//
//
// } //zhangsan任务列表的查询
/* public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象
TaskService taskService = processEngine.getTaskService(); //3.根据流程定义的key,负责人assignee来实现当前用户的任务列表查询
List<Task> taskList = taskService.createTaskQuery()
.processDefinitionKey("holiday")
.taskAssignee("zhangsan")
.list(); //4.任务列表的展示
for(Task task :taskList){
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("任务ID:"+task.getId());
System.out.println("任务负责人:"+task.getAssignee());
System.out.println("任务名称:"+task.getName());
}
// 流程实例ID:2501
// 任务ID:2505
// 任务负责人:zhangsan
// 任务名称:填写请假申请单 } */
}

5 任务处理

任务负责人查询待办任务,选择任务进行处理,完成任务。

/**
* 处理当前用户的任务
* 背后操作的表:
* act_hi_actinst
act_hi_identitylink
act_hi_taskinst
act_ru_identitylink
act_ru_task
*/
public class ActivitiCompleteTask { //查询当前用户wangwu的任务并处理掉
public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象
TaskService taskService = processEngine.getTaskService(); //3.查询当前用户的任务
Task task = taskService.createTaskQuery()
.processDefinitionKey("holiday")
.taskAssignee("wangwu")
.singleResult(); //4.处理任务,结合当前用户任务列表的查询操作的话,任务ID:task.getId()
taskService.complete(task.getId()); //5.输出任务的id //
System.out.println(task.getId());
} //lishi完成自己的任务
/* public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象
TaskService taskService = processEngine.getTaskService(); //3.处理任务,结合当前用户任务列表的查询操作的话,任务ID:5002
taskService.complete("5002"); } */ //zhangsan完成自己的任务
/*public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到TaskService对象
TaskService taskService = processEngine.getTaskService(); //3.处理任务,结合当前用户任务列表的查询操作的话,任务ID:2505
taskService.complete("2505"); }*/
}

整个流程走完以后:

Activiti7入门(五)的更多相关文章

  1. openresty 前端开发入门五之Mysql篇

    openresty 前端开发入门五之Mysql篇 这章主要演示怎么通过lua连接mysql,并根据用户输入的name从mysql获取数据,并返回给用户 操作mysql主要用到了lua-resty-my ...

  2. Thinkphp入门 五 —模型 (49)

    原文:Thinkphp入门 五 -模型 (49) [数据库操作model模型] model  模型  数据库操作 tp框架主要设计模式:MVC C:controller   控制器   shop/Li ...

  3. DevExpress XtraReports 入门五 创建交叉表报表

    原文:DevExpress XtraReports 入门五 创建交叉表报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助更多的人不会像我这样浪 ...

  4. 脑残式网络编程入门(五):每天都在用的Ping命令,它到底是什么?

    本文引用了公众号纯洁的微笑作者奎哥的技术文章,感谢原作者的分享. 1.前言   老于网络编程熟手来说,在测试和部署网络通信应用(比如IM聊天.实时音视频等)时,如果发现网络连接超时,第一时间想到的就是 ...

  5. C#基础入门 五

    C#基础入门 五 递归 递归调用:一个方法直接或间接地调用了它本身,就称为方法的递归调用. 递归方法:在方法体内调用该方法本身. 递归示例 public long Fib(int n) { if(n= ...

  6. Python爬虫入门五之URLError异常处理

    大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...

  7. Python爬虫教程——入门五之URLError异常处理

    大家好,本节在这里主要说的是URLError还有HTTPError,以及对它们的一些处理. 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的 ...

  8. 转 Python爬虫入门五之URLError异常处理

    静觅 » Python爬虫入门五之URLError异常处理 1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在 在代码中, ...

  9. Jmeter Web 性能测试入门 (五):Jmeter 参数化 Request

    用来参数化的常用方法: 添加配置元件:用户定义的变量 使用函数助手 添加配置元件:CSV Data Set Config 添加前置处理器:BeanShell PreProcessor 添加配置元件:用 ...

随机推荐

  1. HDU4372(第一类斯特林数)

    题意:N座高楼,高度均不同且为1~N中的数,从前向后看能看到F个,从后向前看能看到B个,问有多少种可能的排列数. 0 < N, F, B <= 2000 首先我们知道一个结论:n的环排列的 ...

  2. tensorflow学习之Saver保存读取

    目前不是很懂..但主要意思是tf可以把一开始定义的参数,包括Weights和Biases保存到本地,然后再定义一个变量框架去加载(restore)这个参数,作为变量本身的参数进行后续的训练,具体如下: ...

  3. docker--搭建docker swarm集群

    10 搭建docker swarm集群 10.1 swarm 介绍 Swarm这个项目名称特别贴切.在Wiki的解释中,Swarm behavior是指动物的群集行 为.比如我们常见的蜂群,鱼群,秋天 ...

  4. JS事件绑定的两种形式

    第一种: obj.on*=function(){} var btn=document.getElementById('myBtn'); btn.onclick=function(){ alert(1) ...

  5. P1536村村通

    这是一个并查集的题,被洛谷评为提高—. 拿到这个题便看出了这是一个裸的并查集,于是就写了一个模板,结果发现连输入都输不进去,一看竟然是多组数据,,然后看到N==0结束,于是便加了一层while.之后提 ...

  6. 如何在ubuntu上安装 搜狗输入法(已经成功)

    转自:https://blog.csdn.net/qq_37589838/article/details/81208409 本文链接:https://blog.csdn.net/qq_37589838 ...

  7. Python 流程控制 超全解析(不可错过)

    流程控制 程序执行结构流程 计算机程序在解决某个具体问题时,包括三种情形,即顺序执行所有的语句.选择执行部分的语句和循环执行部分语句,这正好对应着程序设计中的三种程序执行结构流程:顺序结构.选择结构和 ...

  8. 【转】海量数据解决思路之BitMap

    转载(http://zengzhaozheng.blog.51cto.com/8219051/1404108) 一.概述 本文将讲述Bit-Map算法的相关原理,Bit-Map算法的一些利用场景,例如 ...

  9. 修改jar包中class文件

    某日,想要更改jar包中的某个class文件,有无rar无法解压jar文件,故找到如下方式进行操作 1.解压某个jar包:在需要解压的jar包目录下,打开命令行(cmd),输入如下命令,输入:C:\j ...

  10. Paper Reading

    Paper Reading_SysML Paper Reading_Computer Architecture Paper Reading_Database Paper Reading_Distrib ...