网站解析后显示在建设中,网站建设 全网营销,wordpress悬浮小工具的插件,开发游戏app接上一篇#xff1a; 第12篇#xff1a;Flowable-BPMN操作流程之用户任务UserTask https://blog.csdn.net/weixin_40816738/article/details/102902596 文章目录一、背景二、原理三、实现方案3.1. 流程是否完成功能3.2. 完成流程图3.3. 控制器入口四、验证测试4.1. 创建流程4… 接上一篇 第12篇Flowable-BPMN操作流程之用户任务UserTask https://blog.csdn.net/weixin_40816738/article/details/102902596 文章目录一、背景二、原理三、实现方案3.1. 流程是否完成功能3.2. 完成流程图3.3. 控制器入口四、验证测试4.1. 创建流程4.2. 启动流程4.3. 调用查看流程接口一、背景
流程启动后为了方便我们查看流程的进展Flowable提供了流程图可以直观的查看流程的进展本节我们主要研究流程图呈现的相关内容可以直接显示流程的进展。
二、原理
流程的一些进展是活动Activity和连线组成的我们如果能够找到流程经过了哪些节点给节点画上边框的话就可以直观的看到流程的进展信息。
三、实现方案
Flowable的HistoryService提供了历史的查询服务可以查询经过了哪些节点进程的流程生成器ProcessDiagramGenerator可以动态生成各种流程图最后我们使用HttpServletResponse返回一个图像以供显示。
3.1. 流程是否完成功能
流程完后使用历史服务查询流程未结束使用运行时服务查询所以我们先提供一个流程是否完成的API如下 Overridepublic boolean isFinished(String processInstanceId) {return historyService.createHistoricProcessInstanceQuery().finished().processInstanceId(processInstanceId).count() 0;}
3.2. 完成流程图
流程通过使用ProcessDiagramGenerator完成流程图显示具体实现如下
Overridepublic void genProcessDiagram(HttpServletResponse httpServletResponse, String processId) {/*** 获得当前活动的节点*/String processDefinitionId ;if (this.isFinished(processId)) {// 如果流程已经结束则得到结束节点HistoricProcessInstance pi historyService.createHistoricProcessInstanceQuery().processInstanceId(processId).singleResult();processDefinitionIdpi.getProcessDefinitionId();} else {// 如果流程没有结束则取当前活动节点// 根据流程实例ID获得当前处于活动状态的ActivityId合集ProcessInstance pi runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult();processDefinitionIdpi.getProcessDefinitionId();}ListString highLightedActivitis new ArrayListString();/*** 获得活动的节点*/ListHistoricActivityInstance highLightedActivitList historyService.createHistoricActivityInstanceQuery().processInstanceId(processId).orderByHistoricActivityInstanceStartTime().asc().list();for(HistoricActivityInstance tempActivity : highLightedActivitList){String activityId tempActivity.getActivityId();highLightedActivitis.add(activityId);}ListString flows new ArrayList();//获取流程图BpmnModel bpmnModel repositoryService.getBpmnModel(processDefinitionId);ProcessEngineConfiguration engconf processEngine.getProcessEngineConfiguration();ProcessDiagramGenerator diagramGenerator engconf.getProcessDiagramGenerator();InputStream in diagramGenerator.generateDiagram(bpmnModel, bmp, highLightedActivitis, flows, engconf.getActivityFontName(),engconf.getLabelFontName(), engconf.getAnnotationFontName(), engconf.getClassLoader(), 1.0, true);OutputStream out null;byte[] buf new byte[1024];int legth 0;try {out httpServletResponse.getOutputStream();while ((legth in.read(buf)) ! -1) {out.write(buf, 0, legth);}} catch (IOException e) {log.error(操作异常,e);} finally {IOUtils.closeQuietly(out);IOUtils.closeQuietly(in);}}
3.3. 控制器入口
RequestMapping(value processDiagram)public void genProcessDiagram(HttpServletResponse httpServletResponse, String processId) throws Exception {flowService.genProcessDiagram(httpServletResponse,processId);}四、验证测试
4.1. 创建流程
http://localhost:8989/flow/create4.2. 启动流程
流程启动链接http://localhost:8989/flow/start?processKeytest_bpmn 如下图所示
4.3. 调用查看流程接口
http://localhost:8989/flow/processDiagram?processId8d3fec54-ffb9-11e9-b9a1-f8a2d6bfea5a 其中ProcessId为上图中显示的内容最终结果如下图所示
项目源码地址 https://gitlab.com/gb-heima/flowablestudy/tree/master/flowablelech13 码云地址https://gitee.com/gb_90/flowable-study/tree/master/flowablelech13 下一篇 第14篇Flowable-BPMN操作流程之任务完成 https://blog.csdn.net/weixin_40816738/article/details/102902647