Activiti进阶(九)——接收任务(ReceiveTask)
接收任务(ReceiveTask)即等待任务,接收任务是一个简单任务,它会等待对应消息的到达。当前,官方只实现
了这个任务的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();/**部署流程定义+启动流程实例*/@Testpublic 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();//得到流程实例IDExecution 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),该表中才有数据。
Activiti进阶(九)——接收任务(ReceiveTask)相关推荐
- python进阶九_网络编程
Python网络编程一 一.一些基本概念 在Python网络编程这一节中会涉及到很多网络相关的术语,对于一些最基本的概念,如TCP/IP,Socket等等不再赘述,不明白的可以自己去查一查,对于一些常 ...
- Activiti进阶
一.流程实例 1.1.什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实例. 例如:用户或程序按照流程定义内容发起一个流程,这就是一个流程实例. 1.2.启动流程实例 并添 ...
- Activiti进阶(一)——HelloWorld
任何知识的学习都是有简入繁,我们的Activiti也不例外,这篇博文将通过一个简单的HelloWorld来带大家认识一下我们的Activiti; 一.画流程图 在画流程图之前,要确保自己的Eclips ...
- Activiti进阶-个人任务
二.个人任务 2.1.分配任务负责人 2.1.1.固定分配 在进行业务流程建模时指定固定的任务负责人, 如图: 并在 properties 视图中,填写 Assignee 项为任务负责人. 2.1.2 ...
- Android学习笔记进阶九之Matrix对称变换
网上很多的倒影特效实际上就是一个对称变换,在改变透明度即可. Matrix对称变换包括很多种,有关于Y轴对称,关于X轴对称,关于y= -x对称等等. 1 关于Y轴对称 [java] view plai ...
- Activiti进阶(七)——排他网关(ExclusiveGateWay)
转载地址:http://blog.csdn.net/zjx86320?viewmode=contents 上一篇博文我们简单介绍了一下连线,也分析了一种情况,就是在工作流中,用户任务下面有两个连线,如 ...
- Python进阶(九)Python陷阱:Nonetype
今天解决一位网友的问题,内容如下: 请教代码问题 def calc_prod(lst):def ff():print map(lambda x:x*x,lst)return fff = calc_pr ...
- 工作流引擎 Activiti 万字详细进阶
Activiti进阶 一.流程实例 什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实例. 一个流程实例包括了所有的运行节点.我们可以利用这个对象来了解当前流程实例的进度等 ...
- Activiti 接收任务活动
流程中往往需要特定人接受任务并进行一定操作才能继续进行下去. 代码如下 import java.io.InputStream;import org.activiti.engine.ProcessEng ...
最新文章
- 【Go语言】LiteIDE使用的个人使用方法
- 【深度学习】像素级分割网络新思路之DeepLabv3+
- javascript读取xml文件读取节点数据的例子
- python文件存储过程_python调用MySql存储过程
- 寻找数组变化:树形结构,分治模型
- c++exe程序在别人电脑上双击无法打开_Windows10电脑磁盘占用率过高,用这二招轻松解决...
- bzoj1783: [Usaco2010 Jan]Taking Turns
- 全国英语等级考试网上报名
- 中职计算机办公自动化教学,中职学校计算机办公自动化教学现状分析.pdf
- 前端实现——html2pdf功能(完成)
- 高中计算机绘画教,高中美术电脑绘画教案.doc
- 使用pytorch实现LSTM自动AI作诗(藏头诗和首句续写)
- 自定义桌面图标!制作属于自己的个性化桌面吧(=^x^=)
- 边缘计算助力产业数字化转型
- Gas Station (环形加油站)
- MySQL 安装失败 Failed to find valid data directory
- T6客户档案-供应商-存货名称不能录入空格--sql 怎么去掉最后一个字符
- Eclipse中文语言包安装和设置中文
- 极性电容为什么具有单向导电性(阀金属与氧化膜)
- LTspice基础教程-020.绘制伯德图
热门文章
- 漫画带你图解强化学习
- Android 节约用电技巧
- 2018年中国民营企业进出口12.1万亿元 增长12.9%
- PostgreSQL中函数json_populate_recordset的参数null::myrowtype如何使用
- Mac mkdir创建文件夹 提示Permission denied
- 19.CF803G Periodic RMQ Problem 线段树+分块+线段树标记
- SSM框架整合—详细整合教程(Spring+SpringMVC+MyBatis)
- Android-application
- ❤啊!这就被黑了?❤ Redis 报 EXECABORT Transaction discarded because of previous errors 错误及解决方案❤️
- ubuntu解决Error in skin config file at line 6: PNG read error in usr/share/mplayer/skins/default/main