接收任务(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)相关推荐

  1. python进阶九_网络编程

    Python网络编程一 一.一些基本概念 在Python网络编程这一节中会涉及到很多网络相关的术语,对于一些最基本的概念,如TCP/IP,Socket等等不再赘述,不明白的可以自己去查一查,对于一些常 ...

  2. Activiti进阶

    一.流程实例 1.1.什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实例. 例如:用户或程序按照流程定义内容发起一个流程,这就是一个流程实例. 1.2.启动流程实例 并添 ...

  3. Activiti进阶(一)——HelloWorld

    任何知识的学习都是有简入繁,我们的Activiti也不例外,这篇博文将通过一个简单的HelloWorld来带大家认识一下我们的Activiti; 一.画流程图 在画流程图之前,要确保自己的Eclips ...

  4. Activiti进阶-个人任务

    二.个人任务 2.1.分配任务负责人 2.1.1.固定分配 在进行业务流程建模时指定固定的任务负责人, 如图: 并在 properties 视图中,填写 Assignee 项为任务负责人. 2.1.2 ...

  5. Android学习笔记进阶九之Matrix对称变换

    网上很多的倒影特效实际上就是一个对称变换,在改变透明度即可. Matrix对称变换包括很多种,有关于Y轴对称,关于X轴对称,关于y= -x对称等等. 1 关于Y轴对称 [java] view plai ...

  6. Activiti进阶(七)——排他网关(ExclusiveGateWay)

    转载地址:http://blog.csdn.net/zjx86320?viewmode=contents 上一篇博文我们简单介绍了一下连线,也分析了一种情况,就是在工作流中,用户任务下面有两个连线,如 ...

  7. Python进阶(九)Python陷阱:Nonetype

    今天解决一位网友的问题,内容如下: 请教代码问题 def calc_prod(lst):def ff():print map(lambda x:x*x,lst)return fff = calc_pr ...

  8. 工作流引擎 Activiti 万字详细进阶

    Activiti进阶 一.流程实例 什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实例. 一个流程实例包括了所有的运行节点.我们可以利用这个对象来了解当前流程实例的进度等 ...

  9. Activiti 接收任务活动

    流程中往往需要特定人接受任务并进行一定操作才能继续进行下去. 代码如下 import java.io.InputStream;import org.activiti.engine.ProcessEng ...

最新文章

  1. 【Go语言】LiteIDE使用的个人使用方法
  2. 【深度学习】像素级分割网络新思路之DeepLabv3+
  3. javascript读取xml文件读取节点数据的例子
  4. python文件存储过程_python调用MySql存储过程
  5. 寻找数组变化:树形结构,分治模型
  6. c++exe程序在别人电脑上双击无法打开_Windows10电脑磁盘占用率过高,用这二招轻松解决...
  7. bzoj1783: [Usaco2010 Jan]Taking Turns
  8. 全国英语等级考试网上报名
  9. 中职计算机办公自动化教学,中职学校计算机办公自动化教学现状分析.pdf
  10. 前端实现——html2pdf功能(完成)
  11. 高中计算机绘画教,高中美术电脑绘画教案.doc
  12. 使用pytorch实现LSTM自动AI作诗(藏头诗和首句续写)
  13. 自定义桌面图标!制作属于自己的个性化桌面吧(=^x^=)
  14. 边缘计算助力产业数字化转型
  15. Gas Station (环形加油站)
  16. MySQL 安装失败 Failed to find valid data directory
  17. T6客户档案-供应商-存货名称不能录入空格--sql 怎么去掉最后一个字符
  18. Eclipse中文语言包安装和设置中文
  19. 极性电容为什么具有单向导电性(阀金属与氧化膜)
  20. LTspice基础教程-020.绘制伯德图

热门文章

  1. 漫画带你图解强化学习
  2. Android 节约用电技巧
  3. 2018年中国民营企业进出口12.1万亿元 增长12.9%
  4. PostgreSQL中函数json_populate_recordset的参数null::myrowtype如何使用
  5. Mac mkdir创建文件夹 提示Permission denied
  6. 19.CF803G Periodic RMQ Problem 线段树+分块+线段树标记
  7. SSM框架整合—详细整合教程(Spring+SpringMVC+MyBatis)
  8. Android-application
  9. ❤啊!这就被黑了?❤ Redis 报 EXECABORT Transaction discarded because of previous errors 错误及解决方案❤️
  10. ubuntu解决Error in skin config file at line 6: PNG read error in usr/share/mplayer/skins/default/main