Activiti如何启动流程并使流程前进
作者:程序晓猿 发布时间:2023-11-18 18:38:51
一、流程和任务的关系
以下是一个简单的请假流程图,其中有一个开始事件,两个用户任务,一个结束事件。
启动流程后,activiti会自动创建第一个流程节点的用户任务,然后我们完成第一个用户任务流程就会前进到下一个流程节点,创建第二个节点的流程任务并删除第一个流程任务。
二、开启流程
activiti提供了一个RuntimeService服务组件来在流程运行时对流程实例进行管理与控制。开启流程就需要使用其中的api
2.1根据流程定义key开启流程
上一篇博客中说道了一个流程部署成功后,会在部署信息表act_re_deployment和流程定义表act_re_procdef中插入记录。流程定义key就是act_re_procdef表中的KEY_字段的值。
当表中存在KEY_字段相同的记录时,activiti会选择版本号 VERSION_最新的一条流程定义记录来开启流程
/**
* 开启流程,根据流程定义key开启流程,
* 如果流程定义表中有多个相同的流程定义key,activiti会根据版本号字段VERSION_选择最新的版本来开启流程
*/
@Test
public void test1() {
String processDefinitionKey="process";
//开启流程,得到流程实例对象
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
System.out.println(processInstance);
}
activiti用ProcessInstance这个接口来描述开启流程后得到的流程实例。
三、查询用户任务
开头说到了开启流程后会创建第一个流程节点的用户任务,所以可以使用activiti提供的另一个服务组件TaskService来查询用户任务,TaskService中提供了和任务处理相关的api
3.1 TaskQuery
activiti提供了这个接口来封装任务查询相关的api,可以通过TaskService来获取它的实现类对象
TaskQuery taskQuery = taskService.createTaskQuery();
然后taskQuery这个查询对象的使用和activiti的其他查询对象类似,先指定查询条件,再执行查询。这里我根据任务的代理人进行查询,一个任务只能有一个代理人
/**
* 查询开启流程后自动创建的任务
*/
@Test
public void test2() {
//根据任务的代理人进行查询,一个任务的代理人是唯一的
Task task = taskService.createTaskQuery().taskAssignee("tom").singleResult();
System.out.println(task);
}
activiti用Task来封装任务对象,对应的是act_ru_task这张表的记录。创建任务后会在这张表中插入一条记录。
四、完成任务
可以使用taskService中的方法来完成当前任务,使流程向下一个节点移动。完成任务时需要给定任务id即act_ru_task表的主键Id,所以完成任务时可以先通过查询方法给定条件查询出一个任务对象,再完成这个任务。
/**
* 完成任务,使流程前进到下一个流程节点,并创建下一个节点的任务对象
*/
@Test
public void test3() {
String taskId="4502";
taskService.complete(taskId);
}
来源:https://www.cnblogs.com/chengxuxiaoyuan/p/12013920.html


猜你喜欢
- 1.关于7z首先在这里先介绍一下7z压缩软件,7z是一种主流的 压缩格式,它拥有极高的压缩比。在计算机科学中,7z是一种可以使用多种压缩算法
- 一、 搭建struts2环境在myeclipse下,右击项目->MyEclipse->Project Facets->in
- 本文实例讲述了Winform实现调用asp.net数据接口的方法,分享给大家供大家参考。具体实现方法如下:一、问题:最近一个WPF项目需要改
- 本文是Neward & Associates的总裁Ted Neward为developerworks独家撰稿“你不知道5个……”系列
- 基于 springboot+vue 的测试平台(练手项目)开发继续更新。接下来准备开发请求断言功能。关于这个功能要实现哪些需求,长什么样子,
- 在Android开发中,我们经常会用到对商家或者商品的评价,运用星星进行打分。然而在Android系统中自带的打分控件,RatingBar特
- 本文实例为大家分享了Android实现控件拖动效果的具体代码,供大家参考,具体内容如下1.今天突然想到做个实现个控件拖动效果,就来试试,一查
- 本文实例讲述了C#使用linq对数组进行筛选排序的方法。分享给大家供大家参考。具体如下:using System;using System.
- 一、Widget设计步骤需要修改三个XML,一个class:1.第一个xml是布局XML文件(如:main.xml),是这个widget的。
- 之前在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源。在单数据源的情况下,Spring Boot的配置
- a)原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…
- 一、引言在刷算法的时候经常需要对数组进行排序,第一反应就是直接使用java.util包下的Arrays.sort()方法直接排序。但在刷算法
- 前言接下来是 Spring Boot 统⼀功能处理模块了,也是 AOP 的实战环节,要实现的课程⽬标有以下 3 个:统⼀⽤户登录权限验证统⼀
- 演示 - 初始化销毁顺序/* 初始化和销毁的执行顺序 */@SpringBootApplicationpublic
- 目录一、数组、集合和 LINQ1、数组二、字符串内插三、模式匹配四、委托和 Lambda 表达式五、async/await六、属性一、数组、
- 最近的项目在做socket通信报文解析的时候,用到了结构体与字节数组的转换;由于客户端采用C++开发,服务端采用C#开发,所以双方必须保证各
- BroadcastReceiver不仅可以接收系统广播,也可接收自定义的广播 1.定义一个广播 * public class My
- Android 双击返回键退出程序的方法总结下面先说说LZ思路,具体如下: 1. 第一种就是根据用户点击俩次的时间间隔去判断是否退出程序;
- 实现Java编程中倒计时的方法有许多,下面我们通过三个
- 目录写在前面引入guava依赖包怎么做变量转换写在前面有时候需要处理对象属性的getter、setter方法,或者将属性与数据表字段进行相互