欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring activiti如何实现指定任务处理者

程序员文章站 2022-08-27 13:07:19
指定委托那些办理者处理任务节点,也就是只有此办理者才有操作此节点的操作权限1、直接指定流程图配置实现:在流程图属性栏设置assignee属性值为任务的处理者流程图xml文件配置实现:在流程图对应的xm...

指定委托那些办理者处理任务节点,也就是只有此办理者才有操作此节点的操作权限

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。