软件编程
位置:首页>> 软件编程>> java编程>> Spring activiti如何实现指定任务处理者

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
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com