JBPM4.4工作流引擎学习(五)



执行服务ExecutionService

ExecutionService主要用于维护流程实例,执行等待状态的流程,并且包含了流程实例的查询和流程变量的操作。

.启动新的流程实例

1)使用Key启动最新的流程实例

executionService.startProcessInstanceByKey("VWIN");

上述方法会以KeyVWIN流程定义的最新版本启动一个新的流程实例,是最简单且最常用的方法。

  1. 指定流程版本

executionService.startProcessInstanceById("VWIN-2");

上述方法会以流程为VWIN-2的定义启动一个新的流程实例,VWIN是流程定义的Key2是流程定义的版本。

  1. 指定流程实例的ID

executionService.startProcessInstanceByKey("VWIN","CGD0008");

上述方法与第a种方法类似,唯一区别是手动指定了流程实例的ID,这个ID可以用我们的业务对象ID,例如采购单。

  1. 使用变量

Map<String,Object> variables = new HashMap<String,Object>(); variables.put("customer", "John Doe");

variables.put("type", "Accident");

variables.put("amount", new Float(763.74));

executionService.startProcessInstanceByKey("VWIN",variables);

上述方法在启动流程实例时,就会将设置的变量保存,启动后可以使用这些变量。任务服务TaskService

  1. 任务列表的访问

TaskService主要是提供了对任务列表的访问及操作,如:

//查找指定用户的任务列表

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

//查找指定组的任务列表

List<Task> groupTaskList = taskService.findGroupTasks("hr-group");

for (Task task : taskList) {

//TODO

taskService.completeTask(task.getId());

}

2) 读写相关数据

一般情况下,我们在执行任务时都会对应一个表单,表单可以读写任务的相关数据。

taskService.getVariable(taskId, variableName);

taskService.getVariables(taskId,variableNames); taskService.getVariableNames(taskId);

taskService.setVariables(taskId, variables);

3) 完成任务

我们可以通过以下几种方式完成任务:

taskService.completeTask(taskId);

taskService.completeTask(taskId,variables); taskService.completeTask(taskId,outcome); taskService.completeTask(taskId,outcome,variables);

我们可以提供一个map,在任务完成之前作为流程变量添加到流程实例中,也可以提供一个outcome(出口),以决定任务完成后的流向。但是我们需要注意任务的不同配置将会带来的问题:

taskService.getOutComes(taskId)

  1. 如果一个任务拥有一个没有nametransition

<task name="myTask">

<transition to="end"/>

</task>

taskService.getOutcomes(taskId);//返回一个包含null值的集合

taskService.completeTask(taskId);//使用这个

transition taskService.completeTask(taskId, variables);//使用这个transition

taskService.completeTask(taskId,outcome);//抛出异常

taskService.completeTask(taskId, outcome, variables);//抛出异常

  1. 如果一个任务拥有一个有nametransition

<task name="myTask">

<transition name="to end" to="end"/>

</task>

taskService.getOutcomes(taskId);//返回包含这个transition名称的集合 taskService.completeTask(taskId);//使用这个transition

taskService.completeTask(taskId, variables); //抛出异常(因为没有无名的transition

taskService.completeTask(taskId, outcome);//根据指定的名称执行转移(如果没有该名称,则抛出异常)

taskService.completeTask(taskId, outcome, variables);//抛出异常(因为没有无名的transition

  1. 如果一个任务拥有多个transition,而其中一个没有name,其他都有name

<task name="myTask">

<transition to="next"/>

<transition name="to other task" to="otherTask"/>

<transition name="to end" to="end"/>

</task>

taskService.getOutcomes(taskId);//返回一个包含null值和其他transition名称的集合

taskService.completeTask(taskId);//使用没有名称的transition

taskService.completeTask(taskId, variables);//使用没有名称的transition

taskService.completeTask(taskId, outcome);//使用指定名称的transition

taskService.completeTask(taskId, outcome, variables);//使用指定名称的transition

  1. 如果一个任务拥有多个transition,并且都有唯一的name

<task name="myTask">

<transition name="to next" to="next"/>

<transition name="to other task" to="otherTask"/>

<transition name="to end" to="end"/> </task> taskService.getOutcomes(taskId);//返回一个包含null值和其他transition名称的集合

taskService.completeTask(taskId);//抛出异常(因为没有无名的transitiontaskService.completeTask(taskId, variables); //抛出异常(因为没有无名的 transition

taskService.completeTask(taskId, outcome);//使用指定名称的transition

taskService.completeTask(taskId, outcome, variables);//使用指定名称的transition

历史服务HistoryService

历史服务顾名思义就是对流程实例的运行时历史进行访问,如果想查询某流程定义的所有历史流程实例,可以使用如下方法:

historyService.createHistoryProcessInstanceQuery() .processDefinitionId(processDefinitionId

.orderAsc(HistoryProcessInstanceQuery.PROPERTY_STARTTIME) .list();

 
 

以上是我们常用的几个服务

你可能感兴趣的:(jbpm,工作流引擎)