首页 > 其他分享 >基于jeecgboot的flowable流程支持定时捕获事件

基于jeecgboot的flowable流程支持定时捕获事件

时间:2023-02-28 11:34:50浏览次数:43  
标签:flowable bpmnElement window businessObject timeCycle jeecgboot bpmnInstances 定时 


 Flowable事件

  事件(event)通常用于为流程生命周期中发生的事情建模。事件总是图形化为圆圈。在BPMN 2.0中,有两种主要的事件分类:*捕获(catching)抛出(throwing)*事件。

  • 捕获: 当流程执行到达这个事件时,会等待直到触发器动作。触发器的类型由其中的图标,或者说XML中的类型声明而定义。捕获事件与抛出事件显示上的区别,是其内部的图标没有填充(即是白色的)。
  • 抛出: 当流程执行到达这个事件时,会触发一个触发器。触发器的类型,由其中的图标,或者说XML中的类型声明而定义。抛出事件与捕获事件显示上的区别,是其内部的图标填充为黑色。

  定时触发的相关事件,包括定时器启动事件,定时器捕获中间件事件,定时器边界事件

      这次只涉及到定时器捕获中间件事件处理, 定时器启动事件等以后有空的时候再处理。

      因为目前对于定时捕获事件流程设计器没有相关的属性配置与实现,所以主要是要实现这样的功能。

    1、增加边界事件处理文件CatchEvent.vue

     代码如下:

      主要实现对于定时边界事件的属性增加

<template>
<div class="panel-tab__content">
<!--目前只处理定时捕获事件 -->
<el-form size="mini" label-width="90px" @submit.native.prevent v-if="this.businessObject.eventDefinitions[0].$type.indexOf('TimerEventDefinition') !== -1">
<el-form-item label="事件类型">
<el-select v-model="timeDefinitionType" @change="changeTimerType">
<!--bpmn:TimerEventDefinition-->
<el-option label="指定时间" value="timeDate" />
<el-option label="持续时间" value="timeDuration" />
<el-option label="周期执行" value="timeCycle" />
</el-select>
</el-form-item>
<template v-if="timeDefinitionType != ''">
<el-form-item label="时间设置" required>
<el-tooltip>
<div slot="content">
事件类型配置说明<br>
1.指定时间(timeDate):触发事件的时间,如:2022-12-16T11:12:16 <br>
2.持续时间(timeDuration):指定时器之前需等待多长时间,使用ISO 8601规定的格式<br>
(由BPMN 2.0规定),如PT5M(等待5分钟),也支持表达式${duration},<br>
这样你就可以通过流程变量来影响定时器定义<br>
3.周期执行(timeCycle):指定重复执行的间隔,可以用来定期启动流程实例,<br>
或为超时时间发送多个提醒。timeCycle元素可以使用两种格式。<br>
第一种是 ISO 8601 标准的格式。示例值(R3/PT5M)(重复3次,<br>
每次间隔5分钟),或也可以用cron表达式指定timeCycle,如从整点开始,<br>
每10分钟执行一次(0 0/10 * * * ?)<br>
</div>
<el-input size="mini" type="string" v-model="FormalExpression" @change="updateTimeValue"></el-input>
</el-tooltip>
</el-form-item>
</template>
</el-form>
</div>
</template>

<script>
export default {
name: "CatchEvent",
props: {
businessObject: Object,
type: String
},
inject: {
prefix: "prefix"
},
data() {
return {
timeDefinitionType: "",
FormalExpression:'',
};
},
watch: {
businessObject: {
immediate: true,
handler(val) {
this.bpmnElement = window.bpmnInstances.bpmnElement;
this.getElementLoop(val);
}
}
},
methods: {
getElementLoop(businessObject) {//获取定时捕获事件原有值
console.log("getElementLoop businessObject=",businessObject)
console.log("window.bpmnInstances.bpmnElement.businessObject=",window.bpmnInstances.bpmnElement.businessObject);
if(businessObject.hasOwnProperty('eventDefinitions') && businessObject.eventDefinitions.length>0){
if(businessObject.eventDefinitions[0].$type == 'bpmn:TimerEventDefinition') {
if(businessObject.eventDefinitions[0].hasOwnProperty('timeDuration')) {
this.timeDefinitionType = "timeDuration"
this.FormalExpression = businessObject.eventDefinitions[0].timeDuration.body
}
else if(businessObject.eventDefinitions[0].hasOwnProperty('timeDate')) {
this.timeDefinitionType = "timeDate"
this.FormalExpression = businessObject.eventDefinitions[0].timeDate.body
}
else if(businessObject.eventDefinitions[0].hasOwnProperty('timeCycle')) {
this.timeDefinitionType = "timeCycle"
this.FormalExpression = businessObject.eventDefinitions[0].timeCycle.body

}
}
}
},
changeTimerType(type) {
this.timeDefinitionType = type
},
//
updateTimeValue(value) {
console.log("updateTimeValue value=",value);
this.updateTime(this.timeDefinitionType,value);
console.log("updateTimeValue this.bpmnElement=",this.bpmnElement);
},
//时间事件定义类型修改
updateTime(type,value){
//获取节点的子节点 timerEventDefinition
console.log("updatetime type=",type)
let timerEventDef = this.bpmnElement.businessObject.eventDefinitions[0]
const timeCycle = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body:value });
const timeDate = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body:value });
const timeDuration = window.bpmnInstances.moddle.create("bpmn:FormalExpression", { body:value });
if (type == 'timeCycle') {
window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{timeDate:null})
window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{timeDuration:null})
window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{timeCycle })
}
else if (type == 'timeDate') {
window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{timeCycle:null})
window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{timeDuration:null})
window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{ timeDate })
}
else if (type == 'timeDuration') {
window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{timeDate:null})
window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{timeCycle:null})
window.bpmnInstances.modeling.updateModdleProperties(this.bpmnElement,timerEventDef,{ timeDuration })
}

},
beforeDestroy() {
this.bpmnElement = null;
},
}
};
</script>

2、效果如下:

基于jeecgboot的flowable流程支持定时捕获事件_vue.js

基于jeecgboot的flowable流程支持定时捕获事件_javascript_02

3、主要后端数据库act_ru_timer_job表里会增加相应的数据,同时处理好后会自动删除相应的记录。

标签:flowable,bpmnElement,window,businessObject,timeCycle,jeecgboot,bpmnInstances,定时,
From: https://blog.51cto.com/u_15070324/6090622

相关文章

  • 基于jeecgboot的flowable流程支持定时边界事件
    Flowable事件  事件(event)通常用于为流程生命周期中发生的事情建模。事件总是图形化为圆圈。在BPMN2.0中,有两种主要的事件分类:*捕获(catching)与抛出(throwing)*事件。捕获:......
  • 基于jeecgboot的flowable流程支持online表单审批线上发布
        基于jeecgboot的flowable流程支持online表单审批线上临时发布一个版本,还有很多东西不完善,所以代码暂时不上传,等大家测试完善后考虑上传。    因为online......
  • linux 定时任务 crontab
    linux定时任务crontabcrontab-l列出所有任务crontab-e编辑任务servicecrondreload刷新任务......
  • linux定时任务crontab的使用
    文章目录​​linux​​​​crontab参数列表​​​​crontab-e和vim/etc/crontab的区别​​​​编辑完定时任务重启什么吗​​​​定时任务是否生效,查看日志​​​​定时......
  • 基于jeecgboot的flowable流程并行审批的bug修复
        对于下面的并行流程,会出现流程错误,特别是下面角色的处理与一个任务节点多个用户处理问题,所以需要进行修复bug。   1、后端处理   设置下一个审批人......
  • 基于jeecgboot的支持online表单审批的功能正式发布
       基于jeecgboot的flowable流程支持online表单审批线上发布一个完整的版本,利用原有online表单功能,通过选择现有online表单数据进行审批申请与操作,基本支持各自表单包......
  • 基于jeecgboot的flowable增加我的抄送及已读信息
       这部分功能由网友Tom-猫提供 1、增加两个字段: 接收人姓名与查看状态 2、前面在manage的api里增加下面接口,不过名字以后修改一下,好像不规范//抄送人已读状态e......
  • 基于jeecgboot的flowable流程支持online表单(二)
        这部分很多功能代码由网友撼动宇宙提供,这里先感谢这位网友的辛苦工作   这部分主要是online表单的显示与录入数据获取1、先建两个表--------------------......
  • 基于jeecgboot的flowable流程支持online表单(三)
        这部分主要是实现online表单的各种形式表单,包括主从表表单,同时录入采用现有官方的模式录入数据,通过选择已有数据的方式进行流程申请与审批,免去各种录入组件等兼......
  • formdesigner支持jeecgboot的部门与人员组件
      根据网友tom提供的代码,集成了formdesigner支持jeecgboot的部门与人员组件。1、人员组件在formdesigner组件的items下建立userList.js/***用户组件*/exportletus......