第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」

第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」第七章,activiti个人任务分配,动态指定和监听器指定任务委派人

大家好,又见面了,我是你们的朋友全栈君。

这章我们介绍下怎么把任务非配给指定的某个人去执行。现实使用的时候我们也有见过前面一个人审批结束后会自动走到下一个审批人,如果不处理就会一直等待,这里也是同样的道理。

第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」

这里先把任务分配给xiaoliu001,也就是写死指定某个人

第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」

代码如下:

package com.xiaoyexinxixn.ActivityLesson.flow;


import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

import com.xiaoyexinxixn.ActivityLesson.model.Student;

public class StudentLeaveProcess10 {
	//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
	private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploy() {
		//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
		Deployment deployment=processEngine.getRepositoryService()
		//创建部署
		.createDeployment()
		//加载流程图资源文件
		.addClasspathResource("diagrams/StudentLeave10.bpmn")
		//加载流程图片
		.addClasspathResource("diagrams/StudentLeave10.png")
		//流程名称
		.name("leave10")
		//部署流程
		.deploy();
		System.out.println("流程部署的ID: "+deployment.getId());
		System.out.println("流程部署的Name: "+deployment.getName());
	}
	
	/*
	 * 启动流程实例
	 */
	@Test
	public void start(){
		//运行启动流程的servicee
		ProcessInstance pi=processEngine.getRuntimeService()
		//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
		.startProcessInstanceByKey("StudentLeaveProcess10");
		System.out.println(pi.getId());
		System.out.println(pi.getProcessDefinitionId());
	}
	
	/**
	 * 查看任务
	 */
	@Test
	public void findTaskList(){
		//获取任务列表的service
		List<Task> taskList=processEngine.getTaskService()
				//创建任务查询
				.createTaskQuery()
				//指定任务的执行人
				.taskAssignee("xiaoliu001")
				.list();
		for(Task task:taskList){
			System.out.println("任务ID:"+task.getId());
			System.out.println("任务名称:"+task.getName());
			System.out.println("任务创建时间:"+task.getCreateTime());
			System.out.println("任务委派人:"+task.getAssignee());
			System.out.println("任务流程实例Id:"+task.getProcessInstanceId());
		}
	}
	

依次执行上面的方法,在最后的查看任务方法的结果是:

任务ID:160004
任务名称:leave001
任务创建时间:Tue Apr 24 17:19:17 CST 2018
任务委派人:xiaoliu001
任务流程实例Id:160001

说明是OK的,这也是最简单的一种了。

下面是用流程变量动态指定任务委派人:

流程图稍作修改,如下,使用表达式,下面代码中会指定这个变量的值是多少:

第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」

package com.xiaoyexinxixn.ActivityLesson.flow;


import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

import com.xiaoyexinxixn.ActivityLesson.model.Student;

public class StudentLeaveProcess10 {
	//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
	private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploy() {
		//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
		Deployment deployment=processEngine.getRepositoryService()
		//创建部署
		.createDeployment()
		//加载流程图资源文件
		.addClasspathResource("diagrams/StudentLeave10.bpmn")
		//加载流程图片
		.addClasspathResource("diagrams/StudentLeave10.png")
		//流程名称
		.name("leave10")
		//部署流程
		.deploy();
		System.out.println("流程部署的ID: "+deployment.getId());
		System.out.println("流程部署的Name: "+deployment.getName());
	}
	
	/*
	 * 启动流程实例
	 */
	@Test
	public void start(){
		//流程启动时设置流程比那里,指定执行人
		Map<String, Object> variables=new HashMap<String,Object>();
		variables.put("userId", "xiaoliu002");
		//运行启动流程的servicee
		ProcessInstance pi=processEngine.getRuntimeService()
		//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
		.startProcessInstanceByKey("StudentLeaveProcess10",variables);
		System.out.println(pi.getId());
		System.out.println(pi.getProcessDefinitionId());
	}
	
	/**
	 * 查看任务
	 */
	@Test
	public void findTaskList(){
		//获取任务列表的service
		List<Task> taskList=processEngine.getTaskService()
				//创建任务查询
				.createTaskQuery()
				//指定任务的执行人
				.taskAssignee("xiaoliu002")
				.list();
		for(Task task:taskList){
			System.out.println("任务ID:"+task.getId());
			System.out.println("任务名称:"+task.getName());
			System.out.println("任务创建时间:"+task.getCreateTime());
			System.out.println("任务委派人:"+task.getAssignee());
			System.out.println("任务流程实例Id:"+task.getProcessInstanceId());
		}
	}
	

依次执行上面代码,最后查看任务可以看出流程的执行人已经是xiaoliu002了。

使用监听器设置执行人:

首先写一个监听器类:

package com.xiaoyexinxixn.ActivityLesson;

import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

public class MyTaskListener implements TaskListener{

	@Override
	public void notify(DelegateTask delegateTask) {//DelegateTask 代理任务对象
		// TODO Auto-generated method stub
		delegateTask.setAssignee("liu001");//指定办理人
//		delegateTask.addCandidateUser("liu002");
	}

}

然后再复制一个流程图,做如下修改,把我们刚才新建的类放进去

第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」

第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」

完了再写测试类:

package com.xiaoyexinxixn.ActivityLesson.flow;


import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

import com.xiaoyexinxixn.ActivityLesson.model.Student;

public class StudentLeaveProcess11 {
	//获取默认流程引擎实例,会自动读取activiti.cfg.xml ,所以我们要严格定义配置文件的名称
	private ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义
	 */
	@Test
	public void deploy() {
		//获取部署相关service,这些都是activiti封装好的api接口,还有很多,下面也会用到很多
		Deployment deployment=processEngine.getRepositoryService()
		//创建部署
		.createDeployment()
		//加载流程图资源文件
		.addClasspathResource("diagrams/StudentLeave11.bpmn")
		//加载流程图片
		.addClasspathResource("diagrams/StudentLeave11.png")
		//流程名称
		.name("leave11")
		//部署流程
		.deploy();
		System.out.println("流程部署的ID: "+deployment.getId());
		System.out.println("流程部署的Name: "+deployment.getName());
	}
	
	/*
	 * 启动流程实例
	 */
	@Test
	public void start(){
		//运行启动流程的servicee
		ProcessInstance pi=processEngine.getRuntimeService()
		//定义流程表的KEY字段值,key值是我们前面定义好的key,可在act_re_procdef表中的key_字段中找到,
		.startProcessInstanceByKey("StudentLeaveProcess11");
		System.out.println(pi.getId());
		System.out.println(pi.getProcessDefinitionId());
	}
	
	/**
	 * 查看任务
	 */
	@Test
	public void findTaskList(){
		//获取任务列表的service
		List<Task> taskList=processEngine.getTaskService()
				//创建任务查询
				.createTaskQuery()
				//指定任务的执行人
				.taskAssignee("liu001")
				.list();
		for(Task task:taskList){
			System.out.println("任务ID:"+task.getId());
			System.out.println("任务名称:"+task.getName());
			System.out.println("任务创建时间:"+task.getCreateTime());
			System.out.println("任务委派人:"+task.getAssignee());
			System.out.println("任务流程实例Id:"+task.getProcessInstanceId());
		}
	}}

最后的查看任务方法也是有数据的。

说明就

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106137.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SHFileOperation操作[通俗易懂]

    SHFileOperation操作[通俗易懂]SHFileOperation操作源文件名支持多个文件,以/0间隔,所以末尾要用两个零结束WINCE下,用EVC

    2022年7月18日
    19
  • mybatis log plugin激活码【中文破解版】

    (mybatis log plugin激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    209
  • 把AutoEventWireup属性关闭

    把AutoEventWireup属性关闭1、关于AutoEventWireup属性的作用:,自动关联页面的Page_Load、Page_Init事件,好处就是不用再多写委托代码或重载代码了啦,坏处就是性能(听说的)和不直观性(影响菜鸟升级,“没见到事件关联它为什么会执行这段代码呢?”)。2、删除:(1)、在aspx页面一个个将“AutoEventWireup=true”改为“AutoEventWireup=false”了

    2022年5月28日
    35
  • Python(含PyCharm及配置)下载安装以及简单使用(Idea)「建议收藏」

    Python(含PyCharm及配置)下载安装以及简单使用(Idea)「建议收藏」下载Python官网下载地址:Python下载不同参数解释,小伙伴们根据自己情况进行下载即可(此处博主用的是3.7.3版本):–web-basedinstaller:在线安装。下载的是一个exe可执行程序,双击后,该程序自动下载安装文件进行安装。网络安装版,需联网–executableinstaller:程序安装。下载的是一个exe可执行程序,双击进行安装。本地安装,可执行程序(***)–embeddablezipfile:解压安装。下载的是一个压缩文件,解压后即表示安装完成。嵌入式版

    2022年5月31日
    39
  • STM32delay函数应用与说明[通俗易懂]

    STM32delay函数应用与说明[通俗易懂]STM32delay函数应用应用与说明CortexM4内核编程手册有关时钟系统的内容定时函数的实现delay_init函数delay_us函数对与32中的delay函数有很多中形式可以使用,这里提供一些自己使用遇到过的函数类型。CortexM4内核编程手册有关时钟系统的内容p230SysTicktimer(STK)Theprocessorhasa24-bitsystemtimer,SysTick,thatcountsdownfromthereloadvalu

    2022年6月2日
    69
  • 惠普p1106打印测试页_惠普p1566打印机说明书

    惠普p1106打印测试页_惠普p1566打印机说明书05惠普P1566打印设置与性能测试●惠普P1566打印设置与性能测试★惠普P1566主要的打印设置在打印速度测试开始之前,我们先来了解一下惠普P1566的打印设置。其打印首选项界面简洁,让用户很容易进行需要的设置,它的属性设置界面包括高级、纸张、效果、完成、服务,这5个选项页。下面我们对惠普P1566最主要的纸张/质量设置,以及详细的打印功能做进一步的了解。纸张设置界面惠普P1566的纸张设置界…

    2025年9月5日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号