13 Flowable-BPMN操作流程之流程进展查看之流程图

  • 背景
  • 原理
  • 实现方案
  • 验证
  • 代码下载

背景

流程启动后,为了方便我们查看流程的进展,Flowable提供了流程图可以直观的查看流程的进展,本节我们主要研究流程图呈现的相关内容,可以直接显示流程的进展。

原理

流程的一些进展是活动Activity和连线组成的,我们如果能够找到流程经过了哪些节点,给节点画上边框的话就可以直观的看到流程的进展信息。

实现方案

Flowable的HistoryService提供了历史的查询服务,可以查询经过了哪些节点,进程的流程生成器ProcessDiagramGenerator,可以动态生成各种流程图,最后我们使用HttpServletResponse返回一个图像以供显示。

  1. 流程是否完成功能
    流程完后使用历史服务查询,流程未结束使用运行时服务查询,所以我们先提供一个流程是否完成的API,如下:
 @Overridepublic boolean isFinished(String processInstanceId) {return historyService.createHistoricProcessInstanceQuery().finished().processInstanceId(processInstanceId).count() > 0;}
  1. 流程通过使用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);}}
  1. 控制器入口:
@RequestMapping(value = "processDiagram")public void genProcessDiagram(HttpServletResponse httpServletResponse, String processId) throws Exception {flowService.genProcessDiagram(httpServletResponse,processId);}

验证

  • 启动流程,输入上期的流程启动链接:http://localhost:8989/flow/start?processKey=test_bpmn,如下图所示:
  • 调用查看流程接口:http://localhost:8989/flow/processDiagram?processId=6683050b-1a57-11e9-90d8-00155d030a00,其中ProcessId为上图中显示的内容,最终结果如下图所示:

    注意:如果是PNG格式那么输出的是背景色是黑色,如果连接线上有字不容易看清楚,具体效果如下图:

代码下载

下载地址如下:https://download.csdn.net/download/houyj1986/10924371

Flowable深入浅出-13 Flowable-BPMN操作流程之流程进展查看之流程图相关推荐

  1. 第13篇: Flowable-BPMN操作流程之流程进展查看之流程图

    接上一篇: 第12篇:Flowable-BPMN操作流程之用户任务UserTask https://blog.csdn.net/weixin_40816738/article/details/1029 ...

  2. Flowable深入浅出-1 Flowable简介

    1 Flowable简介 什么是BPMN 什么是Flowable Flowable官网.开源社区 Flowable流程示例 版权 什么是BPMN 先来看下百度百科的定义: 由BPMI(The Busi ...

  3. flowable实战(十五)关于流程设计器 bpmn.js与vue的整合

    一.前言: 由于flowable本身带的Moder风格实在与前端页面风格不一样,同时由于Modeler采用Angular.js写的,改造起来相对有一定的难度,所以打算换成bpmn.js当成流程设计器. ...

  4. Flowable 6.6.0 BPMN用户指南 -10 流程实例迁移 - 10.1 简单示例

    Flowable 6.6.0 用户指南相关文档下载 BPMN用户指南 第一部分 - 中文PDF精编版 BPMN用户指南 第二部分 - 中文PDF精编版 BPMN用户指南 第三部分 - 中文PDF精编版 ...

  5. Flowable 6.6.0 BPMN用户指南 - (5)Spring Boot - 5.8 Flowable应用属性

    Flowable 6.6.0 用户指南相关文档下载 BPMN用户指南 第一部分 - 中文PDF精编版 BPMN用户指南 第二部分 - 中文PDF精编版 BPMN用户指南 第三部分 - 中文PDF精编版 ...

  6. 《Activiti/Flowable  深入BPM工作流》-什么是流程变量?

               <Activiti/Flowable  深入BPM工作流>-什么是流程变量? 一. 问题:         1. 什么是流程变量?        2. 什么是glob ...

  7. Flowable高级篇 - Flowable表结构

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

  8. 《Flowable基础二 Flowable是什么》

    2.1. Flowable是什么? Flowable是一个使用Java编写的轻量级业务流程引擎.Flowable流程引擎让你可以部署BPMN 2.0流程定义(用于定义流程的行业XML标准).创建这些流 ...

  9. Flowable工作流之Flowable UI画工作流程图

    目录 1. `Flowable` 简介 2. 绘制工作流程图 2.1. `Flowable UI` 的安装部署 2.2. 启动服务 2.3. 用户管理 2.4. 工作流程效果图 2.5. 绘制工作流程 ...

最新文章

  1. GT Transceiver的复位与初始化(2)CPLL复位以及QPLL复位
  2. linux shell mv 文件 文件夹移动重命名 命令
  3. DataFrame 删除与增减行列
  4. python3网络爬虫(4):python3安装Scrapy
  5. 全局eslint不生效的处理
  6. Spring Boot 2应用程序和OAuth 2 –传统方法
  7. Linux文件系统性能测试工具fdtree和iozone
  8. Python创建cvs文件,包含标签和图片数据
  9. 视频版ImageNet?快手搞了一场用户兴趣建模大赛 | 附前三名干货
  10. 工作难找,朋友却一口气拿了5份大厂offer,他是怎么做到的?
  11. windows下eclipse模拟运行apk
  12. php更改二维数组的键,学习猿地-php如何修改二维数组的键名
  13. mysql odbc连接池_Java Mysql连接池配置和案例分析--超时异常和处理
  14. 精品手机看片神器电影网址导航网站
  15. 如何扩展计算机c盘的控件,电脑C盘空间不足,怎么把c盘空间可以扩大
  16. iChart--组件定制
  17. android wear5.0,Android Wear安卓5.0正式到来
  18. 小程序“头脑王者” 因违规被微信下架整改 小程序不可逾越的红线
  19. 【Matlab元胞自动机】元胞自动机双边教室疏散【含源码 1208期】
  20. 计算机ip怎么换路由器,路由器怎么换ip地址

热门文章

  1. vue-baidu-map 个性化地图
  2. Jmeter操作手册
  3. Tanzu Mission Controle 图文并茂
  4. 网站SEO优化中友情链接起到什么作用
  5. Ubuntu 12.04不能在华硕电脑上安装解决办法
  6. 牛客S2第12场:音符共鸣
  7. Windows 7的77条小知识
  8. Vuex中的mutations属性详解
  9. Python对图像进行分块及复原
  10. web网页设计实例作业 ——中国民间年画 (5页) 大学生简单个人静态HTML网页设计作品 DIV布局个人介绍网页模板代码