首页IT科技bpmn.js flowable(Bpmn.js 自定义描述文件使用说明)

bpmn.js flowable(Bpmn.js 自定义描述文件使用说明)

时间2025-04-30 04:40:10分类IT科技浏览4250
导读:前言 在使用 bpmn-js 绘制流程图时,可能会存在需要开发者自己定义属性或者元素的情况,为了保证符合官方定义,对官方文档进行了汉化说明。以下说明基于个人理解,可能与真实作用有出入,希望大家指出不正确或者意义不明的地方,我好加以改正,谢谢!...

前言

在使用 bpmn-js 绘制流程图时            ,可能会存在需要开发者自己定义属性或者元素的情况                   ,为了保证符合官方定义       ,对官方文档进行了汉化说明             。以下说明基于个人理解         ,可能与真实作用有出入                  ,希望大家指出不正确或者意义不明的地方          ,我好加以改正      ,谢谢!

说明文件配置属性

原文见 bpmn 官方仓库 bpmn-io/moddle                   。

自定义说明文件demo

说明文件 SelfDescriptor.json

{ "name": "self", "uri": "https://self", "prefix": "se", "xml": { "tagAlias": "lowerCase" }, "types": [ { "name": "AttrOne", "superClass": [ "Element" ], "properties": [ { "name": "name", "type": "String", "isAttr": "true" }, { "name": "values", "type": "AttrOneProp", "isMany": true } ] }, { "name": "AttrOneProp", "superClass": [ "Element" ], "meta": { "allowedIn": [ "*" ] }, "properties": [ { "name": "propName", "type": "String", "isAttr": true }, { "name": "value", "type": "String", "isAttr": true } ] }, { "name": "AttrTwo", "superClass": [ "Element" ], "meta": { "allowedIn": [ "*" ] }, "properties": [ { "name": "value", "type": "String", "isBody": true } ] } ] }

使用

import $ from jquery; import BpmnModeler from bpmn-js/lib/Modeler; // 侧边栏 import propertiesPanelModule from bpmn-js-properties-panel; // camunda 侧边栏内容构建器 import propertiesProviderModule from bpmn-js-properties-panel/lib/provider/camunda; // camunda 属性解析文件 import camundaModdleDescriptor from camunda-bpmn-moddle/resources/camunda.json; // 自定义的属性解析文件 import SelfDescriptor from "./SelfDescriptor.json"; // 省略部分内容... // 初始化 modeler var bpmnModeler = new BpmnModeler({ container: canvas, propertiesPanel: { parent: #js-properties-panel }, additionalModules: [ propertiesPanelModule, propertiesProviderModule ], moddleExtensions: { // 使用引入的属性解析文件 camunda: camundaModdleDescriptor, self: SelfDescriptor } }); // 使用与创建自定义属性标签 bpmnModeler.on("element.click", function (event, eventObj) { const moddle = bpmnModeler.get("moddle"); // 自定义属性1 const attrOne = moddle.create("se:AttrOne", { name: "testAttrOne", values: [] }); // 自定义属性子属性 const attrOneProp = moddle.create("se:AttrOneProp", {propName: "propName1", value: "propValue1"}) // 自定义属性2 const attrTwo = moddle.create("se:AttrTwo", { value: "testAttrTwo" }) // 原生属性Properties const props = moddle.create("camunda:Properties", { values: [] }); // 原生属性Properties的子属性 const propItem = moddle.create("camunda:Property", { name: "原生子属性name", values: "原生子属性value" }); // 原生扩展属性数组 const extensions = moddle.create("bpmn:ExtensionElements", { values: [] }) // 开始节点插入原生属性 if (eventObj.element.type === "bpmn:StartEvent") { props.values.push(propItem); extensions.values.push(props); } // 任务节点插入多种属性 if (eventObj.element.type === "bpmn:Task") { props.values.push(propItem, propItem); attrOne.values.push(attrOneProp); extensions.values.push(props, attrOne, attrTwo); } // root插入自定义属性 if (eventObj.element.type === "bpmn:Process") { attrOne.values.push(attrOneProp, attrOneProp); extensions.values.push(attrOne); } bpmnModeler.get("modeling").updateProperties(eventObj.element, { extensionElements: extensions }); })

结果

只截取了流程相关的部分

<bpmn2:process id="Process_1" isExecutable="false"> <bpmn2:extensionElements> <se:attrOne name="testAttrOne"> <se:attrOneProp propName="propName1" value="propValue1" /> <se:attrOneProp propName="propName1" value="propValue1" /> </se:attrOne> </bpmn2:extensionElements> <bpmn2:startEvent id="StartEvent_1"> <bpmn2:extensionElements> <camunda:properties> <camunda:property name="原生子属性name" values="原生子属性value" /> </camunda:properties> </bpmn2:extensionElements> <bpmn2:outgoing>Flow_066c7c5</bpmn2:outgoing> </bpmn2:startEvent> <bpmn2:task id="Activity_0ghpzc3" name="1"> <bpmn2:extensionElements> <camunda:properties> <camunda:property name="原生子属性name" values="原生子属性value" /> <camunda:property name="原生子属性name" values="原生子属性value" /> </camunda:properties> <se:attrOne name="testAttrOne"> <se:attrOneProp propName="propName1" value="propValue1" /> </se:attrOne> <se:attrTwo>testAttrTwo</se:attrTwo> </bpmn2:extensionElements> <bpmn2:incoming>Flow_066c7c5</bpmn2:incoming> <bpmn2:outgoing>Flow_0qmpzc7</bpmn2:outgoing> </bpmn2:task> <bpmn2:sequenceFlow id="Flow_066c7c5" sourceRef="StartEvent_1" targetRef="Activity_0ghpzc3" /> <bpmn2:task id="Activity_1gm4zj6" name="2"> <bpmn2:extensionElements> <camunda:properties> <camunda:property name="原生子属性name" values="原生子属性value" /> <camunda:property name="原生子属性name" values="原生子属性value" /> </camunda:properties> <se:attrOne name="testAttrOne"> <se:attrOneProp propName="propName1" value="propValue1" /> </se:attrOne> <se:attrTwo>testAttrTwo</se:attrTwo> </bpmn2:extensionElements> <bpmn2:incoming>Flow_0qmpzc7</bpmn2:incoming> <bpmn2:outgoing>Flow_03hry06</bpmn2:outgoing> </bpmn2:task> <bpmn2:sequenceFlow id="Flow_0qmpzc7" sourceRef="Activity_0ghpzc3" targetRef="Activity_1gm4zj6" /> <bpmn2:task id="Activity_0ahhdt5" name="3"> <bpmn2:extensionElements> <camunda:properties> <camunda:property name="原生子属性name" values="原生子属性value" /> <camunda:property name="原生子属性name" values="原生子属性value" /> </camunda:properties> <se:attrOne name="testAttrOne"> <se:attrOneProp propName="propName1" value="propValue1" /> </se:attrOne> <se:attrTwo>testAttrTwo</se:attrTwo> </bpmn2:extensionElements> <bpmn2:incoming>Flow_03hry06</bpmn2:incoming> <bpmn2:outgoing>Flow_1h7pp7l</bpmn2:outgoing> </bpmn2:task> <bpmn2:sequenceFlow id="Flow_03hry06" sourceRef="Activity_1gm4zj6" targetRef="Activity_0ahhdt5" /> <bpmn2:endEvent id="Event_1eofx2i"> <bpmn2:incoming>Flow_1h7pp7l</bpmn2:incoming> </bpmn2:endEvent> <bpmn2:sequenceFlow id="Flow_1h7pp7l" sourceRef="Activity_0ahhdt5" targetRef="Event_1eofx2i" /> </bpmn2:process>

后记

由于工作需要(其实不是很需要)                  ,在公司项目的基础上开源了一个基于 bpmn-js + Vue 2.x + ElementUI 的一个流程编辑器 Bpmn Process Designer

预览地址 MiyueFE blog,

以上就是Bpmn.js 自定义描述文件使用说明的详细内容             ,更多关于Bpmn.js 自定义描述文件的资料请关注本站其它相关文章!

声明:本站所有文章   ,如无特殊说明或标注                  ,均为本站原创发布      。任何个人或组织                ,在未征得本站同意时,禁止复制            、盗用                   、采集       、发布本站内容到任何网站         、书籍等各类媒体平台         。如若本站内容侵犯了原著者的合法权益               ,可联系我们进行处理                   。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
vue–cli–service(Vue——initLifecycle【五】) imac启动盘制作(如何制作macOS Catalina启动盘 macOS Catalina启动盘制作教程)