接上一篇:
第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();processDefinitionId=pi.getProcessDefinitionId();} else {// 如果流程没有结束,则取当前活动节点// 根据流程实例ID获得当前处于活动状态的ActivityId合集ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult();processDefinitionId=pi.getProcessDefinitionId();}List<String> highLightedActivitis = new ArrayList<String>();/*** 获得活动的节点*/List<HistoricActivityInstance> highLightedActivitList =  historyService.createHistoricActivityInstanceQuery().processInstanceId(processId).orderByHistoricActivityInstanceStartTime().asc().list();for(HistoricActivityInstance tempActivity : highLightedActivitList){String activityId = tempActivity.getActivityId();highLightedActivitis.add(activityId);}List<String> 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/create

4.2. 启动流程

流程启动链接:http://localhost:8989/flow/start?processKey=test_bpmn,
如下图所示:

4.3. 调用查看流程接口

http://localhost:8989/flow/processDiagram?processId=8d3fec54-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

第13篇: Flowable-BPMN操作流程之流程进展查看之流程图相关推荐

  1. Flowable深入浅出-13 Flowable-BPMN操作流程之流程进展查看之流程图

    13 Flowable-BPMN操作流程之流程进展查看之流程图 背景 原理 实现方案 验证 代码下载 背景 流程启动后,为了方便我们查看流程的进展,Flowable提供了流程图可以直观的查看流程的进展 ...

  2. 第12篇:Flowable-BPMN操作流程之用户任务UserTask

    接上一篇: 第11篇:Flowable-BPMN部署常见问题没有对ACT_RE_PROCDEF表进行插入>操作 https://blog.csdn.net/weixin_40816738/art ...

  3. 第14篇:Flowable-BPMN操作流程之任务完成

    接上一篇: 第13篇: Flowable-BPMN操作流程之流程进展查看之流程图 https://blog.csdn.net/weixin_40816738/article/details/10290 ...

  4. 第15篇: Flowable-BPMN操作流程之排他网关

    接上一篇: 第14篇:Flowable-BPMN操作流程之任务完成 https://blog.csdn.net/weixin_40816738/article/details/102902647 文章 ...

  5. 学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot

    本篇学习笔记是观看黑马程序员Activiti7视频而得 Activiti7 一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是" ...

  6. Flowable高级篇 - Flowable表结构

    Flowable中文手册 一.flowable表结构 数据库表命名规则: ACT_RE_*:其中"RE"表示repository(存储)的意思,是RepositoryService ...

  7. flowable工作流简单请假流程,自定义完成的流程图表颜色字体以及连接线的颜色字体。

    效果图 代码 1.bpmn文件ExpenseProcess.bpmn20.xml(通过可视化工具生成[非常熟悉也可以手动编写]) <?xml version="1.0" en ...

  8. 【微信小程序控制硬件 第13篇】安信可B站直播学习总结,微信小程序MQTT远程控制ESP8266 NodeMCU,谈谈微信生态那些事;

    [微信小程序控制硬件第1篇 ] 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! [微信小程序控制硬件第2篇 ] 开始微信小程序之旅,导入小程序Mqtt客户 ...

  9. 【综合类型第 13 篇】在 Sublime Text 上如何卸载插件

    这是[综合类型第 13 篇],如果觉得有用的话,欢迎关注专栏. 在 Sublime 上卸载插件还是很简单的,这里我以卸载汉化插件 ChineseLocalizations 为例,流程如下. 第一步 在 ...

最新文章

  1. R语言ggplot2可视化设置不同的图像主题(theme):使用各种不同的主题(theme)可视化数据、单的黑白主题theme_bw主题(theme)、默认的主题(theme)可视化数据
  2. 《C语言及程序设计》实践参考——水仙花数
  3. Androidx ViewPager+Fragment 懒加载
  4. 先进先出算法_结构与算法(02):队列和栈结构
  5. Windows系统USB转CDC串口驱动限制说明
  6. 写出表格的结构html,一个面试题,根据json结构生成html表格
  7. DataTemplate——数据模板的一个典型例子
  8. js闭包原理与例子[转]
  9. linux exec操作文件描述符
  10. my97Date如何多选日期且无重复日期
  11. Rust: codewars的DNA to RNA Conversion
  12. 如何写好科研论文2021秋期末考答案|研究生网课期末考答案|学堂在线|清华大学高飞飞
  13. windows 10 应用商店无法下载安装应用的解决
  14. apk一键脱壳工具_一键新机!强大的抹机王来了!
  15. 谈一谈百度 科大讯飞 云知声的语音合成功能
  16. [C语言编程入门]完数的判断
  17. matlab 中偏微分符号,一阶、二阶偏微分方程符号运算
  18. [转帖]ABAQUS学习和开发浅谈 [原创]
  19. 简单版的约瑟夫环问题编程:清除隔壁编号的
  20. PowerBI账户免费注册

热门文章

  1. mysql 5.5 替换字符_MySQL replace函数替换字符串语句的用法
  2. 运行第一个node.js文件
  3. hdu1176 免费馅饼 动态规划 二维数组实现
  4. Hbase Compaction 队列数量较大分析
  5. PCL “(”:“::”右边的非法标记 和 E2512 功能测试宏的参数必须是简单标识符
  6. Cloudera Manager 术语和架构
  7. 降本增效利器!趣头条Spark Remote Shuffle Service最佳实践
  8. 阿里云发布OAMKubernetes标准实现与核心依赖库
  9. 节省50%部署时间的5大KS8服务
  10. Sentinel 1.7.0 发布,支持 Envoy 集群流量控制