作者: wf_7758520
這次就說說jBPM的業(yè)務日歷。
這是官方的定義,現(xiàn)在看不明白沒關系,我會慢慢解釋。是一個文本塊,它是可以使用Double.parseDouble(quantity)所解析的,也就是說是一個數(shù)字;是{second,seconds,minute,minutes,hour,hours,day,days,week,weeks,month,months,year,years}之一;加上可選的business指示,意味著對于這個期限只有業(yè)務時間才應被考慮,如果沒有business指示,期限將作為一個絕對的時間段被解釋。也就是說加了business的按業(yè)務時間算,沒加的按絕對時間算。
什么叫業(yè)務時間,什么叫絕對時間?我就用jbpm的例子說明。文件org/jbpm/calendar/jbpm.business.calendar.properties指定了什么是業(yè)務時間,該配置文件可以被定制并且修改后的拷貝可被放在classpath根?! ∠旅媸菢I(yè)務時間規(guī)范的例子,它在jbpm.business.calendar.properties中被默認配置。
xml 代碼
- hour.format=HH:mm
- #weekday ::= [<daypart> [& <daypart>]*]
- #daypart ::= <start-hour>-<to-hour>
- #start-hour and to-hour must be in the hour.format
- #dayparts have to be ordered
- weekday.monday= 9:00-12:00 & 12:30-17:00
- weekday.thuesday= 9:00-12:00 & 12:30-17:00
- weekday.wednesday= 9:00-12:00 & 12:30-17:00
- weekday.thursday= 9:00-12:00 & 12:30-17:00
- weekday.friday= 9:00-12:00 & 12:30-17:00
- weekdayweekday.saturday=
- weekday.sunday=
-
- day.format=dd/MM/yyyy
- # holiday syntax: <holiday>
- # holiday period syntax: <start-day>-<end-day>
- # below are the belgian official holidays
- holiday.1= 01/01/2005 # nieuwjaar
- holiday.2= 27/3/2005 # pasen
- holiday.3= 28/3/2005 # paasmaandag
- holiday.4= 1/5/2005 # feest van de arbeid
- holiday.5= 5/5/2005 # hemelvaart
- holiday.6= 15/5/2005 # pinksteren
- holiday.7= 16/5/2005 # pinkstermaandag
- holiday.8= 21/7/2005 # my birthday
- holiday.9= 15/8/2005 # moederkesdag
- holiday.10= 1/11/2005 # allerheiligen
- holiday.11= 11/11/2005 # wapenstilstand
- holiday.12= 25/12/2005 # kerstmis
-
-
- business.day.expressed.in.hours= 8
- business.week.expressed.in.hours= 40
- business.month.expressed.in.business.days= 21
- business.year.expressed.in.business.days= 220
-
對于上面定義通俗的理解就是它歸定了從星期一到星期五的9:00-12:00 & 12:30-17:00 這段時間為上班時間也就是業(yè)務時間,星期六和星期日沒有定義也就是放假的時間,再往下就是定義了12個節(jié)假日,最后是一些工作時長的統(tǒng)計如一天8小時,一個星期40小時等。
從官方定義至少可以看出jbpm要與定時器結合使用,下面我們定義一個定時器:
xml 代碼
- <state name='catch crooks'>
- <timer name='reminder' duedate='3 business day'
- repeat='2 business day'
- transition='time-out-transition' >
- <action class='the-remainder-action-class-name' />
- timer>
- <state>
這里的定時器(timer)的名字是reminder,它的duedate定義的是3 business day,repeat定義的是2 business day也就是說從定時器啟動開始在3個業(yè)務日的時間后每隔兩個業(yè)務日執(zhí)行一次action的方法,直到timer結束。現(xiàn)在就可以來區(qū)別業(yè)務時間和絕對時間了,假設我是在星期五的早上10點啟動了這個timer,那它第一次執(zhí)行action的方法是在什么時候呢?因為這里的定義是有加上business的所以要結束工作日歷的定義來算了。工作日歷中定義了星期六和星期天是不上班的(沒有定義),所以在計算時間時就跳過,要到星期三到早上10點(這時只是執(zhí)行完duedate的時間也就是第一次觸發(fā)action的時間),到星期五早上10點第二次觸發(fā)action,到下個星期二早上第二次觸發(fā)action(因為星期六和星期日沒定義不是業(yè)務時間),以此類推。如果在timer定義時沒有加上business的話,就以絕對時間進行計算,也就是在星期一的10點第一次觸發(fā)action,到星期三10點第二次觸發(fā)action,以此類推。
|
posted on 2007-09-19 17:40
jbpm 閱讀(909)
評論(1) 編輯 收藏 所屬分類:
jbpm實例