Vue 3とbpmn.jsによるワークフロー図作成コンポーネントの活用

bpmn-vue-tempは、Vue 3およびbpmn.jsを基盤としたコンポーネントライブラリです。このライブラリを活用することで、ワークフロー図の描画および解析機能をWebアプリケーションに容易に実装できます。

インストール手順

プロジェクトにパッケージを追加します。

npm install bpmn-vue-temp --save

グローバル登録

アプリケーション全体でコンポーネントを利用可能にするため、エントリポイントで登録を行います。スタイルシートの読み込みも忘れずに行ってください。

import { createApp } from 'vue';
import App from './App.vue';
import BpmnVuePlugin from 'bpmn-vue-temp';
import 'bpmn-vue-temp/lib/style.css';

const app = createApp(App);
app.use(BpmnVuePlugin);
app.mount('#app');

コンポーネントの実装例

1. 基本的な使用方法

テンプレート内にコンポーネントを配置し、refを使用してインスタンスを操作します。

import { ref } from 'vue';
import { BpmnVue } from 'bpmn-vue-temp';

const designerRef = ref(null);

const handleElementSelection = (eventData) => {
  // eventDataには businessObject (業務オブジェクト) と shapeType (形状タイプ) が含まれます
  console.log('選択された要素:', eventData);
};

テンプレート側の記述は以下の通りです。

<template>
  <div class="canvas-container">
    <BpmnVue
      canvas-id="workflow-editor"
      ref="designerRef"
      @select:element="handleElementSelection"
    />
  </div>
</template>

2. カスタムフックを使用した実装

より柔軟な制御が必要な場合は、useBpmnフックを用いて手動で初期化することも可能です。

import { onMounted } from 'vue';
import { useBpmn } from 'bpmn-vue-temp';

const bpmnCore = useBpmn();

onMounted(() => {
  bpmnCore.initModeler({
    container: '#bpmn-canvas',
    additionalModules: {},
    moddleExtensions: {}
  });
});

コンポーネントのプロパティ

  • canvasId: キャンバスのDOM要素ID。
  • readonly: 読み取り専用モードの有効化。
  • options: モジュールや拡張機能のカスタム設定オブジェクト。
  • operations: ツールバー操作のカスタム配列。{ label, icon, action }の形式で指定します。デフォルトではXMLインポート/エクスポート、SVGエクスポート、ズーム等が含まれます。

提供されるAPIメソッド

コンポーネントのrefまたはフックを通じて、以下のAPIを利用できます。

// モデラーの初期化
initModeler(options);

// キャンバス上の全ノードを取得
getAllShapes();

// IDを指定してノードオブジェクトを取得
findShapeById(id);

// XMLデータの取得
retrieveXML();

// 要素のプロパティ更新
applyPropertyUpdate(targetElement, newProperties);

// 使用例: 条件式の更新
function updateCondition() {
    const moddleService = bpmnCore.getModdle();
    const expression = moddleService.create('bpmn:FormalExpression', {
      body: '新しい条件式',
    });
    
    const activeNode = bpmnCore.getActiveElement();
    bpmnCore.applyPropertyUpdate(activeNode.element, {
      conditionExpression: expression,
    });
}

// XML文字列から図を復元
loadDiagramXML(xmlString);

// XMLファイルとしてエクスポート
downloadXML();

// SVG画像としてエクスポート
downloadSVG();

// キャンバスのリセット
resetDiagram();

タグ: Vue3 bpmn.js BPMN Workflow frontend

5月25日 06:41 投稿