本章描述了jBPM的商务日历。商务日历知道关于业务小时和用于任务和定时器的到期的计算。
商务日历能够通过在基准日期(base datea)上加或减去一个持续时间(duration to)来计算到期日期。如果基准日期被忽略,那么会使用当前('current')日期。
正像提到的那样,到期日期是由持续时间(duration)和基准日期(base date)。如果这个基准日期被忽略,持续时间是相对于计算到期日期时的那个日期(时间)。格式是:
duedate ::= [<basedate> +/-] <duration>
持续时间被指定用绝对时(absolute)或工作时(business)。让我们看下语法:
A duration is specified in absolute or in business hours. Let's look at the syntax:
duration ::= <quantity> [business] <unit>
里面的 <quantity> 是一个可以使用Double.parseDouble(quantity)来解析的文本。<unit> 是{second, seconds, minute, minutes, hour, hours, day, days, week, weeks, month, months, year, years}中的一个。然后增加一个可选的指示business意味着只有工作时才能被放入持续时间的数量中。如果没有指示business,持续时间将作为一个绝对的时间周期来进行解释。
持续时间(duration)被指定绝对(absolute)时或工作(business)时。让我们看下语法:
basedate ::= <EL> +/-
其中的<EL>是任何的JAVA表达式语言表达式,可以解析成一个JAVA Date或Calendar对象。引用其他的对象类型变量,即使一个日期格式的String类型的变量(如'2036-02-12'),也会抛出一个JbpmException异常。
注意:这个基准日期(basedate)支持一个普通定时器、任务上提醒和任务内部定时器的duedate属性。但绝不支持这些元素内部的repeate属性。
下列是所有可能用法的例子:
<timer name="daysBeforeHoliday" duedate="5 business days">...</timer>
<timer name="pensionDate" duedate="#{dateOfBirth} + 65 years" >...</timer>
<timer name="pensionReminder" duedate="#{dateOfPension} - 1 year" >...</timer>
<timer name="fireWorks" duedate="#{chineseNewYear} repeat="1 year" >...</timer>
<reminder name="hitBoss" duedate="#{payRaiseDay} + 3 days" repeat="1 week" /> |
目录org/jbpm/calendar下的jbpm.business.calendar.properties文件指定了哪些是工作时。配置文件可以定制而且修改过的复本能够放置在类路径的根下。
这是在jbpm.business.calendar.properties文件中的一个发货的工作时清单的例子:
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.tuesday= 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 weekday.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 |