Activiti入门教程九(玩转RuntimeService流程控制API)

这篇博客主要介绍了Activiti的RuntimeService如何在流程运行时进行控制,包括流程实例、执行流的管理以及各种查询和启动流程的方法。RuntimeService提供了如createExecutionQuery和createProcessInstanceQuery等查询操作,启动流程的方法如startProcessInstanceById、startProcessInstanceByKey和startProcessInstanceByMessage。此外,还提及了设置参数和参数作用域。
摘要由CSDN通过智能技术生成
               

     Activiti提供了流程运行时对流程进行控制的API,可以使用RuntimeService提供的方法对流程进行控制,与先前博客中提到的一样,RuntimeService是Activiti提供的业务组件之一。前几篇博客中介绍的TaskService主要用于任务管理,包括任务操作,任务数据管理等;IdentityService主要用于管理流程的身份数据;RepositoryService主要用于管理流程部署的数据;而本篇博客要学习的RuntimeService主要用于管理流程在运行时产生的数据以及提供对流程进行操作的API。其中流程运行时产生的数据包括流程参数、事件、流程实例以及执行流等。


     什么是流程实例与执行流

     在Activiti中,启动了一个流程后,就会创建一个流程实例(ProcessInstance),每个流程实例至少会有一个执行流(Execution);如果流程中出现了分支,那么执行流的概念就出现了。所以一个流程实例就是一个执行流,这就是区别所在。


 

     RuntimeService中的查询操作

     执行流查询

RuntimeService中有createExecutionQuery方法可以得到一个ExecutionQuery对象,该对象就可以根据执行流的相关数据查询执行流。直接看个例子吧!从实战中学习。


<span style="font-family:Comic Sans MS;font-size:18px;">public class ExecutionQuery public static void main(String[] args) {  // 创建流程引擎  ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();  // 得到流程存储服务实例  RepositoryService repositoryService = engine.getRepositoryService();  // 得到运行时服务组件  RuntimeService runtimeService = engine.getRuntimeService();  // 部署流程描述文件  repositoryService.createDeployment()    .addClasspathResource("bpmn/ExecutionQuery.bpmn").deploy();  //设置参数  Map<String, Object> vars1 = new HashMap<String, Object>();  vars1.put("days", 5);  Map<String, Object> vars2 = new HashMap<String, Object>();  vars2.put("days", 6);  Map<String, Object> vars3 = new HashMap<String, Object>();  vars3.put("days", 7);  vars3.put("name", "crazyit");  // 开始流流程  ProcessInstance pi1 = runtimeService.startProcessInstanceByKey("testProcess",     "businessKey1", vars1);  ProcessInstance pi2 = runtimeService.startProcessInstanceByKey("testProcess",     "businessKey2", vars2);  ProcessInstance pi3 = runtimeService.startProcessInstanceByKey("testProcess",     "businessKey3", vars3);  // 使用执行流查询方法  List<Execution> exes = runtimeService.createExecutionQuery()    .processDefinitionKey("testProcess").list();  System.out.println("使用processDefinitionKey方法查询执行流:" + exes.size());    exes = runtimeService.createExecutionQuery()    .processInstanceBusinessKey("businessKey1").list();  System.out.println("使用processInstanceBusinessKey方法查询执行流:" + exes.size());    exes = runtimeService.createExecutionQuery()    .messageEventSubscriptionName("messageName").list();  System.out.println("使用messageEventSubscriptionName方法查询执行流:" + exes.size());  // 根据节点id属性查询当前的执行流  Execution exe = runtimeService.createExecutionQuery()    .activityId("messageintermediatecatchevent1")    .processInstanceId(pi1.getId()).singleRes
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值