第 11 章 业务逻辑
阅读本章,了解流程管理器的日历功能,用于计算任务和计时器到期日期。
它通过添加或减去基本日期的持续时间来实现。(如果省略了基础日期,则默认使用当前日期。)
11.1. 过期日期 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
到期日期由一个持续时间和一个基本日期组成。使用的公式是:
duedate ::= [<basedate> +/-] <duration>
11.1.1. Duration 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用这个公式,以绝对或工作小时为单位指定持续时间:
duration ::= <quantity> [business] <unit>
在上面的计算中,
<quantity> 必须是可通过 Double.parseDouble (quantity) 解析的文本。<unit> 将是:秒、秒、分钟、小时、小时、小时、天、周、周、月、月或年之一。添加可选的 business 标志意味着在该持续时间中只考虑工作时间。(如果没有,该持续时间将解释为绝对时间段。)
11.1.2. 基本日期 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
基本日期以这种方式计算:
basedate ::= <EL>。
在以上公式中,
<EL> 可以是解析到 Java 日期或 Calendar 对象的 Java 表达式语言表达式。
警告
不要引用任何其他对象类型的变量,因为这会导致
JbpmException 错误。
在很多位置(它们是普通计时器的 duedate 属性)中支持基础日期,在任务提醒和任务中的计时器中被支持。但是,在这些元素的 repeat 属性中不支持它。
11.1.3. 到期日期示例 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下用法都有效:
<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" />
11.2. 日历配置 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在
org/jbpm/calendar/jbpm.business.calendar.properties 文件中定义工作小时。(要自定义此配置文件,请将修改的副本放在 classpath 的根目录中。)
这是
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
11.3. 例子 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下示例演示了可以使用的不同方法:
<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" />
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
本章停止了本章后,您现在了解业务 Calendar 的工作原理。