posts - 26,  comments - 7,  trackbacks - 0

          作者:   wf_7758520
           

           

          這次就說說jBPM的業務日歷。

          這是官方的定義,現在看不明白沒關系,我會慢慢解釋。是一個文本塊,它是可以使用Double.parseDouble(quantity)所解析的,也就是說是一個數字;是{second,secondsminute,minutes,hourhours,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.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   這段時間為上班時間也就是業務時間,星期六和星期日沒有定義也就是放假的時間,再往下就是定義了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結束?,F在就可以來區別業務時間和絕對時間了,假設我是在星期五的早上10點啟動了這個timer,那它第一次執行action的方法是在什么時候呢?因為這里的定義是有加上business的所以要結束工作日歷的定義來算了。工作日歷中定義了星期六和星期天是不上班的(沒有定義),所以在計算時間時就跳過,要到星期三到早上10點(這時只是執行完duedate的時間也就是第一次觸發action的時間),到星期五早上10點第二次觸發action,到下個星期二早上第二次觸發action(因為星期六和星期日沒定義不是業務時間),以此類推。如果在timer定義時沒有加上business的話,就以絕對時間進行計算,也就是在星期一的10點第一次觸發action,到星期三10點第二次觸發action,以此類推。

           

          posted on 2007-09-19 17:40 jbpm 閱讀(911) 評論(1)  編輯  收藏 所屬分類: jbpm實例
          主站蜘蛛池模板: 丹阳市| 华亭县| 涟源市| 金门县| 永修县| 徐闻县| 乐清市| 岳西县| 上杭县| 长春市| 梁平县| 涿鹿县| 安阳县| 吴江市| 乌鲁木齐市| 深水埗区| 青岛市| 阜新市| 桓台县| 商都县| 双桥区| 安福县| 中西区| 蓬莱市| 宣武区| 凌云县| 黄大仙区| 孙吴县| 峨眉山市| 西乡县| 岳普湖县| 吉安市| 隆安县| 永州市| 安岳县| 郧西县| 台前县| 尚志市| 游戏| 玛多县| 安多县|