Activiti5 流程变量设置
//变量和整个流程关联,不能先重复参数,从表ACT_RU_VARIABLE和ACT_HI_VRINST查看 this.taskService.setVariable(taskId,variables) //变量和流程的任务节点关联,从表ACT_HI_VRINST查看 this.taskService.setVariableLocal(taskId,variables)
参考:http://tylanbin.tk/record/201402
使用Activiti的人应该都会发现 一个问题,就是在高度自由的变量存储方式中,不做特殊操作时,所有的变量都会只跟流程实例(历史)进行关联,但act_ru_variable和 act_hi_varinst是有TASK_ID_这么一列的,利用它,将存储的变量和流程的任务节点关联,会大大方便我们对流程的扩展(比如一些自定义 的业务数据),这里记录一下笔者研究的过程及使用方法。
首先,我们常用的任务完成方式无外乎以下两种:
1、使用FormService中的submitTaskFormData(String taskId, Map<String,String> properties)方法
Map<String, String> map = new HashMap<String, String>(); // 填表 for (FormProperty formProperty : taskFormData.getFormProperties()) { if (formProperty.isWritable()) { String name = formProperty.getId(); map.put(name, request.getParameter(name)); } } // 自定义值存储测试 map.put("test", "testVal"); // 提交用户定义的表单,同时也会完成该任务 formService.submitTaskFormData(taskId, map);
这样在表单提交后(变量存储),该任务也随之完成。
2、使用TaskService中的complete(String taskId, Map<String,Object> variables)方法
Map<String, Object> map = new HashMap<String, Object>(); // 填表 for (FormProperty formProperty : taskFormData.getFormProperties()) { if (formProperty.isWritable()) { String name = formProperty.getId(); map.put(name, request.getParameter(name)); } } // 自定义值存储测试 map.put("test", "testVal"); // 完成该任务 taskService.complete(taskId, map);
这样是另一种完成任务的方式。
但是,我们可以查看数据库,无论是第一种还是第二种,act_ru_variable(act_hi_varinst)表的TASK_ID_字段全部为空,这样是无法将test的值与当前任务关联起来的,test的值仍然属于这个流程。
通过阅读API和测试,我们在第二种方式complete之前,调用setVariableLocal或setVariablesLocal即可达到目的。
// 存储特殊的与任务关联的变量值 taskService.setVariableLocal(taskId, "test", "testVal"); taskService.complete(taskId, map);
这样的话,我们在流程完成之后,通过使用org.activiti.engine.history中的HistoricVariableInstanceQuery即可完成对某个流程,某个任务的特殊变量的查询操作,以完成一些自定义的特殊业务。
// 测试查询 List<HistoricTaskInstance> listOfTask = historyService.createHistoricTaskInstanceQuery().processDefinitionKey(key).list(); List<HistoricVariableInstance> listOfVar = null; for (HistoricTaskInstance hti : listOfTask) { System.out.println(hti.getName() + "-" + hti.getId()); listOfVar = historyService.createHistoricVariableInstanceQuery().taskId(hti.getId()).list(); for (HistoricVariableInstance hvi : listOfVar) { System.out.println("\t" + hvi.getId() + "-" + hvi.getVariableName() + "-" + hvi.getValue()); } }
相关推荐
Activiti 学习笔记五:流程变量
Activiti5Activiti5
Activiti5视频教程 百度网盘地址 还有资料
activiti5工作流官方文档汉化版activiti5工作流官方文档汉化版
activiti5数据库表结构,activiti5数据库表结构activiti5数据库表结构
Activiti5学习笔记
Activiti5 下 Activiti Modeler 汉化配置文件 stencilset.json 建议先备份原文件,之后替换即可
包括:Activiti5的10分钟入门指南(转载);Activiti5学习笔记;Activiti5与SSH的整合笔记。
结合eclipse的截图 该文档详细的描述了工作流引擎Activiti5的使用说明
ssh 整合 activiti5 的 demo 是Maven项目,刚接触activiti 的可以参考下..
activiti没有撤回,由于业务的需求需要实现撤回,在参考别人代码后以两种方式实现了任意节点的跳转。代码真实可用,如有问题可联系我 第一种方式: 1、获取当前节点,获取跳转节点 2、获取节点的所有流出流向,把...
该系统功能强大,该系统基于Activiti5工作流编写的财务审批系统,该系统可以进行二次开发
工作流 实例 activiti 5 工作流的部署 运行 历史查询 流程图 实例介绍
此项目为springmvc、Mybatis、EHcache、maven、Spring security3、activiti5工作流的整合 是一个基于数据库的权限管理demo项目、使用mysql数据库 项目运行前需要构建maven私服 而且有些jar包私服中肯定没有,需要...
Springboot2整合Activiti5设计器,包括代码和指南,笔者使用的Springboot版本为2.0.3 Release,activiti版本为5.22.0,JDK1.8。
1.用spring4、activiti5、hibernate搭建的空框架,里面的activiti有部署测试代码 2.直接可以使用该框架进行自己的业务开发了 3.里面还包含了sh框架用来测试的库表脚本和activiti5的SQL脚本
04 - Activiti流程变量 1.流程变量的概念 2.使用TaskService设置和获取流程变量 3.局部流程变量 4.使用RuntimeService设置和获取流程变量 5.启动流程的时候设置流程变量 6.完成任务的时候设置流程变量 05 - ...
activiti 5 用户手册 技术文档 教程
activiti入门教程-基于Activiti5工作流实战企业协同OA办公系统.pdf
activiti的jar包