ProcessEngine processEngine = Configuration.getProcessEngine();
1、RepositoryService repositoryService = processEngine.getRepositoryService();
2、ExecutionService executionService = processEngine.getExecutionService(); 3、TaskService taskService = processEngine.getTaskService(); 4、HistoryService historyService = processEngine.getHistoryService(); 5、ManagementService managementService = processEngine.getManagementService(); --------------------------------------------------------------- RepositoryService repositoryService = processEngine.getRepositoryService(); 包含了用来管理发布资源的所有方法。 1、发布: String deploymentid = repositoryService.createDeployment() .addResourceFromClasspath("org/jbpm/examples/services/Order.jpdl.xml")
.deploy();
2、删除 repositoryService.deleteDeployment(deploymentId); ---------------------------------------------------------
ExecutionService executionService = processEngine.getExecutionService(); 1、启动实例 ProcessInstance processInstance = executionService.startProcessInstanceById("ICL-1");
2、执行等待流程: <state name="wait"> <on event="start"> <event-listener class="org.jbpm.examples.StartExternalWork" /> </on> ... </state> 在事件监听器StartExternalWork中,你可以执行那些需要额外完成的部分。 在这个时间 监听器里,你也可以通过execution.getId()获得确切的流程id。 那个流程id,在额外的
工作完成后, 你会需要它来提供给signal操作的:
executionService.signalExecutionById(executionId); 也可换下面的方式: workProcessInstance processInstance = executionService.startProcessInstanceById(processDefinitionId);
// or ProcessInstance processInstance =executionService.signalProcessInstanceById(executionId);
Execution execution = processInstance.findActiveExecutionIn("externalwork"); String executionId = execution.getId(); --------------------------------------------------------- TaskService taskService = processEngine.getTaskService(); TaskService的主要目的是提供对任务列表的访问途径。 1、用户任务集合 List<Task> taskList = taskService.findPersonalTasks("johndoe"); 一般来说,任务会对应一个表单,然后显示在一些用户接口中。 表单需要可以读写与任务相关的数据。 // read task
variablesSet<String> variableNames = taskService.getVariableNames(taskId); variables = taskService.getVariables(taskId, variableNames); // write task variablesvariables = new HashMap<String, Object>(); variables.put("category", "small"); variables.put("lires", 923874893);t askService.setVariables(taskId, variables); taskSerice也用来完成任务。 taskService.completeTask(taskId); taskService.completeTask(taskId, variables); taskService.completeTask(taskId, outcome); 这些API允许提供一个变量map,它在任务完成之前作为流程变量添加到流程里。 它也可 能提供一个“外出outcome”,这会用来决定哪个外出转移会被选中。 逻辑如下所示:
如果一个任务拥有一个没用名称的外向转移:
taskService.getOutcomes() 返回包含一个null值集合,。
taskService.completeTask(taskId) 会使用这个外向转移。 taskService.completeTask(taskId, null) 会使用这个外向转移。 taskService.completeTask(taskId, "anyvalue") 会抛出一个异常。 如果一个任务拥有一个有名字的外向转移: gtaskService.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'的转移 taskService.completeTask(taskId, outcome, variables);
------------------------------------------------------------------------- HistoryService historyService = processEngine.getHistoryService(); 在流程实例执行的过程中,会不断触发事件。 从那些事件中,运行和完成流程的历史信 息会被收集到历史表中。 HistoryService提供了 对那些信息的访问功能。
如果想查找某一特定流程定义的所有流程实例, 可以像这样操作:
List<HistoryProcessInstance> historyProcessInstances = historyService
.createHistoryProcessInstanceQuery()
.processDefinitionId("ICL-1")
.orderAsc(HistoryProcessInstanceQuery.PROPERTY_STARTTIME)
.list();
HistoryProcessInstanceQuery的参数有:
PROPERTY_DURATION 按时间排序
PROPERTY_ENDTIME 按结束时间排序
PROPERTY_ID 按ID
PROPERTY_KEY 按关键字
PROPERTY_STARTTIME 按开始时间
PROPERTY_STATE 按状态
单独的活动流程也可以作为HistoryActivityInstance 保存到历史信息中。
List<HistoryActivityInstance> histActInsts = historyService
.createHistoryActivityInstanceQuery()
.processDefinitionId("ICL-1")
.activityName("a")
.list();
也可以使用简易方法avgDurationPerActivity和 choiceDistribution。 可以通过javadocs获得这些方法的更多信息。 有时,我们需要获得指定流程实例已经过的节点的完整列表。 下面的查询语句可以用来
获得所有已经执行的节点列表:
List<HistoryActivityInstance> histActInsts = historyService
.createHistoryActivityInstanceQuery()
.processInstanceId("ICL.12345")
.list();
上面的查询与通过execution id查询有一些不同。有时execution id和流程实例id是不同 的, 当一个节点中使用了定时器,这就会导致当execution id中就会使用额外的后缀,
我们通过execution id查询时, 这个节点不会出现在结果列表中。
-----------------------------------------------------------------
ManagementService managementService = processEngine.getManagementService(); 从jBPM 4.0开始,一个新的API被介绍使用查询系统, 可以覆盖大多数你可以想到的查询 List<ProcessInstance> results =
executionService.createProcessInstanceQuery()
.processDefinitionId("my_process_definition")
.notSuspended()
.page(0, 50)
.list();
这个例子返回指定流程定义的所有流程实例, 流程定义不是暂停的。 结果支持分页,第
一页的前50条数据 会被我们获得。
查询任务也可以使用相同的方式完成:
List<Task> myTasks = taskService.createTaskQuery()
.processInstanceId(piId)
.assignee("John")
.page(100, 120)
.orderDesc(TaskQuery.PROPERTY_DUEDATE)
.list();
这个查询会获得指定流程实例,分配给John的所有任务, 也使用分页,对duedate进行逆 序查询。
管理服务通常用来管理job。可以通过javadocs获得这些方法的更多信息。 这个功能也是 通过控制台暴露出来
|
|