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

二、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.xdnf.cn/news/18524.html

相关文章:

  • 【51单片机非精准延时演示来回流水灯效果】2022-11-10
  • Claude Code赋能企业级开发:外卖平台核心系统的智能化重构
  • n8n 键盘快捷键和控制
  • 【Canvas与徽章】中国制造金色玻璃光徽章
  • 生成模型 | 扩散模型损失函数公式推导
  • 复杂工况漏检率↓79%!陌讯多模态融合算法在智慧能源设备检测的落地实践
  • Python 版本与 package 版本兼容性检查方法
  • 【Linux系列】macOS(MacBook)上获取 MAC 地址
  • 内网穿透教程
  • React学习(十三)
  • Java 泛型 T、E、K、V、?、S、U、V
  • week4-[字符数组]字符统计
  • 详细介绍将 AList 搭建 WebDav 添加到 PotPlayer 专辑 的方法
  • 基于Python与Tkinter的校园点餐系统设计与实现
  • 单片机的输出模式推挽和开漏如何选择呢?
  • [新启航]白光干涉仪与激光干涉仪的区别及应用解析
  • 【typenum】 24 去除尾部零的特性(private.rs片段)
  • MERGE 语句在 Delta Lake 中的原子更新原理
  • nodejs 集成mongodb实现增删改查
  • Kubernetes相关问题集(四)
  • 什么是正态分布
  • B.30.01.1-Java并发编程及电商场景应用
  • Socket 编程预备
  • 软件测试从入门到精通:通用知识点+APP专项实战
  • 使用Screenpipe+本地大模型实现私人助手Agent
  • 某电器5G智慧工厂网络建设全解析
  • Linux学习:信号的保存
  • TypeReference 泛型的使用场景及具体使用流程
  • GEO优化服务商:AI时代数字经济的新引擎——解码行业发展与技术创新实践
  • 【Spring Boot】集成Redis超详细指南 Redis在Spring Boot中的应用场景