当前位置: 首页 > news >正文

二、BPMNJS简介

目录

一、BPMNJS

二、Diagram.js

三、bpmnjs与Diagram.js的关系

四、bpmnjs核心源码构成


一、BPMNJS

        现在市场上或者开源社区中大部分的流程引擎都是可视化操作,可视化操作可以提升工作效率,业务逻辑清晰,使之一目了然,如果一款工作流引擎没有可视化配置页面,那肯定是不合格的。那么如何可以实现流程配置可视化操作,以及流程协议规范化呢,那就需要用到bpmnjs。

        bpmnjs是一款前端实现遵循BPMN2.0协议的流程图的工具,用于在 Web浏览器中建模、渲染和编辑流程相关属性的工具库,它是基于Web流程建模工具的核心引擎。bpmnjs 最初由 Camunda 开发并开源,是其核心产品 Camunda Platform 中 Web 建模器(Camunda Modeler Web)的基础引擎。虽然与 Camunda 流程引擎紧密相关,但bpmnjs 本身并不依赖 Camunda 引擎。它是一个独立的库,可以用于任何需要 BPMN 可视化和建模的地方,生成的 BPMN 2.0 XML 可以被任何兼容 BPMN 2.0 的引擎解析和执行。

        通过它,我们就可以在前端实现流程的可视化配置。当然,现实中也有一部分工作流是不支持BPMN2.0协议的,或者是通过其他技术兼容BPMN2.0协议的,所以并不是所有实现流程配置可视化都要用bpmnjs,但是,bpmnjs是目前个人认为可以实现且最符合BPMN2.0协议中所规定的的所有元素的工具库,比如任务节点、网关、监听、事件等等,这些元素都已在bpmnjs中实现,比自己编写代码进行元素定义、渲染等要节约大部分时间,并且能有效减少代码错误等。

二、Diagram.js

        在这里为什么要介绍下Diagram.js,因为如果想了解bpmnjs的工作原理,首先需要介绍下Diagram.js。

        Diagram.js也是由Camunda 团队开发的轻量级、高度模块化的 JavaScript 库,专注于提供构建交互式图表编辑器所需的核心基础设施,比如实现 UML 编辑器、ER 图工具、自定义拓扑图工具等。以及提供通用的图表交互能力,比如画布渲染、拖拽、连线、缩放等。

        所以,Diagram.js像是一个画板,提供基础能力,让使用者可以在浏览器中实现图形渲染、元素拖拽与移动、连接线创建与重连、画布平移或缩放等。

三、bpmnjs与Diagram.js的关系

        通过对两个工具库的介绍,再通过以上截图,我们讲一下两者的关系。

        bpmnjs是用于对BPMN2.0协议中规定的所有元素的建模和渲染,比如上图中的任务、网关、事件等元素。

        Diagram.js是提供图表编辑基础能力的,比如画布的渲染、图形绘制、用户交互(拖拽、缩放、连线)等。

        所以,bpmnjs与Diagram.js是上下层关系,Diagram.js是底层,bpmnjs是上层实现,bpmnjs如果要实现对BPMN2.0协议中规定元素的创建与渲染,需要依赖Diagram.js提供的画布、图形渲染、拖拽、连接线等能力。

四、bpmnjs核心源码构成

bpmn-js/

├── lib/                   # 核心实现

│   ├── features/          # 功能模块(每个模块独立职责)

│   ├── model/             # BPMN 元模型与序列化

│   ├── draw/              # SVG 图形绘制

│   ├── viewer/            # 只读查看器实现

│   └── modeler/           # 建模器实现

├── assets/                # 图形资源(BPMN 图标)

├── test/                  # 测试套件

└── src/                   # 入口与公共API

http://www.dtcms.com/a/347716.html

相关文章:

  • share logic in core or in example
  • 【typenum】 23 倒序存储的无符号整数(private.rs片段)
  • Linux mount 命令
  • PyInstaller将.py文件转为exe,执行文件在不同的电脑出现字体大小不一致问题原因分析及解决办法
  • Spring:IOC(控制反转 )、DI(依赖注入 )、AOP(通知类型、事务、拦截器)
  • 主流.NET 平台的NuGet 生态正在积极拥抱 AOT
  • 【84页PPT】智慧方案某著名企业某集团协同OA整体解决方案(附下载方式)
  • MySQL索引原理与优化全解析
  • 【每天一个知识点】训推一体机
  • 13.Shell脚本修炼手册---玩转 CASE 语句(应用场景与实践技巧)
  • GitHub Actions workflow最佳实践
  • 提问:温度不改变 logits 与概率的排名,为何还会影响模型输出?
  • Linux 进程间通信之System V 共享内存
  • 深入探讨集成学习:Bagging与Boosting的核心原理与实践
  • RAG系统开发中的12大痛点及应对策略
  • SVG.js 一个轻量且强大的图形库
  • Sql server的行转列
  • word——表格跨页显示表头
  • PCL点云库入门(第24讲)——PCL库点云特征之NARF特征描述 Normal Aligned Radial Feature(NARF)
  • VGG改进(4):融合Linear Attention的高效CNN设计与实践
  • 遥感机器学习入门实战教程|Sklearn案例⑧:评估指标(metrics)全解析
  • 机器学习案例——预测矿物类型(数据处理部分)
  • 如何在wsl2+Ubuntu中安装Eclipse
  • 第七章 利用Direct3D绘制几何体
  • 一个简洁的 C++ 日志模块实现
  • AI + 医疗:智能诊断如何突破技术瓶颈,走进基层医院?
  • Azure Kubernetes Service (AKS)
  • 在Linux环境中为Jupyter Lab安装Node.js环境
  • `sudo apt update` 总是失败
  • 【KO】前端面试六