posts - 26,  comments - 7,  trackbacks - 0

          作者:   wf_7758520
           

           

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

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

          什么叫業(yè)務(wù)時(shí)間,什么叫絕對時(shí)間?我就用jbpm的例子說明。文件org/jbpm/calendar/jbpm.business.calendar.properties指定了什么是業(yè)務(wù)時(shí)間,該配置文件可以被定制并且修改后的拷貝可被放在classpath根。                 下面是業(yè)務(wù)時(shí)間規(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   這段時(shí)間為上班時(shí)間也就是業(yè)務(wù)時(shí)間,星期六和星期日沒有定義也就是放假的時(shí)間,再往下就是定義了12個(gè)節(jié)假日,最后是一些工作時(shí)長的統(tǒng)計(jì)如一天8小時(shí),一個(gè)星期40小時(shí)等。

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

          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>   

          這里的定時(shí)器(timer)的名字是reminder,它的duedate定義的是3 business day,repeat定義的是2 business day也就是說從定時(shí)器啟動開始在3個(gè)業(yè)務(wù)日的時(shí)間后每隔兩個(gè)業(yè)務(wù)日執(zhí)行一次action的方法,直到timer結(jié)束。現(xiàn)在就可以來區(qū)別業(yè)務(wù)時(shí)間和絕對時(shí)間了,假設(shè)我是在星期五的早上10點(diǎn)啟動了這個(gè)timer,那它第一次執(zhí)行action的方法是在什么時(shí)候呢?因?yàn)檫@里的定義是有加上business的所以要結(jié)束工作日歷的定義來算了。工作日歷中定義了星期六和星期天是不上班的(沒有定義),所以在計(jì)算時(shí)間時(shí)就跳過,要到星期三到早上10點(diǎn)(這時(shí)只是執(zhí)行完duedate的時(shí)間也就是第一次觸發(fā)action的時(shí)間),到星期五早上10點(diǎn)第二次觸發(fā)action,到下個(gè)星期二早上第二次觸發(fā)action(因?yàn)樾瞧诹托瞧谌諞]定義不是業(yè)務(wù)時(shí)間),以此類推。如果在timer定義時(shí)沒有加上business的話,就以絕對時(shí)間進(jìn)行計(jì)算,也就是在星期一的10點(diǎn)第一次觸發(fā)action,到星期三10點(diǎn)第二次觸發(fā)action,以此類推。

           

          posted on 2007-09-19 17:40 jbpm 閱讀(916) 評論(1)  編輯  收藏 所屬分類: jbpm實(shí)例
          主站蜘蛛池模板: 潼南县| 开平市| 中超| 宜丰县| 斗六市| 江西省| 株洲县| 黄大仙区| 滁州市| 竹溪县| 玛曲县| 昂仁县| 湟源县| 东兴市| 沙洋县| 休宁县| 杭锦旗| 怀仁县| 弥勒县| 莲花县| 辽阳县| 疏勒县| 关岭| 桓台县| 南郑县| 上思县| 疏附县| 龙岩市| 吉木乃县| 剑阁县| 托里县| 临颍县| 临泽县| 葫芦岛市| 桂东县| 自治县| 香格里拉县| 钦州市| 鄂伦春自治旗| 望城县| 华蓥市|