Spring activiti如何实现指定任务处理者
作者:Y_wee 发布时间:2023-04-08 05:53:16
标签:activiti,指定,任务,处理者
指定委托那些办理者处理任务节点,也就是只有此办理者才有操作此节点的操作权限
1、直接指定
流程图配置实现:在流程图属性栏设置Assignee属性值为任务的处理者
流程图xml文件配置实现:在流程图对应的xml文件指定activiti:assignee属性值为任务的处理者
<userTask activiti:assignee="yl01" activiti:exclusive="true" id="_3" name="部长"/>
activiti插件不支持idea2020版本,所以2020版idea可能看不到流程图属性栏,可以采用第二种直接修改xml文件配置方式
示例
package com.yl;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
public class ActivitiTest {
//创建工作流引擎
ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
//管理流程文件的对象
RepositoryService repositoryService=processEngine.getRepositoryService();
//管理流程实例的对象
RuntimeService runtimeService=processEngine.getRuntimeService();
//管理任务节点的对象
TaskService taskService=processEngine.getTaskService();
//流程实例id
private String processInstanceId;
/**
* 部署流程文件
*/
@Test
public void deployment() {
//部署bpmn文件到数据库表
Deployment deployment=repositoryService.createDeployment().addClasspathResource("hello.bpmn").deploy();
System.out.println("部署文件id="+deployment.getId());
}
/**
* 启动流程实例
*/
@Test
public void start(){
//启动流程实例
ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("myProcess_1");
processInstanceId=processInstance.getId();
System.out.println("流程实例id="+processInstanceId);
}
/**
* 获取当前任务节点对象及完成此任务节点
*/
@Test
public void complete(){
//获取任务节点对象
List<Task> taskList= taskService.createTaskQuery().processInstanceId(processInstanceId).taskAssignee("yl01").list();
for(Task task:taskList){
System.out.println("待办事务="+task.getName());
}
//完成此任务节点
taskService.complete(task.getId());
}
}
2、通过变量指定
流程图配置实现:在流程图属性栏设置Assignee属性值为任务的处理者,属性值设置为变量,eg:#{name}
流程图xml文件配置实现:在流程图对应的xml文件指定activiti:assignee属性值为任务的处理者
<userTask activiti:assignee="#{name1}" activiti:exclusive="true" id="_3" name="部长"/>
示例
package com.yl;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
public class ActivitiTest {
//创建工作流引擎
ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
//管理流程文件的对象
RepositoryService repositoryService=processEngine.getRepositoryService();
//管理流程实例的对象
RuntimeService runtimeService=processEngine.getRuntimeService();
//管理任务节点的对象
TaskService taskService=processEngine.getTaskService();
//流程实例id
private String processInstanceId;
/**
* 部署流程文件
*/
@Test
public void deployment() {
//部署bpmn文件到数据库表
Deployment deployment=repositoryService.createDeployment().addClasspathResource("hello.bpmn").deploy();
System.out.println("部署文件id="+deployment.getId());
}
/**
* 启动流程实例
*/
@Test
public void start(){
//存储任务处理者
Map<String,Object> variables=new HashMap<>();
variables.put("name1","yl01");
//启动流程实例并指定任务处理对象
ProcessInstance processInstance=runtimeService.startProcessInstanceByKey("myProcess_1",variables);
processInstanceId=processInstance.getId();
System.out.println("流程实例id="+processInstanceId);
}
/**
* 获取当前任务节点对象及完成此任务节点
*/
@Test
public void complete(){
//获取任务节点对象
Task task= taskService.createTaskQuery().processInstanceId(processInstanceId).taskAssignee("yl01").singleResult();
System.out.println("待办事务="+task.getName());
//完成此任务节点
taskService.complete(task.getId());
}
}
来源:https://www.cnblogs.com/Y-wee/p/13920019.html
0
投稿
猜你喜欢
- KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普
- 本文实例讲述了Android判断网络类型的方法。分享给大家供大家参考,具体如下:判断网络类型是wifi,还是3G,还是2G网络,对不同的网络
- 主内存和工作内存Java 内存模型规定了所有的变量都存储在主内存中, 每条线程有自己的工作内存线程的工作内存中保存了被该线程使用的变量的主内
- Android利用爬虫实现模拟登录的实现实例为了用手机登录校网时不用一遍一遍的输入账号密码,于是决定用爬虫抓取学校登录界面,然后模拟填写本次
- 1 前言项目中,目前主流的当然是微服务项目。为了应对高并发,以及保证自己的服务比较稳定,通常会把服务按照模块,或者具体的业务划分为多个独立的
- //方法一//须添加对System.Web的引用//using System.Web.Security;/// <summary>
- C#调用C++ dll string类型返回为了这个问题,百度了一堆不靠谱的资料,什么C#调用c++类型对应啥的,说用string ,Str
- 什么原因使我们不得不使用线程池?个人认为主要原因是:短时间内需要处理的任务数量很多使用线程池的好处:1.减少在创建和销毁线程上所花的时间以及
- Fragment的产生与介绍Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视。针对屏幕尺寸的差距,很多情况下,都是
- 我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到有那种下拉式的二级列表菜单。具体如图所示:上面两张图就是美团的一个二级
- 1、背景说明公司收费系统需要与银行做实时代收对接,业务协议使用我们收费系统的标准。但是银行要求在业务协议的基础上,使用银行的加密规则。采用M
- ProgressDialog的基本用法ProgressDialog为进度对话框。android手机自带的对话框显得比较单一,我们可以通过Pr
- 本文实例讲述了Android播放多张图片形成的一个动画。分享给大家供大家参考,具体如下:在Android里可以逐帧的播放图片,然后产生一种动
- 一、FeignClient注解FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient
- 枚举是迭代一个集合中的数据项的过程。我们经常使用的大多数集合实际上都已经实现了枚举的接口IEnumerable和IEnumerator接口,
- 1.介绍当系统准备为用户提供一系列相关对象,又不想让用户代码和这些对象形成耦合时,就可以使用抽象工厂模式。2.如何实现1)抽象产品--Car
- 环境配置:jdk1.8mybatis3.4.1springboot2.0起始原因:编写mybatis的Demo程序时,mapper传递多参数
- 今天从数据库生成了一份数据字典,但是没有备注,所以需要程序把表格都读出来。用到了下面的代码,亲测可用~~object oFileName =
- 几个月前写过一篇博客《xUtils3.0框架学习笔记》 ,上面也有记录通过xUtils实现文件上传的使用方法,代码如下:private vo
- 对于无.SVC文件的配置只需要指定以.svc结尾的相对地址和服务实现的完整名称即可。可问题恰恰出在这里,之前需要在<system.se