【转】JBPM4 - TaskService

TaskService的主要目的是提供对任务列表的访问途径。 例子代码会展示出如何为id为johndoe 的用户获得任务列表

List<Task> taskList = taskService.findPersonalTasks("johndoe"); 

一般来说,任务会对应一个表单,然后显示在一些用户接口中。 表单需要可以读写与任务相关的数据。

// read task variables 
Set<String> variableNames = taskService.getVariableNames(taskId); 
variables = taskService.getVariables(taskId, variableNames); 

// write task variables 
variables = new HashMap<String, Object>(); 
variables.put("category", "small"); 
variables.put("lires", 923874893); 
taskService.setVariables(taskId, variables); 


taskSerice也用来完成任务。
taskService.completeTask(taskId); 
taskService.completeTask(taskId, variables); 
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, "anyvalue") 会抛出一个异常。

如果一个任务拥有一个有名字的外向转移:
taskService.getOutcomes() 返回包含这个转移名称的集合。
taskService.completeTask(taskId) 会使用这个单独的外向转移。
taskService.completeTask(taskId, null) 会抛出一个异常(因为这里没有无名称的转移)。
taskService.completeTask(taskId, "anyvalue") 会抛出一个异常。
taskService.completeTask(taskId, "myName") 会根据给定的名称使用转移。

如果一个任务拥有多个外向转移,其中一个转移没有名称,其他转移都有名称:
taskService.getOutcomes() 返回包含一个null值和其他转移名称的集合。
taskService.completeTask(taskId) 会使用没有名字的转移。
taskService.completeTask(taskId, null) 会使用没有名字的转移。
taskService.completeTask(taskId, "anyvalue") 会抛出异常。
taskService.completeTask(taskId, "myName") 会使用名字为'myName'的转移。

如果一个任务拥有多个外向转移,每个转移都拥有唯一的名字:
taskService.getOutcomes() 返回包含所有转移名称的集合。
taskService.completeTask(taskId) 会抛出异常,因为这里没有无名称的转移。
taskService.completeTask(taskId, null) 会抛出异常,因为这里没有无名称的转移。
taskService.completeTask(taskId, "anyvalue") 会抛出异常。
taskService.completeTask(taskId, "myName") 会使用名字为'myName'的转移。

任务可以拥有一批候选人。候选人可以是用户也可以是用户组。用户可以接收自己是候选人的任务。接收任务的意思是用户会被设置为被分配给任务的人。在那之后,其他用户就不能接收这个任务了。

人们不应该在任务做工作,除非他们被分配到这个任务上。用户界面应该显示表单,如果他们被分配到这个任务上,就允许用户完成任务。对于有了候选人,但是还没有分配的任务,唯一应该暴露的操作就是“接收任务”。

猜你喜欢

转载自nhy520.iteye.com/blog/1308532