当前位置: 首页 > news >正文

logicflow 操作xml文件 为bpmn:serviceTask标签里存在title匹配的内容后添加指定标签内容。

logicflow 操作xml文件 为bpmn:serviceTask标签里存在title匹配的内容后添加指定标签内容。
bpmn文档:https://tkjohn.github.io/flowable-userguide/#bpmn20
logicflow文档:https://site.logic-flow.cn/tutorial/about

export var intermediateCatchFunction = (xmlString) => {// 创建 DOMParser 实例const parser = new DOMParser();// 解析 XML 字符串const xmlDoc = parser.parseFromString(xmlString, "text/xml");// 查找所有 bpmn:serviceTask 标签const serviceTasks = xmlDoc.getElementsByTagName('bpmn:serviceTask');// 遍历所有 bpmn:serviceTask 标签for (let i = 0; i < serviceTasks.length; i++) {const task = serviceTasks[i];const title = task.getAttribute('flowable:title');// 封装创建事件和信号定义的函数function createEventAndSignal(id, name, signalRef) {const lineBreakBefore = xmlDoc.createTextNode('\t\n');const lineBreakAfter = xmlDoc.createTextNode('\t\n');// 创建 intermediateCatchEvent 标签const intermediateCatchEvent = xmlDoc.createElement('bpmn:intermediateCatchEvent');intermediateCatchEvent.setAttribute('id', id);intermediateCatchEvent.setAttribute('name', name);// 创建 signalEventDefinition 标签const signalEventDefinition = xmlDoc.createElement('bpmn:signalEventDefinition');signalEventDefinition.setAttribute('signalRef', signalRef);// 将 signalEventDefinition 插入到 intermediateCatchEvent 中intermediateCatchEvent.appendChild(signalEventDefinition);// 在找到的标签后插入新标签if (task.nextSibling) {task.parentNode.insertBefore(lineBreakBefore, task.nextSibling);task.parentNode.insertBefore(intermediateCatchEvent, task.nextSibling.nextSibling);task.parentNode.insertBefore(lineBreakAfter, task.nextSibling.nextSibling.nextSibling);} else {task.parentNode.appendChild(lineBreakBefore);task.parentNode.appendChild(intermediateCatchEvent);task.parentNode.appendChild(lineBreakAfter);}const definitionsElement = xmlDoc.getElementsByTagName('bpmn:definitions')[0];const newSignalEventDefinition = xmlDoc.createElement('bpmn:signal');newSignalEventDefinition.setAttribute('id', signalRef);newSignalEventDefinition.setAttribute('name', name);const definitionsLineBreakBefore = xmlDoc.createTextNode('\t\n');const definitionsLineBreakAfter = xmlDoc.createTextNode('\t\n');// 找到合适的插入位置,这里假设插入到第一个子元素之前if (definitionsElement.firstChild) {definitionsElement.insertBefore(definitionsLineBreakBefore, definitionsElement.firstChild);definitionsElement.insertBefore(newSignalEventDefinition, definitionsElement.firstChild.nextSibling);definitionsElement.insertBefore(definitionsLineBreakAfter, definitionsElement.firstChild.nextSibling.nextSibling);} else {definitionsElement.appendChild(definitionsLineBreakBefore);definitionsElement.appendChild(newSignalEventDefinition);definitionsElement.appendChild(definitionsLineBreakAfter);}}// 判断 flowable:title 是否等于 "企业微信"if (title === '企业微信') {createEventAndSignal('xxx', 'xxx0', 'xxx1');}// 判断 flowable:title 是否等于 "公众号"if (title === '公众号') {createEventAndSignal('xxx', 'xxx0', 'xxx1');}// 判断 flowable:title 是否等于 "小程序"if (title === '小程序') {createEventAndSignal('xxx', 'xxx0', 'xxx1');}// 判断 flowable:title 是否等于 "短信"if (title === '短信') {createEventAndSignal('xxx', 'xxx0', 'xxx1');}}// 将修改后的 XML 转换为字符串const serializer = new XMLSerializer();const newXmlString = serializer.serializeToString(xmlDoc);// 输出修改后的 XML 字符串return newXmlString;
};
http://www.dtcms.com/a/186335.html

相关文章:

  • 智能手表测试用例文档
  • MySQL 事务(一)
  • bootstrap自助(抽样)法
  • 第三章 仿真器介绍
  • python opencv 将不同shape尺寸的图片制作video视频
  • 掌握MySQL数据库操作:从创建到管理全攻略
  • 《Spring Boot 4.0新特性深度解析》
  • 基于Qt6 + MuPDF在 Arm IMX6ULL运行的PDF浏览器(项目推介)
  • Leetcode-BFS问题
  • 微信小程序单双周选择排序有效果图
  • Django 项目的 models 目录中,__init__.py 文件的作用
  • PyTorch Lightning实战 - 训练 MNIST 数据集
  • 【Java学习】Lambda表达式
  • day 23
  • 嵌入式MCU和Linux开发哪个好?
  • 架构思维:通用架构模式_系统监控的设计
  • 《微机原理与接口技术》第 5 章 汇编语言程序设计
  • 解决LangChain4j报错HTTP/1.1 header parser received no bytes
  • OJ项目测试
  • C++类和对象--中阶
  • sql语句面经手撕(定制整理版)
  • 收集飞花令碎片——C语言分支与循环语句(上)
  • 如何避免 JavaScript 中常见的闭包陷阱?
  • Nginx stream模块是连接级别的负载均衡
  • 序列检测器
  • 【002】renPy android端启动流程分析
  • Docker从0到1:入门指南
  • 破解 Qt QProcess 在 Release 模式下的“卡死”之谜
  • Linux基础命令之目录管理——了解各种操作文件目录的命令,万字教学,超详细!!!(1)
  • windows防火墙