runtimeService 运行时服务组件

在Activiti中,启动一个流程后,会创建一个流程实例(ProcessInstance继承Execution(两个都是接口)),每个流程实例至少会有一个执行流(Execution),当流程实例没有流程分支时,一般情况下只会存在一个执行流,假设出现两个分支,则此时Activiti将会有三个执行流,第一个为原来的执行流,而其余两个为第一个执行流的子执行流。

act_ru_execution:流程实例和执行流的数据表(一般情况下两个为同一条数据,多个执行流时,自连接)
-->对应的映射实体为:ExecutionEntity
act_ru_event_subscr:事件描述的数据(CONFIGURATION_:流程定义ID)


1.启动
//Deployment_Id启动
// 部署流程描述文件
Deployment dep = repositoryService.createDeployment()
.addClasspathResource("bpmn/startById.bpmn20.xml").deploy();
// 查找流程定义
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()
.deploymentId(dep.getId()).singleResult();
//设置流程参数
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("days", 5);
//启动流程
runtimeService.startProcessInstanceById(pd.getId());
runtimeService.startProcessInstanceById(pd.getId(), vars);
runtimeService.startProcessInstanceById(pd.getId(), "vacationRequest1");
runtimeService.startProcessInstanceById(pd.getId(), "vacationRequest2", vars);
(第二个参数为String时,表示业务主键(对应BUSINESS_KEY_字段)),在同一个流程定义下,业务主键必须唯一
// 查询流程实例,结果为4
long count = runtimeService.createProcessInstanceQuery().count();
System.out.println("流程实例数量:" + count);、

//根据流程描述文件中定义的process节点的id属性来启动
// 部署流程描述文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/startByKey.bpmn20.xml").deploy();
//初始化流程参数
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("days", 4);
//启动流程
runtimeService.startProcessInstanceByKey("vacationRequest");
runtimeService.startProcessInstanceByKey("vacationRequest", vars);
runtimeService.startProcessInstanceByKey("vacationRequest", "testKey");
runtimeService.startProcessInstanceByKey("vacationRequest", "testKey2", vars);
(第二个参数:业务主键)
// 查询流程实例,结果为4
long count = runtimeService.createProcessInstanceQuery().count();
System.out.println("流程实例数量:" + count);

//根据消息事件的name属性启动 消息事件描述:act_ru_event_subscr
(查询流程定义ID,在启动流程)
// 部署流程描述文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/startByMessage.bpmn20.xml").deploy();
//初始化流程参数
Map<String, Object> vars = new HashMap<String, Object>();
vars.put("days", 4);
//启动流程
runtimeService.startProcessInstanceByMessage("startMsg");
runtimeService.startProcessInstanceByMessage("startMsg", vars);
runtimeService.startProcessInstanceByMessage("startMsg", "testKey");
runtimeService.startProcessInstanceByMessage("startMsg", "testKey2", vars);
// 查询流程实例,结果为4
long count = runtimeService.createProcessInstanceQuery().count();
System.out.println("流程实例数量:" + count);

2.参数(和任务参数类似)
setVariable:整个流程中都可以使用
setVariableLocal:只作用于设置的执行流
//简单demo
// 部署流程描述文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/variables.bpmn20.xml").deploy();
//启动流程
ProcessInstance pi = runtimeService.startProcessInstanceByKey("vacationRequest");
//查询流程实例的执行流(此处,流程实例和流程实例的主执行流实际上是同一条记录(ID))
Execution exe = runtimeService.createExecutionQuery().processInstanceId(pi.getId()).singleResult();
//设置流程参数
runtimeService.setVariable(exe.getId(), "days", 5);
//查找参数
System.out.println("获取流程参数:" + runtimeService.getVariable(exe.getId(), "days"));
//作用域demo
// 部署流程描述文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/localVariable.bpmn20.xml").deploy();
//启动流程
ProcessInstance pi = runtimeService.startProcessInstanceByKey("vacationRequest");
//查询全部的任务,得到相应的执行流,设置不同的参数
List<Task> tasks = taskService.createTaskQuery().processInstanceId(pi.getId()).list();
for (Task task : tasks) {
Execution exe = runtimeService.createExecutionQuery()
.executionId(task.getExecutionId()).singleResult();
if ("Manager Audit".equals(task.getName())) {
//经理审核节点,设置Local参数
runtimeService.setVariableLocal(exe.getId(), "managerVar", "manager var");
} else {
//HR审核节点,设置全局参数
runtimeService.setVariable(exe.getId(), "hrVar", "hr var");
}
}
//两个执行流时输出参数
for (Task task : tasks) {
Execution exe = runtimeService.createExecutionQuery()
.executionId(task.getExecutionId()).singleResult();
if ("Manager Audit".equals(task.getName())) {
System.out.println("使用getVariableLocal方法获取经理参数:" +
runtimeService.getVariableLocal(exe.getId(), "managerVar"));
System.out.println("使用getVariable方法获取经理参数:" +
runtimeService.getVariableLocal(exe.getId(), "managerVar"));
} else {
System.out.println("使用getVariableLocal方法获取HR参数:" +
runtimeService.getVariableLocal(exe.getId(), "hrVar"));
System.out.println("使用getVariable方法获取HR参数:" +
runtimeService.getVariable(exe.getId(), "hrVar"));
}
}
//完成任务
for (Task task : tasks) {
taskService.complete(task.getId());
}
System.out.println("======== 完成流程分支后 ========");
//重新查找流程任务
tasks = taskService.createTaskQuery().processInstanceId(pi.getId()).list();
for (Task task : tasks) {
System.out.println("当前流程节点:" + task.getName());
Execution exe = runtimeService.createExecutionQuery()
.executionId(task.getExecutionId()).singleResult();
System.out.println("经理参数:" + runtimeService.getVariable(exe.getId(), "managerVar"));
System.out.println("HR参数:" + runtimeService.getVariable(exe.getId(), "hrVar"));
}

3.发送信号
// 部署流程描述文件
repositoryService.createDeployment()
.addClasspathResource("bpmn/MessageEvent.bpmn").deploy();
// 开始流流程
runtimeService.startProcessInstanceByKey("testProcess");
// 查询流执行流
List<Execution> exes = runtimeService.createExecutionQuery()
.processDefinitionKey("testProcess").list();
System.out.println("遇到消息事件节点,执行流数量:" + exes.size());
// 根据事件名称查询当前事件所在的执行流
Execution exe = runtimeService.createExecutionQuery()
.activityId("messageintermediatecatchevent1").singleResult();
// 触发消息事件
runtimeService.messageEventReceived("testMsg", exe.getId(), null);
// 查询执行流
exes = .createExecutionQuery().processDefinitionKey("testProcess").list();
System.out.println("触发消息事件节点后,执行流数量:" + exes.size());


























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值