BPMN-JS使用用法介绍(bpmn.js的简单使用)

本文将从多个方面对BPMN-JS进行详细的阐述,介绍如何使用BPMN-JS实现流程建模、流程监控以及流程调优等操作。

一、BPMN-JS概述

BPMN-JS是一个基于JavaScript的BPMN 2.0流程建模工具库,可以通过BPMN-JS实现画流程图、流程部署等操作。BPMN-JS提供了一系列API来实现与BPMN 2.0元素进行交互,可以方便地将流程图嵌入到应用程序中。此外,BPMN-JS还支持将流程图导出为SVG、XML等格式。

二、流程建模

在使用BPMN-JS进行流程建模之前,需要在应用程序中引入BPMN-JS库。


npm install bpmn-js --save
// 或者
yarn add bpmn-js

引入BPMN-JS之后,就可以开始流程建模了。流程建模主要分为以下几个步骤:

1、创建BPMN-JS实例


import BpmnModeler from 'bpmn-js/lib/Modeler';

const bpmnModeler = new BpmnModeler({
  container: '#canvas',
  keyboard: {
    bindTo: window
  }
});

在创建BPMN-JS实例时,需要传入一个包含container属性的对象来指定流程图显示的位置。

2、新建一个流程图


bpmnModeler.createDiagram(function(err) {
  if (err) {
    console.error(err);
  } else {
    console.log('创建成功');
  }
});

createDiagram方法可以用来创建一个空的流程图。

3、添加模型元素


const modeling = bpmnModeler.get('modeling');
const elementFactory = bpmnModeler.get('elementFactory');
const startEvent = elementFactory.createShape({ type: 'bpmn:StartEvent' });

modeling.createShape(startEvent, { x: 100, y: 100 }, root);

在创建完空的流程图之后,就可以通过elementFactory来创建各种模型元素,并使用modeling的createShape方法再将其添加到流程图中。

4、导出流程图


bpmnModeler.saveXML(function(err, xml) {
  if (err) {
    console.error(err);
  } else {
    console.log(xml);
  }
});

使用saveXML方法可以将流程图导出为XML。

三、流程监控

除了可以进行流程建模,BPMN-JS还支持流程监控。流程监控主要是指对流程中各个节点的状态、执行信息等进行监控。

1、在流程图中添加监听事件


bpmnModeler.on('element.click', function(event) {
  console.log('点击了节点:', event.element.id);
});

通过添加element.click事件监控,可以对流程图中各个节点进行监听。

2、获取节点状态


const elementRegistry = bpmnModeler.get('elementRegistry');
const element = elementRegistry.get('TheElementID');

// 获取节点状态
console.log(element.businessObject.get('name'));

通过elementRegistry可以获取流程图中某个特定节点的状态信息。

3、流程实例跟踪


import BpmnViewer from 'bpmn-js/lib/Viewer';

const bpmnViewer = new BpmnViewer({
  container: '#canvas'
});

const xml = '...', // 从后台获取流程实例XML
    overlays = bpmnViewer.get('overlays');

bpmnViewer.importXML(xml, function(err) {
  if (err) {
    console.error(err);
  } else {
    bpmnViewer.get('canvas').zoom('fit-viewport');

    const elementRegistry = bpmnViewer.get('elementRegistry');

    // 更新流程实例中各个节点的状态
    // 可以根据后台返回的数据来设置每个节点的状态,下面是简单的示例
    elementRegistry.forEach(function(element) {
      const businessObject = element.businessObject,
          id = element.id;

      if (businessObject.$type === 'bpmn:Task') {
        const status = 'COMPLETED'; // 完成

        overlays.add(id, 'worklist', {
          position: { bottom: -10, right: -10 },
          html: '' + status + ''
        });
      }
    });
  }
});

可以通过BPMN-JS实现流程实例跟踪,通过get(‘overlays’)可以获取流程图上的覆盖层对象,在流程实例中可以通过设置覆盖层来标识各个节点的状态。

四、流程调优

流程调优是指对已建好的流程进行分析和优化。BPMN-JS提供了一些API来实现流程调优。

1、获取流程中所有的活动节点


const elementRegistry = bpmnModeler.get('elementRegistry'),
    elements = elementRegistry.filter(function(element) {
    return /bpmn:Task$/.test(element.type);
    });

可以通过正则表达式来过滤出流程图中所有的活动节点。

2、设置节点属性


const modeling = bpmnModeler.get('modeling');
const elementRegistry = bpmnModeler.get('elementRegistry');
const element = elementRegistry.get('TheElementID');

modeling.updateProperties(element, {
  'name': 'New name',
  // 设置节点属性
});

通过updateProperties方法可以修改某个节点的属性。

3、在流程中添加连接线


const elementRegistry = bpmnModeler.get('elementRegistry');
const source = elementRegistry.get('SourceElementID');
const target = elementRegistry.get('TargetElementID');

const connection = moddle.create('bpmn:SequenceFlow', {
  id: 'ConnectionID',
  sourceRef: source,
  targetRef: target
});

modeling.createConnection(source, target, connection);

可以通过createConnection方法在流程图中添加连接线。

五、总结

本文通过多个方面对BPMN-JS进行详细的阐述,介绍了如何使用BPMN-JS实现流程建模、流程监控以及流程调优等操作。使用BPMN-JS可以有效地简化流程建模、流程监控和流程调优等操作,帮助开发人员更快地实现业务功能。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平