ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(process_name, map);
文章插图
taskService.complete(taskId, map);
获取未结束的流程实例变量
前面有提及到流程变量这个概念,那么我们想在流程还未结束的情况下,在任何时候都能获取到流程变量,可以使用下面的操作:
Map= .();
获取流程历史节点
List activities = historyService.createHistoricActivityInstanceQuery().processInstanceId(processId).activityType("userTask").finished().orderByHistoricActivityInstanceEndTime().desc().list();
获取流程的历史节点列表,一般应用在提供给用户查看流程的审批历史上 。
流程跳转任意节点
假设你现在的节点走错了想要退回去上一个节点,或者这个节点你想走到某一个节点,你可以调用一个跳转任意节点的方式实现 。
runtimeService.createChangeActivityStateBuilder().processInstanceId(task.getProcessInstanceId()).moveActivityIdTo("approve1", "apply").changeState();
BpmnModel bpmnModel = repositoryService.getBpmnModel(pi.getProcessDefinitionId());ProcessEngineConfiguration engconf = processEngine.getProcessEngineConfiguration();ProcessDiagramGenerator diagramGenerator = engconf.getProcessDiagramGenerator();InputStream in = diagramGenerator.generateDiagram(bpmnModel,"bmp", activityIds,flows,"宋体","宋体","宋体",null,1.0);
流程图部分代码片段,框架自带的根据流程定义图生成的流程实例图,对当前正在进行的节点标红,可以很好的嵌入到前端给用户展示 。
搭建
搭建整理
角色权限
接上述待办列表提及到的角色绑定关系,这里来详细介绍如何做到查询待办可以只让当前操作人看到 。
工作流的流程节点上是有用户和用户组的概念的,那么我们在流程画图的时候需要先提前指定该节点是由用户组操作还是由用户操作,这里的用户组其实说的就是“一群人“可以完成这个节点的操作,如何代表”一群人“,那么你需要有一个key值去映射多用户的关系 。而在节点指定的是用户,那么就只有这个用户可以操作 。
在实际的项目中,我们会有自己的一套体系,那么我们可以根据这套体系去对接工作流中的节点权限,所谓节点权限就是指这个节点处于当前操作的情况下有哪些用户可以去操作 。
首先,如果你实际的项目中是有一套权限体系的,那么需要看你是根据权限来还是根据角色来,因为一个权限可以对应多个用户,一个角色也可以对应多个用户 。本人当时是根据角色code去对接的,你可以理解为一个角色的一个唯一标识 。
示例:
这里的“”是一个流程变量的一个key,只要在调用流程发起的时候传入一个map映射一个用户名,那么流程在运行的时候就可以根据流程变量解析出用户,动态地将用户指定到节点上 。当然,:这里也可以直接指定一个写死的用户名,那么这个节点就只有这个用户能够操作了
总结
有几个地方需要注意,也是我自身亲身经历总结出来的:
在整合工作流框架上你需要考虑一下自己是否也需要有一套持久层去记录一下节点的流转,如果你的流程设计较为复杂,对于数据存取现有的的api不能很好的支持操作,那么你需要另外建立几个数据表去记录节点的流转,方便数据存取;如果你的流程本身就依照的规范去设计,那么你大可使用的api去操作数据 。
- 三 Linux 网络驱动-MAC、PHY层驱动框架
- 黑猫带你学UFS协议第1篇:全网最全UFS协议中文详讲,这份学习框架图
- 花书-卷积神经网络
- 基于thinkphp5.1框架搭建OAuth2.0服务端
- 【独立版】基于ThinkPHP框架开发的智慧表单事务流程CRM系统
- 一 [Python3][django] 后端框架django学习
- 前端框架三巨头年度走势对比:Vue 增长率最高
- 前端框架三巨头:React仍是老大,Vue 增长率最高
- 超越 Spring,Spring Boot 跃居为 Java 最强后端框架!
- python接口自动化8-unittest框架使用