// 创建监听器实例 export function createListenerObject(options, isTask, prefix) { const listenerObj = Object.create(null); listenerObj.event = options.event; // isTask && (listenerObj.id = options.id); // 任务监听器特有的 id 字段 switch (options.listenerType) { case "scriptListener": listenerObj.script = createScriptObject(options, prefix); break; case "expressionListener": listenerObj.expression = options.expression; break; case "delegateExpressionListener": listenerObj.delegateExpression = options.delegateExpression; break; default: listenerObj.class = options.class; } // 注入字段 if (options.fields) { listenerObj.fields = options.fields.map(field => { return createFieldObject(field, prefix); }); } // 任务监听器的 定时器 设置 if (isTask && options.event === "timeout" && !!options.eventDefinitionType) { const timeDefinition = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body: options.eventTimeDefinitions }); const TimerEventDefinition = window.bpmnInstances.moddle.create("bpmn:TimerEventDefinition", { id: `TimerEventDefinition_${uuid(8)}`, [`time${options.eventDefinitionType.replace(/^\S/, s => s.toUpperCase())}`]: timeDefinition }); listenerObj.eventDefinitions = [TimerEventDefinition]; } return window.bpmnInstances.moddle.create(`${prefix}:${isTask ? "TaskListener" : "ExecutionListener"}`, listenerObj); } // 创建 监听器的注入字段 实例 export function createFieldObject(option, prefix) { const { name, fieldType, string, expression } = option; const fieldConfig = fieldType === "string" ? { name, string } : { name, expression }; return window.bpmnInstances.moddle.create(`${prefix}:Field`, fieldConfig); } // 创建脚本实例 export function createScriptObject(options, prefix) { const { scriptType, scriptFormat, value, resource } = options; const scriptConfig = scriptType === "inlineScript" ? { scriptFormat, value } : { scriptFormat, resource }; return window.bpmnInstances.moddle.create(`${prefix}:Script`, scriptConfig); } // 更新元素扩展属性 export function updateElementExtensions(element, extensionList) { const extensions = window.bpmnInstances.moddle.create("bpmn:ExtensionElements", { values: extensionList }); window.bpmnInstances.modeling.updateProperties(element, { extensionElements: extensions }); } // 创建一个id export function uuid(length = 8, chars) { let result = ""; let charsString = chars || "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; for (let i = length; i > 0; --i) { result += charsString[Math.floor(Math.random() * charsString.length)]; } return result; }