Activiti流程引擎 - 流程参数

activiti参数有两种,和任务相关的任务参数,和流程相关的流程参数
所有参数存放在act_ru_variable、act_hi_varinst表中,其中act_ru_variable相当于临时表,当任务完成或者删除后,参数数据不在存在,仅存在历史表中,
所以在设置我的已办任务时,要从历史表中获取参数信息,因为为已办时,任务已经完成。运行表中已经不存在数据。
一、任务参数:
1.参数设置
a.全局参数
参数的作用域在整个流程中,流程结束或删除,参数消失。
//设置单个参数
1).taskService.setVariable(String taskId, String parameKey, Object parameValue);
taskId:任务id
parameKey:参数名
parameValue:参数值
例:
Task task = taskService.newTask(taskId);
taskService.saveTask(task);
taskService.setVariable(taskId, "name", "孙悟空");
//设置多个参数
2).taskService.setVariables(String taskId, Map<String, Object> parameMap);
taskId:任务id
parameMap:参数
例:
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "孙悟空");
map.put("age", 500);
Task task = taskService.newTask(taskId);
taskService.saveTask(task);
taskService.setVariables(taskId, map);
b.局部参数
参数的作用域仅在任务中,任务删除或者完成,参数消失。
3).taskService.setVariableLocal(String taskId, String parameKey, Object parameValue);
taskService.setVariablesLocal(String taskId, Map<String, Object> parameMap);
例子与全局参数相同
2.参数获取
每个设置参数的方法都对应相应的get方法获取参数,如
taskService.getVariable(String taskId, String parameKey);
其中getVariable()方法可以获取局部参数,getVariableLocal()方法不能获取全局参数。
值得注意的是,1.因为参数作用域,所以任务参数使用全局方式设置参数时,可可以当做流程参数使用。
2.如果任务是通过流程定义获取的,那么setVariable()方法设置参数时,taskId不会记录到数据库中,如果是通过new出来的task,是可以绑定taskId
记录到数据中。
前面提到任务完成后运行时数据表中的参数会被删除,所以在获取我的已办列表时获取参数时使用如下方法
 

List<HistoricTaskInstance> haveDoneList = ProcessUtils.getHaveDone(empCode);
            if(ListUtils.isNotEmpty(haveDoneList)){
                for(HistoricTaskInstance his : haveDoneList){
                    String taskId = his.getId();
                    List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().taskId(taskId).list();
                    if(ListUtils.isNotEmpty(list)){
                        for(HistoricVariableInstance hisV : list){
                            if("indexDate".equals(hisV.getVariableName())){
                                //TODO
                            }
                            if("orgCode".equals(hisV.getVariableName())){
                                //TODO
                            }
                            if("orgName".equals(hisV.getVariableName())){
                                //TODO
                            }
                        }
                    }
                }
            }

二、流程参数
流程参数的设置,和获取方式与任务参数大同小异,不过需要流程id
示例:

Execution execution = runtimeService.createExecutionQuery().processInstanceId(tempTask.getProcessInstanceId()).singleResult();
                    runtimeService.setVariable(execution.getId(), "startTaskId", empCode);


获取:

String startTaskId = (String) runtimeService.getVariable(ProcessUtils.getExecutionId(processInstanceId), "startTaskId");

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值