posts - 26,  comments - 7,  trackbacks - 0

          作者:   wf_7758520
           

           

          這次就說說jBPM的業(yè)務(wù)日歷。

          這是官方的定義,現(xiàn)在看不明白沒關(guān)系,我會慢慢解釋。是一個文本塊,它是可以使用Double.parseDouble(quantity)所解析的,也就是說是一個數(shù)字;是{second,seconds,minuteminutes,hourhoursday,days,week,weeksmonthmonths,year,years}之一;加上可選的business指示,意味著對于這個期限只有業(yè)務(wù)時間才應(yīng)被考慮,如果沒有business指示,期限將作為一個絕對的時間段被解釋。也就是說加了business的按業(yè)務(wù)時間算,沒加的按絕對時間算。

          什么叫業(yè)務(wù)時間,什么叫絕對時間?我就用jbpm的例子說明。文件org/jbpm/calendar/jbpm.business.calendar.properties指定了什么是業(yè)務(wù)時間,該配置文件可以被定制并且修改后的拷貝可被放在classpath根。                 下面是業(yè)務(wù)時間規(guī)范的例子,它在jbpm.business.calendar.properties中被默認(rèn)配置。

          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.101/11/2005  # allerheiligen    
          28. holiday.1111/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.days=  21  
          35. business.year.expressed.in.business.days=  220  
          36.   

          對于上面定義通俗的理解就是它歸定了從星期一到星期五的9:00-12:00 & 12:30-17:00   這段時間為上班時間也就是業(yè)務(wù)時間,星期六和星期日沒有定義也就是放假的時間,再往下就是定義了12個節(jié)假日,最后是一些工作時長的統(tǒng)計如一天8小時,一個星期40小時等。

          從官方定義至少可以看出jbpm要與定時器結(jié)合使用,下面我們定義一個定時器:

          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個業(yè)務(wù)日的時間后每隔兩個業(yè)務(wù)日執(zhí)行一次action的方法,直到timer結(jié)束。現(xiàn)在就可以來區(qū)別業(yè)務(wù)時間和絕對時間了,假設(shè)我是在星期五的早上10點啟動了這個timer,那它第一次執(zhí)行action的方法是在什么時候呢?因為這里的定義是有加上business的所以要結(jié)束工作日歷的定義來算了。工作日歷中定義了星期六和星期天是不上班的(沒有定義),所以在計算時間時就跳過,要到星期三到早上10點(這時只是執(zhí)行完duedate的時間也就是第一次觸發(fā)action的時間),到星期五早上10點第二次觸發(fā)action,到下個星期二早上第二次觸發(fā)action(因為星期六和星期日沒定義不是業(yè)務(wù)時間),以此類推。如果在timer定義時沒有加上business的話,就以絕對時間進行計算,也就是在星期一的10點第一次觸發(fā)action,到星期三10點第二次觸發(fā)action,以此類推。

           

          posted on 2007-09-19 17:40 jbpm 閱讀(916) 評論(1)  編輯  收藏 所屬分類: jbpm實例
          主站蜘蛛池模板: 三明市| 莒南县| 日喀则市| 辽阳市| 正蓝旗| 旺苍县| 南汇区| 平利县| 陆川县| 平江县| 彭水| 安乡县| 贵德县| 襄垣县| 波密县| 从江县| 彭水| 松潘县| 左云县| 类乌齐县| 盐亭县| 徐闻县| 师宗县| 凤台县| 扎兰屯市| 云龙县| 绥宁县| 平陆县| 凤山县| 酉阳| 淮南市| 会理县| 肃北| 驻马店市| 二连浩特市| 双柏县| 禄劝| 武夷山市| 海南省| 沙坪坝区| 仁布县|