您的位置:首页 > 产品设计 > 产品经理

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

2016-07-05 11:44 429 查看


执行服务ExecutionService


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

1.启动新的流程实例


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


executionService.startProcessInstanceByKey("VWIN");
上述方法会以Key为VWIN流程定义的最新版本启动一个新的流程实例,是最简单且最常用的方法。

指定流程版本

executionService.startProcessInstanceById("VWIN-2");
上述方法会以流程为VWIN-2的定义启动一个新的流程实例,VWIN是流程定义的Key,2是流程定义的版本。

指定流程实例的ID


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

使用变量


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


任务列表的访问

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)

如果一个任务拥有一个没有name的transition:


<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);//抛出异常

如果一个任务拥有一个有name的transition:


<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)
如果一个任务拥有多个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

如果一个任务拥有多个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);//抛出异常(因为没有无名的transition)
taskService.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();

以上是我们常用的几个服务
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: