activiti指定任务处理者

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