bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具

03-29 1721阅读 0评论

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

bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具,bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,管理,第1张
(图片来源网络,侵删)

bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具

什么是工作流引擎?

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

bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具

完整的工作流周期如上:

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

    BPMN是什么?

    BPMN是Business 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来绘制和展示流程图。

    bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具,bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,管理,第4张
    (图片来源网络,侵删)

    安装

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

    $ npm i --save bpmn-js 

    展示流程图

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

    import BpmnViewer from 'bpmn-js'
    import { onMounted } from 'vue'
    onMounted(() => {
      // the diagram you are going to display
      const bpmnXML: string = `
    Flow_0jdcl54Flow_0jdcl54Flow_1ol0ntkFlow_1ol0ntk
    `
      const viewer = new BpmnViewer({
        container: '#bpmnCanvas',
      })
      viewer
        .importXML(bpmnXML)
        .then((result) => {
          const { warnings } = result
          console.log('success !', warnings)
          viewer.get('canvas').zoom('fit-viewport')
        })
        .catch((err) => {
          const { warnings, message } = err
          console.log('something went wrong:', warnings, message)
        })
    })
    
    
      
        测试页面
        
      
    

    展示结果如下:

    bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具

    如上,需要注意的是:

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

    流程编辑器

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

    bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具,bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具,词库加载错误:未能找到文件“C:\Users\Administrator\Desktop\火车头9.8破解版\Configuration\Dict_Stopwords.txt”。,使用,我们,管理,第6张
    (图片来源网络,侵删)
    $ 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
    
    import { BpmnView } from '../../components'
    
    
      
        
      
    
    

    bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具


免责声明
本网站所收集的部分公开资料来源于AI生成和互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
评论列表 (暂无评论,1721人围观)

还没有评论,来说两句吧...

目录[+]