需求是这样的,主管发起任务,任务根据实际需求要求有完成的限期,用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值相关推荐

  1. PB 动态修改数据窗口下拉框的值(DropDownListBox)

    GIF:效果图 源码: string ls_value,ls_colnamels_colname = 'a' //字段名称//如果字段不是DropDownListBox下拉框,需要改变Edit中的St ...

  2. 使用GSP动态修改SQL语句

    最近发现一款功能非常强大的解析SQL语句的引擎,GSP(全称General SQL Parser).这是一款专业的SQL引擎,适用于市面上流行的各种数据库,同时他也支持了马哈鱼分析器对SQL的分析.这 ...

  3. JBPM 3.2.2动态修改duedate

    花了2个多星期,终于将JBPM的duedate做成动态修改. 需求是这样的,主管发起任务,任务根据实际需求要求有完成的限期,用timer可以实现 <task name="orgTime ...

  4. 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)

    原文:利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习) Mono.Cecil是一个强大的MSIL的注入工具,利用它可以实现动态创建程序集,也可以实现拦截器横向切入动态方法,甚至还 ...

  5. 根据条件动态修改element 组件深层次样式

    开发前提: vue elementUI 在开发中有时候 element 中我们使用的某个组件的样式不符合我们的需求,直接写行内样式,有时候会发现并不会生效,直接将样式写在 style 标签中虽然样式会 ...

  6. IOS小组件(4-2):创建可配置小组件(动态修改配置数据)

    IOS小组件(4-2):创建可配置小组件(动态修改配置数据) 引言 在项目中添加"Intens Extension" 在 xxx.intentdefinition文件中增加一个动态 ...

  7. Tkinter组件Label动态修改内容

    最近在使用组件Lable时,遇见了text内容不能动态修改,最后发现是自己写错了. 动态修改现在发现有两种方法,一种是修改Lable的text属性的办法,一种是用varibale的双向绑定, 首页是t ...

  8. vue 全局动态修改title、keywords、description;vue常用挂载的方法,自定义指令;

    vue 全局动态修改title.keywords.description 路由: {path: "xxx",name: "xxx",component: () ...

  9. C#中Timer组件用法

    Timer组件是也是一个WinForm组件了,和其他的WinForm组件的最大区别是:Timer组件是不可见的,而其他大部分的组件都是都是可见的,可以设计的.Timer组件也被封装在名称空间Syste ...

最新文章

  1. 代码动态创建checkbox
  2. javascript中常用数组函数
  3. mysql错误1300怎么解决_pt-osc 变更时遇到 “MySQL error 1300” 报错问题解决
  4. 《剑指offer》数组中重复的数字
  5. Python -- post方式上传文件
  6. ajax 单击事件删除,AJAX删除事件与加载数据方法介绍
  7. PCSHARE VIP 2005源代码
  8. 计算机算法应用状况,详解机器学习中的现状,算法,应用
  9. 1stopt拟合步骤_1stopt三维曲线拟合
  10. 人脸识别,结构光名词记录
  11. 台式电脑卸载了wifi精灵之后能够联网但是无法上网
  12. Ubuntu修改时区和更新时间
  13. 微型计算机cpu组成部分是,微型计算机的中央处理器CPU由()和()两部分组成。 - 问答库...
  14. 微信营销KPI考核标准有哪些?
  15. 常用手机尺寸以及分辨率
  16. HC-SR501 人体红外感应模块
  17. 微信团队分享:微信每日亿次实时音视频聊天背后的技术解密
  18. (附源码)计算机毕业设计ssm个人人际关系管理软件
  19. net: mpls 是什么
  20. HDU 3507 斜率优化入学习

热门文章

  1. 分析函数入门sum...over(partition by xxx order by yyy rows between zzz)
  2. 用msi安装包安装MySQL详细步骤
  3. Android开发丶集成微信原生分享并于分享网页时加载网络缩略图
  4. Robotic Process Automation 机器人流程自动化(2)
  5. nxp电源管理芯片对华为5G基站的成本比率
  6. 关于HttpClient绕过SSL认证以及NTLM认证
  7. STM32实现六轴姿态测量陀螺仪模块JY61P(标准库与HAL库实现)
  8. 【12306】登陆流程实现(微信小程序 + php)
  9. 大数据权限管理利器 - Ranger
  10. 前端程序员常用构建工具