Activiti7-流程变量

  • Post author:
  • Post category:其他


流程变量

流程变量的作用域

设置流程定义的key为myEvection2

使用流程变量

定义好流程变量后,就可以在整个流程定义中使用这些流程变量了。例如可以在某些任务属性如

assignee上使用${assignee},或者在某些连线上使用${day<3}。

Activiti中可以使用UEL表达式来使用这些流程变量。UEL表达式可以直接获取一个变量的值,可以

计算一个Boolean结果的表达式,还可以直接使用某些对象的属性。例如对于之前创建的请假流

程,如果要实现3天以内部门经理审核,3天以上增加总经理审核,可以做如下调整:

1.出差天数大于等于3天连线条件,必须总经理审批

2.出差天数小于3天连线条件,直接部门经理就可以审批

设置Global流程变量

在流程定义中使用到了流程变量,就需要在后台JAVA代码中设置对应的流程变量。

实际上在流程执行的很多过程中都可以设计自流程变量。

设置一个3天的实例:

设置一个2天的实例:

查询整体的任务:

备注:taskAssignee(assingee)是单独查某个的任务

李四完成任务:

由于2天和3天的请假都是李四发起的,是list,改下代码,需要李四完成多个任务

查询整体的任务:

王经理完成任务:

结果报错,估计是num不能识别,修改下

改完后要重新走一遍了

王经理审批:

杨总经理审批:

审批完查询,所有流程结束:

以上测试通过!!!

参考:


学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot_努力敲代码买猪脚啃的博客-CSDN博客_activiti bpmn visualizer


设置Local流程变量

比较简单,不测试了


代码参考:

package com.nanjing;

import com.nanjing.pojo.Evection;
import org.activiti.engine.*;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.task.Task;
import org.junit.Test;

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

/**
 * 测试流程变量
 */
public class TestVariables {
    /**
     * 流程部署
     */
    @Test
    public void testDeployment(){
//        1、创建ProcessEngine
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        2、获取RepositoryServcie
        RepositoryService repositoryService = processEngine.getRepositoryService();
//        3、使用service进行流程的部署,定义一个流程的名字,把bpmn和png部署到数据中
        Deployment deploy = repositoryService.createDeployment()
                .name("员工请假-variables")
                .addClasspathResource("leave8.bpmn20.xml")
                .deploy();
//        4、输出部署信息
        System.out.println("流程部署id="+deploy.getId());
        System.out.println("流程部署名字="+deploy.getName());
    }

    /**
     * 启动流程的时候设置流程变量
     * 设置流程变量num
     * 设置任务负责人
     */
    @Test
    public void testStartProcess(){
//        获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        获取RunTimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();
//        流程定义的Key
        String key = "myEvection8";
//        流程变量的map
        Map<String,Object> variables = new HashMap<>();
//        设置流程变量
        Evection evection = new Evection();
//        设置出差日期(请假天数)
        evection.setNum(3d);
//        把流程变量的pojo放入map
        variables.put("evection",evection);
//        设定任务的负责人
        variables.put("assignee0","李四");
        variables.put("assignee1","王经理");
        variables.put("assignee2","杨总经理");
//        启动流程
        runtimeService.startProcessInstanceByKey(key,variables);
    }

    @Test
    public void queryTask(){
//        流程定义的Key
        String key = "myEvection8";
//        任务负责人
        String assingee = "李四";

        //String assingee = "张财务";
        //        获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        获取taskservice
        TaskService taskService = processEngine.getTaskService();
//        查询任务
        final List<Task> tasks = taskService.createTaskQuery()
                .processDefinitionKey(key)
//                .taskAssignee(assingee)
                .list();
        for(Task task:tasks){
            //     根据任务id来   完成任务
            System.out.println(task.getId());
            System.out.println(task.getName());
            System.out.println(task.getAssignee());
        }

    }
    /**
     * 完成个人任务
     */
    @Test
    public void completTask(){
//        流程定义的Key
        String key = "myEvection8";
//        任务负责人
        String assingee = "杨总经理";

//        String assingee = "张财务";
        //        获取流程引擎
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//        获取taskservice
        TaskService taskService = processEngine.getTaskService();
//        查询任务
        List<Task> tasks = taskService.createTaskQuery()
                .processDefinitionKey(key)
                .taskAssignee(assingee).list();
        //     根据任务id来   完成任务
        for(Task task:tasks){
            taskService.complete(task.getId());
        }


    }
}



版权声明:本文为ZHOU_VIP原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。