从0到1搭建一个属于自己的工作流站点——筑基篇(bpmn.js、Next.js)

623 阅读4分钟

往期回顾

  1. 从0到1搭建一个属于自己的工作流站点——入门篇(bpmn.js、Next.js) - 掘金 (juejin.cn)

(如果您正巧因为首页推荐的功能点进此文章,由衷地建议您先回顾往期内容,这将有助您接下来的阅读体验。)

3FA07%X}EF%9@$KV3G8ZVA.png

前言

在上一篇文章里,我们了解了BPMN基本元素的概念,并亲自动手尝试,遵循流程配置规范,构建了一个简单的审批流程。

在本篇文章中,我们将学习有关 流程编辑器 的内容,我会介绍它的结构、组成它的各部分的功能,通俗地来说,本篇文章帮助大家解决👇这样一个问题👇:

“什么” 是什么,“什么” 怎么用。

(P.S. 本文是本系列文章的第二篇,因此重心还是在于理论知识的铺垫,大家比较关心的 动手写代码 的内容,将会在第三篇以及后续文章出现,敬请期待~)

话不多说,让我们直接进入正题吧~

chufa.jpg

总览说明

这里我将以原始的流程设计器作为介绍的对象,细心的掘友可能会发现展示的样子和第一篇里展示的样子有出入,这是因为bpmn-js支持我们对它的二次改造,可以做很多个性化的定制,涉及到很多代码上的修改,考虑到知识接收的循序渐进,因此我们先从最原始的状态来介绍。

image.png

组件结构

image.png

Palette(左侧工具栏)

image.png

提供了一系列的可交互的图形元素和工具,这些元素和工具可以用于在 BPMN 图表中创建新的流程元素。palette 类似于其他图形编辑工具中的工具栏,但它提供的是与 BPMN 相关的图元。我们可以看到在工具栏中,有一道“——”将其分隔成了上下两个部分,上半部分是工具,如:

  • Activate the hand tool: 激活抓手工具
  • Activate the lasso tool: 激活套索工具
  • Activate the create/remove space tool: 激活创建/删除空间工具
  • Activate the global connect tool: 激活全局连接工具

下半部分是图元,如:

  • Create StartEvent: 创建开始事件
  • Create IntermediateThrowEvent/BoundaryEvent: 创建中间抛出事件/边界事件
  • Create EndEvent: 创建结束事件
  • Create Gateway: 创建网关
  • Create Task: 创建任务
  • Create Expanded Sub-Process: 创建扩展的子流程
  • Create Data Object Reference: 创建数据对象引用
  • Create Data Store Reference: 创建数据库引用
  • Create Pool/Participants: 创建 池/参与者
  • Create Group: 创建组

鼠标悬浮在图标上,会显示相关的描述,比如将鼠标悬浮在「开始事件」上,显示了“Create Start Event”。

动画掘金bpmn.gif

鼠标点击图标后,移动鼠标,会发现鼠标的光标变成了BPMN元素的样子

确定好合适的位置后,点击鼠标,则会在鼠标所在的坐标处,创建对应的BPMN元素。

动画掘金bpmn2.gif

Context-pad(元素悬浮窗)

image.png

鼠标单击位于画布上的元素,会展示 元素悬浮窗 ,我们可以通过此窗口,做一下便捷的操作:

  1. 添加新元素:

    • 可以从 context-pad 中添加新的元素到流程图中,例如添加新的活动、事件、网关等。
  2. 删除元素:

    • context-pad 中删除所选元素。
  3. 连接元素:

    • context-pad 中添加新的流程线(Sequence Flow)来连接两个元素。

Properties-panel(右侧属性栏)

用于显示和编辑 BPMN 元素属性的面板。当用户在流程图中选择一个元素时,Properties-panel 会自动出现,显示所选元素的属性列表,以此查看元素的详细信息。

image.png

还可以通过这个面板来编辑元素的属性:

动画掘金bpmn3.gif

结语

本系列的第一篇文章和第二篇文章罗列了技术栈的概念,介绍了什么是流程图,一张规范的流程图里都有哪些元素,配置流程图的编辑器都具备哪些功能,以及如何使用流程编辑器去配置一张流程图。

主要目的是为从来没接触过bpmn-js的同学建立认知基础。那么接下来就要往技术实现的方向上进行讨论了。

  • Palette在目前业务上用不到那么多图元,为了避免用户误操作,可否删除左侧工具栏的部分图元?
  • Properties-panel属性栏的样式不好看,期望修改成设计师给的设计稿的样子,是否能够支持?
  • 配置完毕后的流程图如何生效,前后端的约定是什么?
  • 为了方便配置,节省时间,期望在画布中能够具备默认的简易流程,如何导入?

那么,就让我们带着这些问题,在本系列的后续文章中再见吧~

image.png