100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 《Activiti/Flowable  深入BPM工作流》-如何设置local流程变量?

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

时间:2018-11-11 13:54:34

相关推荐

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

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

一. 问题:

1.什么是local流程变量?

2. 如何设置local流程变量?

3.Local变量设置后成功与否, 如何测试?

二. 详情

1.什么是local流程变量?

解答:流程变量默认作用域是一个流程实例(processInstance), 也可以是一个任务(task)或一个执行实例(execution). 这三个作用域流程实例的范围最大,成Global变量.

任务和执行实例仅仅是针对一个任务和一个执行实例范围,范围没有流程实例大,成为local变量.所以local流程变量是包含(一个任务或一个执行实例)

特点:

1. global变量中变量名不能重复. 设置相同名称的变量,后设置的值会覆盖前面的变量值.

2. Local变量名可以重复,也可以和global名相同. local变量由于在不同任务或不同的执行实例中, 作用域互不影响,变量名可以相同,没有影响.

// 办理任务时设置local流程变量@Testpublic void completTask() {//任务idString taskId = "";TaskService taskService = processEngine.getTaskService();// 定义流程变量Map<String, Object> variables = new HashMap<String, Object>();Holiday holiday = new Holiday ();holiday.setNum(3);// 定义流程变量Map<String, Object> variables = new HashMap<String, Object>();//变量名是holiday,变量值是holiday对象variables.put("holiday", holiday);// 设置local变量,作用域为该任务taskService. setVariablesLocal(tasked, variables );plete(taskId);}

2. 如何通过当前任务设置local变量?

解答: 具体实现code如下

@Testpublic void setLocalVariableByTaskId(){//当前待办任务idString taskId="1404";TaskService taskService = processEngine.getTaskService();Holiday holiday = new Holiday ();holiday.setNum(3);//通过任务设置流程变量taskService.setVariableLocal(taskId, "holiday", holiday);//一次设置多个值//taskService.setVariablesLocal(taskId, variables)}

注意: 任务id必须是当前任务id, act_ru_task中存在的.

3.Local变量设置后成功与否, 如何测试?

方法一:

local变量在任务结束后无法在当前流程实例中执行使用,如果后续的流程执行需要用到此变量则会报错.

方法二:

在部门经理审核,总经理审核,人事经理审核是设置local变量,可通过HistoryService查询每个历史任务时将流程变量的值查询出来

// 创建历史任务查询对象HistoricTaskInstanceQuery historicTaskInstanceQuery =historyService.createHistoricTaskInstanceQuery();// 查询结果包括 local变量historicTaskInstanceQuery.includeTaskLocalVariables();for (HistoricTaskInstance historicTaskInstance : list) {System.out.println("==============================");System.out.println(" 任 务 id : " +historicTaskInstance.getId());System.out.println(" 任 务 名 称 : " +historicTaskInstance.getName());System.out.println(" 任 务 负 责 人 : " +historicTaskInstance.getAssignee());System.out.println(" 任 务 local 变 量 : "+historicTaskInstance.getTaskLocalVariables());}

注意:查询历史流程变量,特别是查询 pojo 变量需要经过反序列化,不推荐使用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。