flowable04网关和变量
网关
- 排他网关
只会有一个出口,,每个出口的条件是互斥的 - 并行网关
多个任务同时执行,,并且多个任务同时执行完毕,,才会进入到下一个任务 - 包容网关
也叫兼容网关,,相容网关
包容网关可以根据具体的条件,,自动转换成排他网关,或者是并行网关,,意思就是满足条件就会走
流程变量
整个流程的变量,分为全局变量和本地变量, 全局变量就是所有地方都能查找到,,本地变量分 执行实例的本地变量 : 在这个执行实例上的节点,能看到这些变量
任务的本地变量: 在这个节点上能够看到的变量,,任务结束之后就会从ru的变量表中删掉
设置全局流程变量:(可以启动的时候设置,也可以通过执行实例设置,也可以通过用户任务节点设置)
public void test02(){// 启动的时候设置变量,,这个流程变量会被存入两个地方,,运行时的变量表,和历史变量表 act_ru_variableHashMap<String, Object> map = new HashMap<>();map.put("money",1000);map.put("days",10);map.put("reason","我要去玩");runtimeService.startProcessInstanceByKey("test-gateway",map);}
@Testpublic void test03(){String executionId = "57501";
// 获取指定流程实例的 变量Object money = runtimeService.getVariable(executionId, "money");System.out.println("money = " + money);Map<String, Object> variables = runtimeService.getVariables(executionId);for (String s : variables.keySet()) {System.out.println(s+":"+variables.get(s));}}
@Testpublic void test06(){List<Task> taskList = taskService.createTaskQuery().taskAssignee("zs").list();for (Task task : taskList) {System.out.println("task = " + task);// 也可以通过任务id 去查全局的流程变量Map<String, Object> variables = taskService.getVariables(task.getId());System.out.println("variables = " + variables);taskService.setVariable(task.getId(),"result","我不同意");Map<String, Object> variables02 = taskService.getVariables(task.getId());System.out.println("variables = " + variables02);// 完成任务的时候,,可以设置一个变量===》// 1.记录任务处理结果 2.传递数据给后续的节点 3,记录业务数据 4.流程结束时数据归档// 如果后面有网关,, 可以通过变量控制流程的走向// 多个审批结果汇总}}
设置本地的流程变量:
@Testpublic void test07(){Task task = taskService.createTaskQuery().taskAssignee("zs").singleResult();// 设置本地的流程变量,,,会携带task_id// 本地流程变量,,在完成任务之后,跟这个任务相关的流程变量就会被删掉(ACT_RU_VARIABLE表中)taskService.setVariableLocal(task.getId(),"username","cnm");}// 为执行实例设置本地变量 ===> 执行实例也能设置本地的变量,,,只有属于这条执行实例的 任务,,才能读到这些本地变量
设置临时变量: 就是不会存入数据库的变量==>在复杂的流程中,可能需要一些中间计算结果
@Testpublic void test10(){runtimeService.createProcessInstanceBuilder()// 设置临时变量,,在复杂的系统中,可能需要一些中间计算的结果.transientVariables(new HashMap<>()).start();// 完成任务的时候也可以设置一些临时变量Map<String, Object> transientVariables = new HashMap<>();Task task = taskService.createTaskQuery().taskAssignee("zs").singleResult();taskService.complete(task.getId(),null,transientVariables);}
