动态修改JBPM之Timer组件的duedate值
需求是这样的,主管发起任务,任务根据实际需求要求有完成的限期,用timer可以实现
<task name="orgTime"> <timer name="varTimer" duedate="1 business days" repeat="10 business seconds"> <!--<script>System.out.println("I reset my timer!");</script>--> <action class="com.pujin.oa.workflow.allotTask.jbpm.handler.OverTimeActionHandler"> </action> </timer> </task>
这样做duedate在流程定义发布的时候就被限死了,就不能跟据实际需求而修改,如果在duedate放变量上去,会发现不可能能实现,怎么办呢?
在timer其实有这样的事件触发:timer-create,当要创建时间的时候就可以先去修改duedate,这样就能做成动态修改 符合实际需求了。
具体代码如下:
<task-node name="timerControl"> <!-- 创建timer的时候触发修改时间事件 --> <event type="timer-create"> <action name="timerCreated" class="com.pujin.oa.workflow.allotTask.jbpm.handler.ChangeDueDateActionHandler"> <timerName>varTimer</timerName> <delay>#{newDelay}</delay> </action> </event> <task name="orgTime"> <timer name="varTimer" duedate="1 business days" repeat="10 business seconds"> <!--<script>System.out.println("I reset my timer!");</script>--> <action class="com.pujin.oa.workflow.allotTask.jbpm.handler.OverTimeActionHandler"> </action> </timer> </task> <transition to="audit"></transition></task-node>
在com.pujin.oa.workflow.allotTask.jbpm.handler.ChangeDueDateActionHandler中我们实现duedate修改:
package com.pujin.oa.workflow.allotTask.jbpm.handler;
import java.util.Date;import org.jbpm.calendar.BusinessCalendar;import org.jbpm.calendar.Duration;import org.jbpm.graph.def.ActionHandler;import org.jbpm.graph.exe.ExecutionContext;import org.jbpm.job.Timer;import org.jbpm.scheduler.SchedulerService;import org.jbpm.svc.Services;import com.pujin.common.database.hibernate.AbstractHibernateDAO;import com.pujin.common.util.Tools;import com.pujin.oa.bo.OaTaskPhase;import com.pujin.oa.workflow.allotTask.service.AllotTaskService;public class ChangeDueDateActionHandler extends AbstractHibernateDAO implements ActionHandler {static BusinessCalendar businessCalendar = new BusinessCalendar();String timerName; String delay;public void execute(ExecutionContext executionContext) throws Exception { // TODO Auto-generated method stub Timer timer = executionContext.getTimer(); if (timer != null && timerName.equals(timer.getName())) { OaTaskPhase oaTaskPhase = (OaTaskPhase)executionContext.getVariable("oaTaskPhase"); int dueDate = Tools.countDays(Tools.getToday(), Tools.date2string(oaTaskPhase.getPhaseterm()), "yyyy-MM-dd"); //Duration duration = new Duration(dueDate); Duration duration = new Duration("2 minutes"); SchedulerService schedulerService = (SchedulerService) Services.getCurrentService(Services.SERVICENAME_SCHEDULER); Date dueDateDate = businessCalendar.add(new Date(), duration); timer.setDueDate(dueDateDate); schedulerService.createTimer(timer); }else{
}}public String getDelay() { return delay;}public void setDelay(String delay) { this.delay = delay;}public String getTimerName() { return timerName;}public void setTimerName(String timerName) { this.timerName = timerName;}
}
其中:Duration duration = new Duration("2 minutes");这里的2 minutes可以将你变量放进来。
注:本文转载[url]http://user.qzone.qq.com/451712078/blog/1231294345[/url]
动态修改JBPM之Timer组件的duedate值相关推荐
- PB 动态修改数据窗口下拉框的值(DropDownListBox)
GIF:效果图 源码: string ls_value,ls_colnamels_colname = 'a' //字段名称//如果字段不是DropDownListBox下拉框,需要改变Edit中的St ...
- 使用GSP动态修改SQL语句
最近发现一款功能非常强大的解析SQL语句的引擎,GSP(全称General SQL Parser).这是一款专业的SQL引擎,适用于市面上流行的各种数据库,同时他也支持了马哈鱼分析器对SQL的分析.这 ...
- JBPM 3.2.2动态修改duedate
花了2个多星期,终于将JBPM的duedate做成动态修改. 需求是这样的,主管发起任务,任务根据实际需求要求有完成的限期,用timer可以实现 <task name="orgTime ...
- 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
原文:利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习) Mono.Cecil是一个强大的MSIL的注入工具,利用它可以实现动态创建程序集,也可以实现拦截器横向切入动态方法,甚至还 ...
- 根据条件动态修改element 组件深层次样式
开发前提: vue elementUI 在开发中有时候 element 中我们使用的某个组件的样式不符合我们的需求,直接写行内样式,有时候会发现并不会生效,直接将样式写在 style 标签中虽然样式会 ...
- IOS小组件(4-2):创建可配置小组件(动态修改配置数据)
IOS小组件(4-2):创建可配置小组件(动态修改配置数据) 引言 在项目中添加"Intens Extension" 在 xxx.intentdefinition文件中增加一个动态 ...
- Tkinter组件Label动态修改内容
最近在使用组件Lable时,遇见了text内容不能动态修改,最后发现是自己写错了. 动态修改现在发现有两种方法,一种是修改Lable的text属性的办法,一种是用varibale的双向绑定, 首页是t ...
- vue 全局动态修改title、keywords、description;vue常用挂载的方法,自定义指令;
vue 全局动态修改title.keywords.description 路由: {path: "xxx",name: "xxx",component: () ...
- C#中Timer组件用法
Timer组件是也是一个WinForm组件了,和其他的WinForm组件的最大区别是:Timer组件是不可见的,而其他大部分的组件都是都是可见的,可以设计的.Timer组件也被封装在名称空间Syste ...
最新文章
- 代码动态创建checkbox
- javascript中常用数组函数
- mysql错误1300怎么解决_pt-osc 变更时遇到 “MySQL error 1300” 报错问题解决
- 《剑指offer》数组中重复的数字
- Python -- post方式上传文件
- ajax 单击事件删除,AJAX删除事件与加载数据方法介绍
- PCSHARE VIP 2005源代码
- 计算机算法应用状况,详解机器学习中的现状,算法,应用
- 1stopt拟合步骤_1stopt三维曲线拟合
- 人脸识别,结构光名词记录
- 台式电脑卸载了wifi精灵之后能够联网但是无法上网
- Ubuntu修改时区和更新时间
- 微型计算机cpu组成部分是,微型计算机的中央处理器CPU由()和()两部分组成。 - 问答库...
- 微信营销KPI考核标准有哪些?
- 常用手机尺寸以及分辨率
- HC-SR501 人体红外感应模块
- 微信团队分享:微信每日亿次实时音视频聊天背后的技术解密
- (附源码)计算机毕业设计ssm个人人际关系管理软件
- net: mpls 是什么
- HDU 3507 斜率优化入学习
热门文章
- 分析函数入门sum...over(partition by xxx order by yyy rows between zzz)
- 用msi安装包安装MySQL详细步骤
- Android开发丶集成微信原生分享并于分享网页时加载网络缩略图
- Robotic Process Automation 机器人流程自动化(2)
- nxp电源管理芯片对华为5G基站的成本比率
- 关于HttpClient绕过SSL认证以及NTLM认证
- STM32实现六轴姿态测量陀螺仪模块JY61P(标准库与HAL库实现)
- 【12306】登陆流程实现(微信小程序 + php)
- 大数据权限管理利器 - Ranger
- 前端程序员常用构建工具