Activiti进阶(九)——接收任务(ReceiveTask)
2015-12-23 11:33
316 查看
接收任务(ReceiveTask)即等待任务,接收任务是一个简单任务,它会等待对应消息的到达。当前,官方只实现
了这个任务的java语义。 当流程达到接收任务,流程状态会保存到数据库中。在任务创建后,意味着流程会进入等
待状态,直到引擎接收了一个特定的消息,
这会触发流程穿过接收任务继续执行。
一、流程图
图一 等待任务流程图
在这里,我们使用每日向老板汇总当日销售额为例,来演示一下等待任务。
二、流程演示
说明:与用户任务(UserTask)不同的是,接收任务(ReceiveTask)创建后,会进入一个等待状态,一般指机器自动完成,但需要耗费一定时间的工作,当完成工作后后,向后推移流程,在上面的代码中也就是向下执行一步,使用runtimeService.signal(executionId),传递接收执行对象的id。
三、数据库表分析
1.流程定义表:act_re_procdef
2.执行对象表:act_ru_execution:receiveTask1
3.流程变量表:act_ru_variable
4.执行对象表:act_ru_execution:receiveTask2
总结:
简单介绍了一下等待任务,和我们之前用户任务不太一样的是,在等待任务执行的时候,act_ru_task表中是没有数据的,只有任务节点(UserTask),该表中才有数据。
了这个任务的java语义。 当流程达到接收任务,流程状态会保存到数据库中。在任务创建后,意味着流程会进入等
待状态,直到引擎接收了一个特定的消息,
这会触发流程穿过接收任务继续执行。
一、流程图
图一 等待任务流程图
在这里,我们使用每日向老板汇总当日销售额为例,来演示一下等待任务。
二、流程演示
package cn.gome.j_receiveTask; import java.io.InputStream; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.repository.Deployment; import org.activiti.engine.runtime.Execution; import org.activiti.engine.runtime.ProcessInstance; import org.junit.Test; public class ReceiveTaskTest { //流程引擎对象 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /**部署流程定义+启动流程实例*/ @Test public void deployementAndStartProcess(){ InputStream inputStreamBpmn = this.getClass().getResourceAsStream("receiveTask.bpmn"); InputStream inputStreamPng = this.getClass().getResourceAsStream("receiveTask.png"); //1.部署流程定义 Deployment deployment = processEngine.getRepositoryService() .createDeployment()//创建部署对象 .addInputStream("receiveTask.bpmn", inputStreamBpmn) .addInputStream("receiveTask.png", inputStreamPng) .deploy(); System.out.println("部署ID:" + deployment.getId()); //2.启动流程实例 ProcessInstance pi = processEngine.getRuntimeService() .startProcessInstanceByKey("receiveTask");//使用流程定义的key的最新版本启动流程 System.out.println("流程实例ID:"+pi.getId()); System.out.println("流程定义ID:"+pi.getProcessDefinitionId()); //3.查询执行对象表,使用流程实例ID和当前活动的名称(receivetask1) String processInstanceId = pi.getId();//得到流程实例ID Execution execution1 = processEngine.getRuntimeService() .createExecutionQuery() .processInstanceId(processInstanceId)//流程实例ID .activityId("receivetask1")//当前活动的名称 .singleResult(); //4.使用流程变量设置当日的销售额 processEngine.getRuntimeService().setVariable(execution1.getId(), "当日销售额", 20000); //5.向后执行一步 processEngine.getRuntimeService() .signal(execution1.getId()); //6.查询执行对象表,使用流程实例ID和当前活动的名称(receivetask2) Execution execution2 = processEngine.getRuntimeService() .createExecutionQuery() .processInstanceId(processInstanceId) .activityId("receivetask2") .singleResult(); //7.获取流程变量,给老板发送短信 Integer value = (Integer) processEngine.getRuntimeService() .getVariable(execution2.getId(), "当日销售额"); System.out.println("给老板发送短信:内容,当日销售额:"+value); //8.向后执行一步 processEngine.getRuntimeService() .signal(execution2.getId()); //9.判断流程是否结束 ProcessInstance nowPi = processEngine.getRuntimeService() .createProcessInstanceQuery() .processInstanceId(pi.getId()) .singleResult(); if(nowPi == null){ System.out.println("流程结束"); } } }
说明:与用户任务(UserTask)不同的是,接收任务(ReceiveTask)创建后,会进入一个等待状态,一般指机器自动完成,但需要耗费一定时间的工作,当完成工作后后,向后推移流程,在上面的代码中也就是向下执行一步,使用runtimeService.signal(executionId),传递接收执行对象的id。
三、数据库表分析
1.流程定义表:act_re_procdef
2.执行对象表:act_ru_execution:receiveTask1
3.流程变量表:act_ru_variable
4.执行对象表:act_ru_execution:receiveTask2
总结:
简单介绍了一下等待任务,和我们之前用户任务不太一样的是,在等待任务执行的时候,act_ru_task表中是没有数据的,只有任务节点(UserTask),该表中才有数据。
相关文章推荐
- 数组-push和pop unshift和shift
- Java理论与实践:正确使用volatile 变量
- Java笔记11:JSP连接Oracle数据库
- iOS本地通知
- Ansible安装问题汇总(yum修复问题)
- Linux ACL
- Tomcat:IOException while loading persisted sessions: java.io.EOFException解决手记
- (转)阴影锥(Shadow Volume)
- Objective-C 排序
- jdbc操作步骤
- linux bin文件制作
- 169. Majority Element
- FFMPEG中常用的几种结构体
- 深入浅出HTTP协议(WEB开发和面试必备)
- Linux下针对路由功能配置iptables的方法详解
- JavaScript
- ElasticSearch学习7_elasticsearch配置小记
- 不常用的日期:NSCalendar + NSDateComponents
- 如何使用openssl生成RSA公钥和私钥对
- 获取用户真实的IP