You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

适配Camunda Modeler插件:双击CallActivity打开对应BPMN图新标签页

问题描述

我想给Camunda Modeler的Tooltip插件做适配,实现双击指定CallActivity时,在新标签页打开它关联的BPMN图。比如双击名为“My Process”的CallActivity,就打开对应Called Element属性值为文件名的BPMN图,所有XML文件都在同一目录下。我用的是Camunda Modeler Platform,之前试过bpmn-io库的importXML方法,但文档没覆盖这个场景,也没找到在Modeler里新增标签页的方法。下面是我写的部分代码,求帮忙补充:

'use strict';
var $ = require('jquery');
var _ = require('lodash');

function TooltipInfoService(eventBus, overlays, elementRegistry, editorActions) {

    // 注册'toggleTooltipInfos'事件
     editorActions.register({
        toggleTooltipInfos: function () {
        toggleTooltipInfos();
       }
     });

  // 绑定双击事件
  eventBus.on('element.dblclick', function (e) { _.defer(function () { dblclick(e); }); });

  }

/**
* 双击处理函数
*/
function dblclick(e) {

    var type = e.element.businessObject.$type;

    if (type == 'bpmn:CallActivity') 
    {
      // 这里需要添加打开对应BPMN图的代码
    }

}
解决方案

要在Camunda Modeler里打开新标签页加载关联BPMN文件,你需要利用Modeler内部的app对象来访问文件打开能力,而非bpmn-io的importXML(后者仅能将XML加载到当前编辑器,无法新建标签)。

修改你的dblclick函数如下:

/**
* 双击处理函数
*/
function dblclick(e) {
    var element = e.element;
    var bo = element.businessObject;

    if (bo.$type !== 'bpmn:CallActivity') {
        return;
    }

    // 获取Called Element属性值(即目标BPMN文件名)
    var calledElement = bo.calledElement;
    if (!calledElement) {
        // 未设置Called Element时直接返回
        return;
    }

    // 确保文件名带.bpmn后缀
    var targetFileName = calledElement.endsWith('.bpmn') ? calledElement : `${calledElement}.bpmn`;

    try {
        // 获取当前编辑器路径,拼接目标文件的完整路径
        var currentEditor = app.current.get('editor');
        var currentFilePath = currentEditor.get('path');
        var targetFilePath = require('path').join(require('path').dirname(currentFilePath), targetFileName);

        // 在新标签页打开目标BPMN文件
        currentEditor.openPath(targetFilePath);
    } catch (error) {
        console.error('打开关联BPMN文件失败:', error);
        // 可在此添加用户提示逻辑,比如弹出错误提示框
    }
}

关键说明

  • 依赖Modeler内部全局对象app:Camunda Modeler暴露了app对象,通过它可获取当前编辑器实例,进而调用openPath方法在新标签页打开文件。
  • 路径拼接:借助Node.js的path模块,从当前文件所在目录拼接目标文件的完整路径,确保能正确定位同目录下的BPMN文件。
  • 异常处理:添加错误捕获逻辑,避免因文件不存在或路径错误导致插件崩溃。

内容的提问来源于stack exchange,提问作者Andres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 02:35:38