jbpm业务日历实例

转载 2007年09月16日 16:15:00

 

作者:   wf_7758520

这次就说说jBPM的业务日历。

业务日历是关于业务时间的,并且被用于为任务和定时器计算预期的时间。 业务日历能够通过对一个期限和日期进行增加来计算日期。

这是官方的定义,现在看不明白没关系,我会慢慢解释。我们先看看业务日历的语法:

xml 代码
  1. <quantity>[business]<unit>  

是一个文本块,它是可以使用Double.parseDouble(quantity)所解析的,也就是说是一个数字;是{second,seconds,minute,minutes,hour,hours,day,days,week,weeks,month,months,year,years}之一;加上可选的business指示,意味着对于这个期限只有业务时间才应被考虑,如果没有business指示,期限将作为一个绝对的时间段被解释。也就是说加了business的按业务时间算,没加的按绝对时间算。

什么叫业务时间,什么叫绝对时间?我就用jbpm的例子说明。文件org/jbpm/calendar/jbpm.business.calendar.properties指定了什么是业务时间,该配置文件可以被定制并且修改后的拷贝可被放在classpath根。                 下面是业务时间规范的例子,它在jbpm.business.calendar.properties中被默认配置。

xml 代码
  1. hour.format=HH:mm   
  2. #weekday ::= [<daypart> [& <daypart>]*]   
  3. #daypart ::<start-hour>-<to-hour>  
  4. #start-hour and to-hour must be in the hour.format   
  5. #dayparts have to be ordered   
  6. weekday.monday=    9:00-12:00 & 12:30-17:00   
  7. weekday.thuesday=  9:00-12:00 & 12:30-17:00   
  8. weekday.wednesday9:00-12:00 & 12:30-17:00   
  9. weekday.thursday=  9:00-12:00 & 12:30-17:00   
  10. weekday.friday=    9:00-12:00 & 12:30-17:00   
  11. weekdayweekday.saturday=   
  12. weekday.sunday=   
  13.   
  14. day.format=dd/MM/yyyy   
  15. # holiday syntax: <holiday>  
  16. # holiday period syntax: <start-day>-<end-day>  
  17. # below are the belgian official holidays   
  18. holiday.1=  01/01/2005 # nieuwjaar   
  19. holiday.2=  27/3/2005  # pasen    
  20. holiday.3=  28/3/2005  # paasmaandag    
  21. holiday.4=  1/5/2005   # feest van de arbeid   
  22. holiday.5=  5/5/2005   # hemelvaart    
  23. holiday.6=  15/5/2005  # pinksteren    
  24. holiday.7=  16/5/2005  # pinkstermaandag    
  25. holiday.8=  21/7/2005  # my birthday    
  26. holiday.9=  15/8/2005  # moederkesdag    
  27. holiday.10= 1/11/2005  # allerheiligen    
  28. holiday.11= 11/11/2005 # wapenstilstand    
  29. holiday.1225/12/2005 # kerstmis    
  30.   
  31.   
  32. business.day.expressed.in.hours =          8  
  33. business.week.expressed.in.hours=          40  
  34. business.month.expressed.in.business.days21  
  35. business.year.expressed.in.business.days 220  
  36.   

对于上面定义通俗的理解就是它归定了从星期一到星期五的9:00-12:00 & 12:30-17:00   这段时间为上班时间也就是业务时间,星期六和星期日没有定义也就是放假的时间,再往下就是定义了12个节假日,最后是一些工作时长的统计如一天8小时,一个星期40小时等。

从官方定义至少可以看出jbpm要与定时器结合使用,下面我们定义一个定时器:

xml 代码
  1. <state name='catch crooks'>         
  2.   <timer name='reminder' duedate='3 business day' 
  3.       repeat='2 business day'         
  4.       transition='time-out-transition' >         
  5.     <action class='the-remainder-action-class-name' />         
  6.   timer>            
  7. <state>   

这里的定时器(timer)的名字是reminder,它的duedate定义的是3 business day,repeat定义的是2 business day也就是说从定时器启动开始在3个业务日的时间后每隔两个业务日执行一次action的方法,直到timer结束。现在就可以来区别业务时间和绝对时间了,假设我是在星期五的早上10点启动了这个timer,那它第一次执行action的方法是在什么时候呢?因为这里的定义是有加上business的所以要结束工作日历的定义来算了。工作日历中定义了星期六和星期天是不上班的(没有定义),所以在计算时间时就跳过,要到星期三到早上10点(这时只是执行完duedate的时间也就是第一次触发action的时间),到星期五早上10点第二次触发action,到下个星期二早上第二次触发action(因为星期六和星期日没定义不是业务时间),以此类推。如果在timer定义时没有加上business的话,就以绝对时间进行计算,也就是在星期一的10点第一次触发action,到星期三10点第二次触发action,以此类推。

 

发现jbpm BusinessCalendar的bug

BusinessCalendar真的是非常有用,让我们对付 刁难的客户时不用那么心惊胆颤了,但今天竟然发现一个BUG,开始以为是自己的问题,到后来不得不转到junit:public void test...
  • hongbo781202
  • hongbo781202
  • 2006年02月28日 20:45
  • 2975

【代码篇】JBPM4.4结合业务实现简单工作流

继博客【思想篇】工作流技术JBPM开发入门(三)的实现完成!应对业务的变化。   其实这次对于工作流的学习大概分了3主要个阶段:   1,结合业务开发一个简单的工作流,应对业务的变更 2,结合业务开发...
  • hejingyuan6
  • hejingyuan6
  • 2015年01月13日 21:48
  • 4478

jbpm4.4_ssh_请假完整例子

Jbpm4.4+hibernate3.5.4+spring3.0.4+struts2.1.8 整合例子(附完整的请假流程例子)。 1.       jbpm4.4 测试环境搭建 2.   ...
  • wwwwwwwwwwqaz
  • wwwwwwwwwwqaz
  • 2014年05月05日 17:20
  • 1467

【整合篇】JBPM4.4业务与流程的整合

在这次学习工作流的过程中,工作流如何与业务结合有多种方式,虽然很简单,但是每次都要再次梳理几分钟,这次拿出来整理一下,将它真正成为自己的知识。   从启动流程开始说:   申请页面:选择所用流程(即画...
  • hejingyuan6
  • hejingyuan6
  • 2015年01月21日 09:45
  • 3807

关于JBPM4.4显示流程图详解

JBPM显示流程图有很多种方式,下面我讲述yixi
  • yusewuhen
  • yusewuhen
  • 2014年10月27日 17:59
  • 2170

常用小工具:一款好用、实用的“日常工作安排”桌面日历

今天同为各位上班族朋友推荐一款实用、好用的小工具,日常工作安排 的电子日历 桌面日历(DesktopCal)...
  • baby2susan
  • baby2susan
  • 2017年06月06日 19:59
  • 1683

javascript考勤日历

简介用过一些开源的日历,但对于自定义去绑定数据在日历元素中却不是很方便,由于工作需要用到考勤日历,考虑到日历的实现也不是特别麻烦,于是自己弄了一个,样式比较简单,需要的可以自己去扩展。使用的时候绑定获...
  • wang124454731
  • wang124454731
  • 2017年04月21日 14:17
  • 1023

JBPM4.4节点详解(常用)

启动节点start 每个流程里面至少有一个开始节点(到目前为止一个流程只能有一个开始节点),开始节点必须有一个向外的流向,这个流向会在流程启动时执行。 状态节点state State是一个等...
  • qianmodanshang
  • qianmodanshang
  • 2016年07月05日 14:41
  • 2557

JBPM4.4 入门 简单的请假流程

最近学习了一下jbpm工作流,感觉网上好多例子都不是很全,所以就做了一个完整的流程,使用jsp和servlet   1 . jbpm的配置文件 (1) jbpm.cg.xml  ,该文件可以从下...
  • sust2012
  • sust2012
  • 2013年11月28日 11:01
  • 4798

Java SSH 项目总结——设定工作日日历

前言    今天文章的主题就是日历,先介绍下背景,这个日历是为一个在线预约系统服务的,在线预约就是选择工作日,然后进行具体业务的预约,而工作日的是设定就是通过我们这个日历来完成的.     正题 ...
  • zwk626542417
  • zwk626542417
  • 2015年01月24日 15:56
  • 4537
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jbpm业务日历实例
举报原因:
原因补充:

(最多只允许输入30个字)