在芋道源码 / ruoyi-vue-pro的项目基础上进行定时事件的属性添加,该项目的工作流已经满足项目的基本需求,但是定时器组件缺少日期时间、持续时间和时间周期属性。本文主要就是讲讲怎么添加这些属性。

刚开始尝试在<bpmn2:intermediateCatchEvent >  </bpmn2:intermediateCatchEvent>标签上添加timeDate,timeDuration,timeCycle属性,发现并不起效果。

然后查下定时器需要的xml样式是

<!--示例:流程会启动4次,间隔5分钟,从2011年11月11日,12:13开始-->
<startEvent id="theStart"><timerEventDefinition><timeCycle>R4/2022-11-10T12:13/PT5M</timeCycle></timerEventDefinition>
</startEvent><!--示例:流程会在设定的时间启动一次-->
<startEvent id="theStart"><timerEventDefinition><timeDate>2022-11-10T12:13:14</timeDate></timerEventDefinition>
</startEvent>

于是在此基础上进行xml的创建,创建方法是:

  updateElement() {//获取节点的子节点 timerEventDefinitionlet timerEventDef = this.bpmnElement.businessObject.eventDefinitions[0]const timeCycle = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body:this.timerForm.timeCycle });const timeDate = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body:this.timerForm.timeDate });const timeDuration = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body:this.timerForm.timeDuration });
window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{timeCycle, timeDate, timeDuration})}

生成具体的xml是:

<bpmn2:intermediateCatchEvent id="Event_0de6lmv" name="定时器" flowable:select="3"><bpmn2:incoming>Flow_1qb7zvf</bpmn2:incoming><bpmn2:outgoing>Flow_0aqzi45</bpmn2:outgoing><bpmn2:timerEventDefinition id="TimerEventDefinition_0tg84gq"><bpmn2:timeCycle xsi:type="bpmn2:tFormalExpression">R4/2021-11-10T12:00/PT5M</bpmn2:timeCycle><bpmn2:timeDate xsi:type="bpmn2:tFormalExpression">2022-11-10T12:00</bpmn2:timeDate><bpmn2:timeDuration xsi:type="bpmn2:tFormalExpression">PT5M</bpmn2:timeDuration></bpmn2:timerEventDefinition></bpmn2:intermediateCatchEvent>

进行发布流程的时候,发现数据结果报错:

javax.xml.stream.XMLStreamException: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 2133; cvc-complex-type.2.4.d: Invalid content was found starting with element 'bpmn2:timeCycle'. No child element is expected at this point.

删除timeDate和timeDuration的创建,或者删除timeCycle和timeDuration的创建,只保留timeCycle、timeDate、timeDuration其中之一,发布流程是成功的。

看到其他activiti系统中生成的三个属性是可以一起编辑的,于是具体查看了bpmn文档,发现三个属性一起编辑提交的时候,具体生成的xml只添加了一个属性,优先级最高的是timeDate,其次是timeCycle,timeDuration。

在确定定时器<bpmn2:intermediateCatchEvent >  </bpmn2:intermediateCatchEvent>标签内只添加timeCycle,timeDate,timeDuration中的一个标签时我更改了创建的方法

 updateElement() {//获取节点的子节点 timerEventDefinitionlet timerEventDef = this.bpmnElement.businessObject.eventDefinitions[0]for (const key in timerEventDef) {if ( !(key == '$type' || key == 'id')){delete timerEventDef[key]}}const timeCycle = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body:this.timerForm.timeCycle });const timeDate = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body:this.timerForm.timeDate });const timeDuration = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body:this.timerForm.timeDuration });if (this.timerForm.select == 1){window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{timeCycle})}else if (this.timerForm.select == 2){window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{timeDate})} else {window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{timeDuration})}}

最终生成了在<bpmn2:intermediateCatchEvent >  </bpmn2:intermediateCatchEvent>标签内只有一个时间属性的xml文档,此时发布流程成功,发布的时间属性有作用。

<bpmn2:intermediateCatchEvent id="Event_0de6lmv" name="定时器1" flowable:select="3"><bpmn2:incoming>Flow_1qb7zvf</bpmn2:incoming><bpmn2:outgoing>Flow_0aqzi45</bpmn2:outgoing><bpmn2:timerEventDefinition id="TimerEventDefinition_0tg84gq"><bpmn2:timeCycle xsi:type="bpmn2:tFormalExpression">R4/2021-11-10T12:00/PT5M</bpmn2:timeCycle></bpmn2:timerEventDefinition></bpmn2:intermediateCatchEvent><!-- 或者 --><bpmn2:intermediateCatchEvent id="Event_0de6lmv" name="定时器2" flowable:select="3"><bpmn2:incoming>Flow_1qb7zvf</bpmn2:incoming><bpmn2:outgoing>Flow_0aqzi45</bpmn2:outgoing><bpmn2:timerEventDefinition id="TimerEventDefinition_0tg84gq"><bpmn2:timeDate xsi:type="bpmn2:tFormalExpression">2022-11-10T12:00</bpmn2:timeDate></bpmn2:timerEventDefinition></bpmn2:intermediateCatchEvent><!-- 或者 -->
<bpmn2:intermediateCatchEvent id="Event_0de6lmv" name="定时器3" flowable:select="3"><bpmn2:incoming>Flow_1qb7zvf</bpmn2:incoming><bpmn2:outgoing>Flow_0aqzi45</bpmn2:outgoing><bpmn2:timerEventDefinition id="TimerEventDefinition_0tg84gq"><bpmn2:timeDuration xsi:type="bpmn2:tFormalExpression">PT5M</bpmn2:timeDuration></bpmn2:timerEventDefinition></bpmn2:intermediateCatchEvent>

bpmnjs flowable 添加定时事件timeDate,timeDuration,timeCycle相关推荐

  1. bpmnjs activiti 添加定时事件timeDate,timeDuration,timeCycle

    项目场景: 项目中用到bpmnjs来化流程图. 问题描述 项目中用到的框架使用bpmnjs封装了部分功能,添加边界事件部分功能缺失,需要自己根据bpmnjs来添加边界事件.需要在如下节点下面添加子节点 ...

  2. CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)

    参考学习大神博客: http://blog.csdn.net/feilusia/article/details/51083953 : http://blog.csdn.net/xiaoleiacmer ...

  3. activiti 定时事件

    一,需要配置yml activiti activiti:#启用作业执行器async-executor-activate: true#启用异步执行器job-executor-activate: true ...

  4. Linux网络编程 | 定时事件 :Linux常见定时方法、定时器链表、空闲断开

    文章目录 Linux定时方法 定时器链表 空闲断开 Linux定时方法 Linux中为我们提供了三种定时方法,分别是Socket超时选项,SIGALRM信号,I/O复用超时参数.下面一一对其进行介绍. ...

  5. android 添加日程失败,Android向系统日历中添加日程事件

    总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...

  6. Android向系统日历中添加日程事件

    总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: 好处:由于提醒功能是交付给系统日历来做,不 ...

  7. iOS访问系统日历 添加提醒事件

    1 添加隐私请求提示 Privacy - Calendars Usage Description 2 代码 #import <EventKit/EventKit.h> // 添加提醒事件 ...

  8. 为窗口添加滚动条事件

    为窗口添加滚动条事件其实非常的简单, window.οnscrοll=function(){}; 注意在获取滚动条距离的时候 谷歌不识别document.documentElement.scrollT ...

  9. 为.net中的ListBox控件添加双击事件

    我在用dotnet做一个项目的过程中,遇到了一个ListBox的问题:通过在一个ListBox中双击,把选中的项添加到另一个ListBox中,但ListBox控件本身并没有该事件,那么如何实现呢?我就 ...

最新文章

  1. centos 配置bond_Linux CentOS 7 多网卡配置bond模式 bond1 bond5 bond6
  2. 刻意练习:LeetCode实战 -- 二叉树的前序遍历
  3. 看问题要看到本质:从Web服务器说起
  4. 暑期 2021 | Serverless Devs 最全项目申请攻略来啦!
  5. file获取文件后缀_Python 工匠:高效操作文件的三个建议
  6. 十二、用Axis操作 Header头部信息
  7. PLCrashReporter使用
  8. Supervisor 自动管理进程
  9. 人脸识别门禁系统java实现_java实现人脸识别源码【含测试效果图】——前台页面层(login.jsp)...
  10. 大数据Hadoop基本概念介绍
  11. 怎么修改图片大小尺寸?
  12. ES6 阮一峰阅读学习
  13. dd 删除引导扇区_硬盘U盘数据怎么用bootice彻底删除及清零引导记录教程
  14. 第1章第26节:如何通过幻灯片母版统一管理相同类型的幻灯片2 [PowerPoint精美幻灯片实战教程]
  15. 矿难猫盘救砖刷回OneSpace系统的记录
  16. zabbix与nagios对比
  17. 【其他】Tensorflow分布式使用简介
  18. Win10系统解决Windows Defender自动删除文件的问题
  19. 视频文件打不开怎么修复
  20. 黑马程序员_JAVA之IO流的(转换流,数据输入输出流等)

热门文章

  1. javaweb:web.xml配置详解
  2. 传感器TLE5012B使用
  3. JavaScript相关笔记及案例
  4. 图像处理45-grabCut图像分割
  5. 医院挂号系统代码_基于SSH的医院在线挂号系统设计与实现
  6. 【BAT-表姐御用01dir命令】批量获取文件夹中的文件名
  7. 爬取M3U8文件支持的网页在线播放资源(AES-128加密)
  8. API接口幂等性设计
  9. dayjs-入门及常用方法
  10. ArcGIS Python ​影像批量裁剪