不要指望别人能帮你多少,人生事事物物都得靠自己。

一:简介

流程变量就是if(条件)中使用到的变量用于参与条件表达式的计算。

变量都是有作用域的,在程序中方法内部的变量是属于局部变量,方法外的变量属于全局变量,同样流程变量也分全局变量global(作用在整个流程实例范围)和本地变量local(作用在单个任务或者单个执行实例)。

二:流程变量设置时机

2.1 启动实例时设置为全局变量

runtimeService.startProcessInstanceByKey(key, map);

2.2 任务办理时设置变量

在完成任务时设置流程变量,该流程变量只有在该任务完成后其它结点才可使用该变量,它的作用域是整个流程实例,如果设置的流程变量的key在流程实例中已存在相同的名字则后设置的变量替换前边设置的变量。

String assingee = "张三";
Task task = taskService.createTaskQuery().processDefinitionKey(key).taskAssignee(assingee).singleResult();
if(task != null){//完成任务时为以后的节点设置流程变量的值taskService.complete(task.getId(),map);
}

2.3 通过流程实例设置变量

通过流程实例id设置全局变量,该流程实例必须未执行完成。executionId必须当前未结束的流程实例执行id,通常此id设置流程实例的id。也可以通runtimeService.getVariable()获取流程变量。

@Test
public void setGlobalVariableByExecutionId(){String executionId="2601";ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();RuntimeService runtimeService = processEngine.getRuntimeService();Evection evection = new Evection();evection.setNum(3d);
//      通过流程实例 id设置流程变量runtimeService.setVariable(executionId, "evection", evection);
//      一次设置多个值
//      runtimeService.setVariables(executionId, variables)
}

2.4 通过当前任务设置变量

@Test
public void setGlobalVariableByTaskId(){String taskId="1404";ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = processEngine.getTaskService();Evection evection = new Evection();evection.setNum(3);//通过任务设置流程变量taskService.setVariable(taskId, "evection", evection);//一次设置多个值 //taskService.setVariables(taskId, variables)
}

2.5 办理任务前设置局部变量

任务办理时设置local流程变量,当前运行的流程实例只能在该任务结束前使用,任务结束该变量无法在当前流程实例使用,可以通过查询历史任务查询。

//  设置local变量,作用域为该任务
Map<String, Object> variables = new HashMap<>();
// 设置单个
taskService.setVariableLocal(taskId, "xxx", evection);
// 设置多个
taskService.setVariablesLocal(taskId, variables);
taskService.complete(taskId);

三:条件分支

流程条件就是在连接线(sequenceFlow)增加一个Boolean类型的添加,当条件满足后就会走对应的任务。

  • 当有多个条件满足时:只要满足条件的都执行。
  • 当所有条件都不成立时:抛异常,流程走不下去报错。

public class ProcessVariableTest {@Testpublic void testCreateDBTable() {ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();System.out.println(processEngine);}@Testpublic void delopyBpmn() {ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();Deployment deploy = processEngine.getRepositoryService().createDeployment().addClasspathResource("bpmn/leave.bpmn").name("请假流程").deploy();// DeploymentEntity[id=1, name=请假流程]System.out.println(deploy);}@Testpublic void startProcessInstance() {Map<String, Object> assignees = new HashMap<>();assignees.put("proposer", "张三");assignees.put("pm", "狗经理");assignees.put("deptPM", "狗部门经理");assignees.put("hr", "狗人事");String businessKey = "1";ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey("LeaveProcess", businessKey, assignees);// processInstance.getId() = processInstance.getProcessInstanceId()System.out.println("实例Id:" + processInstance.getId());System.out.println("实例Id:" + processInstance.getProcessInstanceId());System.out.println("流程定义Id:" + processInstance.getProcessDefinitionId());}@Testpublic void testQueryRuTask() {ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();List<Task> list = processEngine.getTaskService().createTaskQuery().processDefinitionKey("LeaveProcess").taskAssignee("张三").list();System.out.println(list);}@Testpublic void completeTask() {ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = processEngine.getTaskService();Task task = taskService.createTaskQuery().processDefinitionKey("LeaveProcess").taskAssignee("张三").singleResult();if (task != null) {taskService.complete(task.getId());}}@Testpublic void testCompleteTask2() {ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = processEngine.getTaskService();Task task = taskService.createTaskQuery().processDefinitionKey("LeaveProcess").taskAssignee("狗经理").singleResult();// 设置流程变量Map<String, Object> variables = new HashMap<>();variables.put("day", 3);if (task != null) {taskService.complete(task.getId(), variables);}}
}

修改条件${day >= 3} 和 ${day >= 2},当day=5时两个条件都满足,两个任务都执行,所以部门经理和人事都需要审核。

修改条件${day >= 3} 和 ${day >= 2},当day=1时两个条件都不满足,报错不能继续流程org.activiti.engine.ActivitiException: No outgoing sequence flow of element 'pmApprove' could be selected for continuing the process

Activiti7工作流引擎:基础篇(七) 流程变量相关推荐

  1. Activiti7 工作流引擎入门

    Activiti7 工作流引擎入门 做课目的 一.适用人群: 普通人 不是每个人都能进入一线互联网大厂 BATJ 普通人,省城,软件公司,银行.政府做 二.适用项目:OA CRM ERP 系统 出差报 ...

  2. Java基础篇3——流程控制

    Java基础篇3--流程控制 1.顺序结构 正常代码的流程即是顺序流程 2.分支结构 2.1.if-else分支 if(条件表达式) {语句块1; } if(条件表达式) {语句块1; } else ...

  3. 工作流引擎Synchro Flow的流程度量

    2019独角兽企业重金招聘Python工程师标准>>> 度量基于联机分析处理(OLAP)的理念,具有灵活的流程分析功能.直观的数据操作和分析结果可视化表示等突出优点,从而使用户对基于 ...

  4. 《Activiti/Flowable  深入BPM工作流》-如何设置local流程变量?

    <Activiti/Flowable  深入BPM工作流>-如何设置local流程变量? 一. 问题:  1. 什么是local流程变量?     2. 如何设置local流程变量?   ...

  5. TensorFlow2.4 开发 基础篇① 张量和变量 (1)

         TensorFlow2.4 开发 基础篇① 张量和变量(Tensor) 文章会不断更新,喜欢的小伙伴可以帮博主点个赞哟("'▽'") 文章目录 前言 1. 变量 1.1 ...

  6. 学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot

    本篇学习笔记是观看黑马程序员Activiti7视频而得 Activiti7 一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是" ...

  7. Activiti7工作流引擎:基础篇(一) 简介与IDEA插件安装

    你不要一直不满他人,你应该一直检讨自己才对. 零:审批场景 对于请假流程我们有以下两种做法: 传统方式:写一个请假条,拿着请假条跑到项目经理那里签字,然后再拿着请假条去部门经理那里签字,然后再拿着请假 ...

  8. 菜鸟学习笔记:Java基础篇2(变量、运算符、流程控制语句、方法)

    菜鸟学习笔记:Java基础篇2 变量 基本概念 变量作用域 final关键字 运算符 算术运算符 比较运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 运算符优先级 Java三种流程控制语句 顺序 ...

  9. Activiti7工作流引擎-环境搭建及创建数据库

    第1章 什么是工作流 1.1工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是"使在多个参与者 之间按照某种预定义的规则自动进行传递文档.信息或任 ...

最新文章

  1. Google Brain团队最新视频介绍
  2. ftp服务器上传的文件打不开,ftp服务器文件有的上传不了
  3. 开发文档之 概要设计说明书 详细设计说明书 数据库设计说明书
  4. 计算机网络体系小知识
  5. 如何在 ASP.Net Core 中使用 MediatR
  6. fckeditor文件管理器添加查看、修改、删除文件功能[php]修正下载地址
  7. SQL中exists和in的区别
  8. Cmakelists 与gcc 调用so库文件,几个名词解释
  9. JavaScript数组-多维数组的困惑
  10. YUV 和 YUV420
  11. 大数据调度工具之Oozie
  12. 主析取范式和主合取范式
  13. 水平居中设置-定宽块状元素
  14. React官方状态管理库—— Recoil
  15. 给我一把利剑,待我重整山河
  16. silverlight beet - 动态设置Clip
  17. uboot环境下mmc操作_uboot mmc命令详解
  18. 【十八掌●武功篇】第十掌:Hive之基本语法
  19. 《俊红的数据分析之路》笔记
  20. mysql导入微信小程序云开发_微信小程序-云开发数据库上传json文件

热门文章

  1. 位、比特(bit)、字节(Byte)区别与关系
  2. git fetch学习之旅
  3. 干货分享:电脑无广告无弹窗的浏览器,这5款亲测干净好用
  4. 纪念杰克韦尔奇:职业经理人怎么做变革
  5. C函数中返回字符数组
  6. linux下设置定时执行脚本
  7. 001-SE-0011-网络编程
  8. mysql redis缓存配置_SpringMVC + MyBatis + Mysql + Redis(作为二级缓存) 配置
  9. vue中is属性搭配vuedraggable插件实现可拖动可视化大屏展示组件的自定义配置功能
  10. 编译运行Clipper报错以及解决