bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具
创始人
2025-01-08 16:33:35
0

bpmn.js是由开源工作流引擎camunda内部组织BPMN.IO组织开发的一款基于BPMN 2.0的工作流展示、编辑的web端工具库。由于工作流引擎activiti、flowable、camunda属于同宗分流,其工作流定义格式大致相同,所以我们可以使用bpmn.js完美融合其中任一工作流引擎。

什么是工作流引擎?

这里引用咖啡兔在《Activiti实战》一书中对于工作流的描述:工作流(Work Flow)引擎被广泛应用于各种信息化系统中,将原本散乱甚至混乱的业务梳理后制定成业务规范流程,进而约束业务的规范化处理和运转。需求人员、开发人员共同协作制定了符合BPMN 2.0规范的流程定义,之后将其部署到工作流引擎中,由它自动驱动业务流程的进行。

完整的工作流周期如上:

  • 定义:收集业务需求并转化为流程定义。
  • 发布:在系统管理(平台)中发布流程定义。
  • 执行:体的流程引擎按照事先定义的流程处理路线以任务驱动的方式执行业务流程。
  • 监控:办理任务的同时收集每个任务(Task)的结果,然后根据结果做出相应处理。
  • 优化:根据整个流程的运行过程结果分析问题的根源,然后在此基础上进一步改进,并再次开始一个新的周期。

BPMN是什么?

BPMNBusiness Process Modeling Notation的简写,中文含义是业务流程管理,是一套达成企业各种业务环节整合的全面管理模式。是由BPMN标准组织发布的,其第一版BPMN 1.0规范于2004年5月发布。经过多年的改进新的规范BPMN 2.0于2011年发布。而bpmn.js则是一款由BPMN.IO组织基于BPMN 2.0开发的一款前端开发工具集。

bpmn.js的官网对其定位也是“View and edit BPMN 2.0 diagrams in the browser.”,如下介绍如何在vue3中使用bpmn.j来绘制和展示流程图。

安装

我使用的是vue3接入bpmn.js,可以通过npm对齐进行包管理,需要注意的bpmn.js目前尚未支持typescript,所以开发过程中可能会爆红,直接忽略即可。

$ npm i --save bpmn-js 

展示流程图

bpmn支持使用读取xml文件通过xml文件反解析生成对应的svg组合的方式生成流程图。如下为一个简单的Web展示流程图的样式。

  

展示结果如下:

如上,需要注意的是:

  1. bpmn-js是通过挂载元素实现canvas绘制的,需要在元素加载后进行创建操作。
  2. 导入的xml数据为txt文本数据

流程编辑器

bpmn-js提供 BpmnModeler用于实现流程编辑器的绘制工作。编辑器支持基础流程组件的绘制,同时也可以根据需要自行进行客制化组件的开发。流程编辑器除了主编辑模块还需要右侧的属性板用于配置组件属性等相关信息。

$ npm i --save bpmn-js-properties-panel  camunda-bpmn-moddle

通过将其使用tsx封装,在vue文件中直接调用使用,以便于后期的扩展和自定义组件信息。如下为创建自定义组件 bpmn.tsx

import { defineComponent, markRaw, onMounted } from 'vue' import type { ExtractPublicPropTypes } from 'vue'  // bpmn相关引入 import 'bpmn-js/dist/assets/diagram-js.css' // 左边工具栏以及编辑节点的样式 import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css' import BpmnModeler from 'bpmn-js/lib/Modeler'  // bpmn-js-properties-panel相关 import 'bpmn-js-properties-panel/dist/assets/bpmn-js-properties-panel.css' import propertiesPanelModule from 'bpmn-js-properties-panel' import propertiesProviderModule from 'bpmn-js-properties-panel/lib/provider/camunda' import camundaModdleDescriptor from 'camunda-bpmn-moddle/resources/camunda'  import './bpmn.css'   const bpmnViewProps = {   data: {     type: String,   }, }  export type BpmnViewProps = ExtractPublicPropTypes  const BpmnView = defineComponent((props: BpmnViewProps, context) => {   onMounted(() => {     const containerEl = document.getElementById('container')     const bpmnModeler = markRaw(       new BpmnModeler({         container: containerEl,         // 添加控制板         propertiesPanel: {           parent: '#js-properties-panel',         },         // 右侧属性面板         additionalModules: [propertiesPanelModule, propertiesProviderModule, translateModule],         moddleExtensions: {           camunda: camundaModdleDescriptor,         },       }),     )     bpmnModeler.createDiagram(() => {       bpmnModeler.get('canvas').zoom('fit-viewport')     })   })    return () => {     return (       
) } }) export default BpmnView

组件创建完成后只需在Vue中进行引用即可:

// main.vue     

相关内容

热门资讯

透视了解!德普之星透视辅助,h... 透视了解!德普之星透视辅助,hhpkoer辅助挂是真的吗,指南书教程(有挂详情)-哔哩哔哩1、下载好...
第二分钟app!兴动游戏辅助,... 您好,小闲川南宜宾辅助这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054】很多玩...
透视有挂!hhpoker有没有... 透视有挂!hhpoker有没有辅助挂,wepoker破解版内购,积累教程(有人有挂)-哔哩哔哩1、h...
九分钟开挂!德普之星透视挂,哥... 九分钟开挂!德普之星透视挂,哥哥打大a辅助工具,必胜教程-2026最新版本1、哥哥打大a辅助工具ai...
第二分钟工具!阿拉斗牌辅助视频... 您好,阿拉斗牌辅助视频这款游戏可以开挂的,确实是有挂的,需要了解加去威信【485275054】很多玩...
透视肯定!aapoker脚本怎... 透视肯定!aapoker脚本怎么用,wpk控制牌是真的吗,方案教程(证实有挂)-哔哩哔哩1、wpk控...
第9分钟开挂!川娱竞技有挂透视... 第9分钟开挂!川娱竞技有挂透视脚本,微信小程序微乐房间怎么开挂,揭秘攻略-2026最新版本亲,关键说...
第七分钟方法!金州水鱼挂图片,... 第七分钟方法!金州水鱼挂图片,胡乐辅助脚本,果然真的有挂(有挂辅助)-哔哩哔哩1、打开软件启动之后找...
透视游戏!wepoker有没有... 透视游戏!wepoker有没有挂,hhpoker辅助软件,阶段教程(有挂方针)-哔哩哔哩1、hhpo...
第四分钟开挂!大当家辅助脚本a... 第四分钟开挂!大当家辅助脚本app,胡乐辅助脚本,曝光教程-2026最新版本大当家辅助脚本app辅助...