taskService.completeTask(taskId, outcome); taskService.completeTask(taskId, outcome, variables); 这些API允许提供一个变量map,它在任务完成之前作为流程变量添加到流程里。 它也可能提供一个“外出outcome”,这会用来决定哪个外出转移会被选中。 逻辑如下所示:
如果一个任务拥有一个没用名称的外向转移:
? ? ? ?
taskService.getOutcomes() 返回包含一个null值集合,。 taskService.completeTask(taskId) 会使用这个外向转移。
taskService.completeTask(taskId, null) 会使用这个外向转移。 taskService.completeTask(taskId, \会抛出一个异常。 如果一个任务拥有一个有名字的外向转移:
? ? ? ? ?
gtaskService.getOutcomes() 返回包含这个转移名称的集合。
taskService.completeTask(taskId) 会使用这个单独的外向转移。 taskService.completeTask(taskId, null) 会抛出一个异常(因为这里没有无名称的转移)。
taskService.completeTask(taskId, \会抛出一个异常。 taskService.completeTask(taskId, \会根据给定的名称使用转移。
如果一个任务拥有多个外向转移,其中一个转移没有名称,其他转移都有名称:
?
taskService.getOutcomes() 返回包含一个null值和其他转移名称的集合。
taskService.completeTask(taskId) 会使用没有名字的转移。 ? taskService.completeTask(taskId, null) 会使用没有名字的转移。 ? taskService.completeTask(taskId, \会抛出异常。 ? taskService.completeTask(taskId, \会使用名字为'myName'的转移。
?
如果一个任务拥有多个外向转移,每个转移都拥有唯一的名字:
? ? ? ? ?
taskService.getOutcomes() 返回包含所有转移名称的集合。
taskService.completeTask(taskId) 会抛出异常,因为这里没有无名称的转移。
taskService.completeTask(taskId, null) 会抛出异常,因为这里没有无名称的转移。
taskService.completeTask(taskId, \会抛出异常。 taskService.completeTask(taskId, \会使用名字为'myName'的转移。
任务可以拥有一批候选人。候选人可以是用户也可以是用户组。 用户可以接收自己是候选人的任务。 接收任务的意思是用户会被设置为被分配给任务的人。 在那之后,其他用户就不能接收这个任务了。
人们不应该在任务做工作, 除非他们被分配到这个任务上。 用户界面应该显示表单,并允许用户完成任务, 如果他们被分配到这个任务上。对于有了候选人,但是还没有分配的任务, 唯一应该暴露的操作就是“接收任务”。 更多的任务见第 6.2.6 节 “task” 。
5.8. HistoryService历史服务
在流程实例执行的过程中,会不断触发事件。 从那些事件中,运行和完成流程的历史信息会被收集到历史表中。 HistoryService提供了 对那些信息的访问功能。
如果想查找某一特定流程定义的所有流程实例, 可以像这样操作:
List
有时,我们需要获得指定流程实例已经过的节点的完整列表。 下面的查询语句可以用来获得所有已经执行的节点列表:
List
5.9. ManagementService管理服务
管理服务通常用来管理job。可以通过javadocs获得这些方法的更多信息。 这个功能也是通过控制台暴露出来。
5.10. 查询 API
从jBPM 4.0开始,一个新的API被介绍使用查询系统, 可以覆盖大多数你可以想到的查询。开发者需要编写企业特定查询时 当然也可以使用Hibenrate。但是对大多数用例来说, 查询API是不足够的。 查询可以写成同ideas方式,用于主要的jBPM概念: 流程实例,任务,发布,历史流程,等等。 比如:
List
List
每个服务拥有操作这些统一查询的功能(比如,查询job通过
ManagementService,查询完成的 流程实例通过HistoryService。 可以参考服务的javadoc了解这些查询API的所有细节。)
第 6 章 jPDL
这章将会解释用来描述流程定义的 jPDL文件格式。jDPL是jBPM的突出的流程语言。jPDL的目标 是尽量精简和尽可能的开发者友好,在提供所有你期望 从BPM流程语言中获得功能的同时。
jPDL的schema文件包含了比这个文档中更多的属性和元素。 这个文档解释了jPDL中稳定的被支持的部分。 试验性的、不支持的jPDL特性可以在开发者指南中找到。
下面是一个jPDL流程文件的例子:
顶级元素(element)是流程处理定义。 表 6.1. process流程处理的属性 属性 name名称 类型 文本 默认值 是否必须 必须 描述 在与用户交互时, 作为流程名字显示的一个名字或是标签。 key键 用来辨别不同的流程定字母如果省略,key中义。 拥有同一个key的流或数的非字母和非数可选程会有多个版本。 对于所字,下字的字符会被替(optional) 有已发布的流程版本,划线 换为 下划线。 key-name这种组合都必须是 完全一样的。 比已部署的key相同的流程版本号高1, 如果还没有与之相同的可选 key的流程被部署,那么版本就从1开始。 version整型 版本 流程的版本号 表 6.2. process流程的元素
元素 description描述 个数 0个或1个 描述文本 流程中会有很多活动, 至少要有1个是启动的活动。 描述 activities活动 至少1个 6.2. 控制流程Activities活动
6.2.1. start启动
说明一个流程的实例从哪里开始。 在一个流程里必须有一个开始节点。 一个流程必须至少拥有一个开始节点。 开始节点必须有一个向外的流向,这个流向会在流程启动的时候执行。