分享

jbpm 4.4 service 概述

 怀旧妞妞 2010-11-19
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获得这些方法的更多信息。 这个功能也是
通过控制台暴露出来
 
 
 
 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多