1. 程式人生 > 程式設計 >Spring activiti如何實現指定任務處理者

Spring 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());
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。