如何将bpmn-js与Electron结合:打造跨平台桌面端流程建模应用完整教程

【免费下载链接】bpmn-js A BPMN 2.0 rendering toolkit and web modeler. 【免费下载链接】bpmn-js 项目地址: https://gitcode.com/gh_mirrors/bp/bpmn-js

bpmn-js是一个功能强大的BPMN 2.0渲染工具包和Web建模器,通过与Electron结合,我们可以将其转化为强大的跨平台桌面应用。本教程将详细介绍如何实现这一整合,让你快速掌握桌面端流程建模应用的开发方法。

准备工作:环境搭建与依赖安装

在开始之前,确保你的开发环境中已安装Node.js和npm。首先,克隆bpmn-js仓库:

git clone https://gitcode.com/gh_mirrors/bp/bpmn-js
cd bpmn-js

接下来,安装项目基础依赖:

npm install

由于bpmn-js本身不包含Electron依赖,我们需要手动添加Electron相关包:

npm install electron electron-builder --save-dev

项目配置:创建Electron主进程文件

在项目根目录下创建Electron主进程文件main.js

const { app, BrowserWindow } = require('electron');
const path = require('path');

function createWindow() {
  const mainWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: false
    }
  });

  // 加载bpmn-js的演示页面
  mainWindow.loadFile(path.join(__dirname, 'examples/simple.html'));
  
  // 打开开发者工具
  mainWindow.webContents.openDevTools();
}

app.whenReady().then(() => {
  createWindow();
  
  app.on('activate', function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit();
});

集成bpmn-js到Electron应用

创建一个简单的HTML页面examples/simple.html,集成bpmn-js:

<!DOCTYPE html>
<html>
<head>
  <title>Electron + bpmn-js 流程建模工具</title>
  <link rel="stylesheet" href="../assets/bpmn-js.css">
  <style>
    body {
      height: 100vh;
      margin: 0;
      display: flex;
      flex-direction: column;
    }
    #canvas {
      flex: 1;
      border: 1px solid #ccc;
    }
  </style>
</head>
<body>
  <div id="canvas"></div>

  <script src="../dist/bpmn-modeler.development.js"></script>
  <script>
    // 初始化bpmn-js模型器
    const modeler = new BpmnJS({
      container: '#canvas',
      keyboard: { bindTo: document }
    });

    // 加载示例BPMN文件
    modeler.importXML(`
      <?xml version="1.0" encoding="UTF-8"?>
      <bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL"
        xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
        xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
        xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd"
        id="sample-diagram">
        <bpmn2:process id="Process_1" isExecutable="false">
          <bpmn2:startEvent id="StartEvent_1"/>
        </bpmn2:process>
        <bpmndi:BPMNDiagram id="BPMNDiagram_1">
          <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">
            <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
              <dc:Bounds height="36.0" width="36.0" x="173.0" y="102.0"/>
            </bpmndi:BPMNShape>
          </bpmndi:BPMNPlane>
        </bpmndi:BPMNDiagram>
      </bpmn2:definitions>
    `).then(function() {
      console.log('BPMN diagram imported');
    }).catch(function(err) {
      console.error('Error importing BPMN diagram', err);
    });
  </script>
</body>
</html>

配置package.json文件

修改package.json文件,添加Electron启动脚本和打包配置:

{
  "scripts": {
    "start": "electron .",
    "package": "electron-builder"
  },
  "build": {
    "appId": "com.example.bpmn-js-electron",
    "productName": "BPMN Modeler",
    "directories": {
      "output": "dist-electron"
    },
    "win": {
      "target": "nsis"
    },
    "mac": {
      "target": "dmg"
    },
    "linux": {
      "target": "deb"
    }
  }
}

运行与测试应用

现在你可以启动应用进行测试:

npm start

你将看到一个Electron窗口,其中包含bpmn-js的建模界面。你可以从左侧工具栏拖放元素,创建自己的BPMN流程 diagram。

bpmn-js流程建模界面

打包应用

当应用开发完成后,可以使用以下命令打包为桌面应用:

npm run package

打包完成后,你将在dist-electron目录下找到针对不同操作系统的安装文件。

高级功能:文件操作与持久化

为了使应用更加实用,我们可以添加文件保存和打开功能。修改main.js,添加文件对话框支持:

const { dialog } = require('electron');
const fs = require('fs');

// 在createWindow函数中添加菜单
const { Menu } = require('electron');

const template = [
  {
    label: '文件',
    submenu: [
      {
        label: '打开',
        click: async () => {
          const { filePaths } = await dialog.showOpenDialog({
            filters: [{ name: 'BPMN Files', extensions: ['bpmn'] }]
          });
          if (filePaths.length > 0) {
            const content = fs.readFileSync(filePaths[0], 'utf8');
            mainWindow.webContents.send('load-bpmn', content);
          }
        }
      },
      {
        label: '保存',
        click: async () => {
          const content = await mainWindow.webContents.executeJavaScript('modeler.getXML()');
          const { filePath } = await dialog.showSaveDialog({
            filters: [{ name: 'BPMN Files', extensions: ['bpmn'] }]
          });
          if (filePath) {
            fs.writeFileSync(filePath, content.xml);
          }
        }
      }
    ]
  }
];

const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);

在前端页面中添加相应的事件监听:

// 在simple.html的script标签中添加
ipcRenderer.on('load-bpmn', (event, content) => {
  modeler.importXML(content);
});

总结与扩展

通过本教程,你已经学会了如何将bpmn-js与Electron结合,创建跨平台的桌面端流程建模应用。这个基础应用可以进一步扩展,添加更多功能,如:

  • 集成属性面板,允许编辑元素属性
  • 添加撤销/重做功能
  • 实现协作编辑功能
  • 导出为图片或PDF格式

bpmn-js提供了丰富的API,你可以通过查阅官方文档docs/project/SETUP.md了解更多高级用法。现在,你可以开始构建自己的BPMN建模桌面应用了!

【免费下载链接】bpmn-js A BPMN 2.0 rendering toolkit and web modeler. 【免费下载链接】bpmn-js 项目地址: https://gitcode.com/gh_mirrors/bp/bpmn-js

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐