Activiti接受任务(receiveTask)
Activiti接受任务(receiveTask)
作者:Jesai
前言:
Activiti接受任务(receiveTask)其实和Activiti的手动任务是差不多的,不过手动任务是直接通过,而Activiti接受任务(receiveTask)则在任务启动到该节点的时候停下来等待信号。当任务接收到信号的时候,该流程就会继续往下执行。
官方解释:
描述
接收任务是一个等待消息到来的简单任务。目前,我们仅实现了该任务的 Java 语义。 当流程执行到接收任务时,流程状
态被提交到持久化数据库中。这意味着,流程将进入一种等待状态,直到引擎接收到明确的消息,来触发流程通过接收
任务继续执行。
图形化符号
接收任务被形象化成左上角带有消息图标的任务(椭圆)。消息是白色的(黑色的消息图标表示已经发送的意思)。
XML 表示
<receiveTaskid="waitState"name="wait"/>
要继续当前等待在这样一个接收任务的流程实例,需要调用使用了执行到此接收任务的执行路径的 id 的方法
runtimeService.signal(executionId)。下面的代码片段展示实际是如何操作的:
ProcessInstance pi = runtimeService.startProcessInstanceByKey("receiveTask");
Execution execution = runtimeService.createExecutionQuery()
.processInstanceId(pi.getId())
.activityId("wait")
.singleResult();
assertNotNull(execution);
runtimeService.signal(execution.getId());
流程设计:

流程图源码:
<?xml version='1.0' encoding='UTF-8'?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
<process id="receiveTaskprocess" isExecutable="true">
<startEvent id="sid-4AF5399C-5241-4F58-BE58-6B2D0A1249D2" />
<receiveTask id="receiveTask" name="接受任务">
<extensionElements>
<activiti:executionListener event="end" class="light.mvc.workflow.serviceTask.receiveTestRunningTask" />
</extensionElements>
</receiveTask>
<sequenceFlow id="sid-46A38F6A-4413-48E2-ADAA-5DC86682086C" sourceRef="sid-4AF5399C-5241-4F58-BE58-6B2D0A1249D2" targetRef="receiveTask" />
<endEvent id="sid-156246B5-C81C-4AAB-A183-FCA197EC6901" />
<sequenceFlow id="sid-2CCD7E71-70FE-418C-8365-5CD7636E9657" sourceRef="receiveTask" targetRef="sid-156246B5-C81C-4AAB-A183-FCA197EC6901" />
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_receiveTaskprocess">
<bpmndi:BPMNPlane bpmnElement="receiveTaskprocess" id="BPMNPlane_receiveTaskprocess">
<bpmndi:BPMNShape bpmnElement="sid-4AF5399C-5241-4F58-BE58-6B2D0A1249D2" id="BPMNShape_sid-4AF5399C-5241-4F58-BE58-6B2D0A1249D2">
<omgdc:Bounds height="30.0" width="30.0" x="173.75" y="107.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="receiveTask" id="BPMNShape_receiveTask">
<omgdc:Bounds height="80.0" width="100.0" x="324.75" y="81.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-156246B5-C81C-4AAB-A183-FCA197EC6901" id="BPMNShape_sid-156246B5-C81C-4AAB-A183-FCA197EC6901">
<omgdc:Bounds height="28.0" width="28.0" x="469.75" y="107.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-46A38F6A-4413-48E2-ADAA-5DC86682086C" id="BPMNEdge_sid-46A38F6A-4413-48E2-ADAA-5DC86682086C">
<omgdi:waypoint x="203.7497832166316" y="121.91935600421166" />
<omgdi:waypoint x="324.75" y="121.26881720430107" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-2CCD7E71-70FE-418C-8365-5CD7636E9657" id="BPMNEdge_sid-2CCD7E71-70FE-418C-8365-5CD7636E9657">
<omgdi:waypoint x="424.75" y="121.0" />
<omgdi:waypoint x="469.75" y="121.0" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
给该流程设置一个监听器,用来监听流程是否执行:
/**
*
*/
package light.mvc.workflow.serviceTask;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate;
/**
*
* 项目名称:lightmvc
* 类名称:ServiceTask
* 类描述:
* 创建人:邓家海
* 创建时间:2017年6月4日 下午6:18:11
* 修改人:deng
* 修改时间:2017年6月4日 下午6:18:11
* 修改备注:
* @version
*
*/
public class receiveTestRunningTask implements JavaDelegate{
//重写委托的提交方法
@Override
public void execute(DelegateExecution execution) throws Exception {
//receiveTaskprocess
System.out.println("receiveTestRunningTask is running!");
}
}
在这里,我们通过一个手动任务来启动这个接受任务。
手动任务流程设计:

手动任务源码:
<?xml version='1.0' encoding='UTF-8'?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
<process id="process" isExecutable="true">
<startEvent id="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" />
<manualTask id="sid-B57FA289-A98B-45B8-8550-211ED155778E" name="手工任务">
<extensionElements>
<activiti:executionListener event="start" class="light.mvc.workflow.serviceTask.TestRunningTask" />
</extensionElements>
</manualTask>
<endEvent id="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" />
<sequenceFlow id="sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834" sourceRef="sid-B57FA289-A98B-45B8-8550-211ED155778E" targetRef="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" />
<sequenceFlow id="sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185" sourceRef="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" targetRef="sid-B57FA289-A98B-45B8-8550-211ED155778E" />
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_process">
<bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process">
<bpmndi:BPMNShape bpmnElement="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" id="BPMNShape_sid-8D52A572-DD68-4640-BCEE-AA46FD19F535">
<omgdc:Bounds height="30.0" width="30.0" x="233.75" y="102.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-B57FA289-A98B-45B8-8550-211ED155778E" id="BPMNShape_sid-B57FA289-A98B-45B8-8550-211ED155778E">
<omgdc:Bounds height="80.0" width="100.0" x="375.0" y="77.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" id="BPMNShape_sid-DF898F06-5F35-4C64-B84D-6A405ADECA91">
<omgdc:Bounds height="28.0" width="28.0" x="630.0" y="103.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834" id="BPMNEdge_sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834">
<omgdi:waypoint x="475.0" y="117.0" />
<omgdi:waypoint x="630.0" y="117.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185" id="BPMNEdge_sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185">
<omgdi:waypoint x="263.75" y="117.0" />
<omgdi:waypoint x="375.0" y="117.0" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
<?xml version='1.0' encoding='UTF-8'?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef">
<process id="process" isExecutable="true">
<startEvent id="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" />
<manualTask id="sid-B57FA289-A98B-45B8-8550-211ED155778E" name="手工任务">
<extensionElements>
<activiti:executionListener event="start" class="light.mvc.workflow.serviceTask.TestRunningTask" />
</extensionElements>
</manualTask>
<endEvent id="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" />
<sequenceFlow id="sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834" sourceRef="sid-B57FA289-A98B-45B8-8550-211ED155778E" targetRef="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" />
<sequenceFlow id="sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185" sourceRef="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" targetRef="sid-B57FA289-A98B-45B8-8550-211ED155778E" />
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_process">
<bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process">
<bpmndi:BPMNShape bpmnElement="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" id="BPMNShape_sid-8D52A572-DD68-4640-BCEE-AA46FD19F535">
<omgdc:Bounds height="30.0" width="30.0" x="233.75" y="102.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-B57FA289-A98B-45B8-8550-211ED155778E" id="BPMNShape_sid-B57FA289-A98B-45B8-8550-211ED155778E">
<omgdc:Bounds height="80.0" width="100.0" x="375.0" y="77.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" id="BPMNShape_sid-DF898F06-5F35-4C64-B84D-6A405ADECA91">
<omgdc:Bounds height="28.0" width="28.0" x="630.0" y="103.0" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834" id="BPMNEdge_sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834">
<omgdi:waypoint x="475.0" y="117.0" />
<omgdi:waypoint x="630.0" y="117.0" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185" id="BPMNEdge_sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185">
<omgdi:waypoint x="263.75" y="117.0" />
<omgdi:waypoint x="375.0" y="117.0" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
给该流程设置一个监听器,用来通知接受任务继续往下执行。
/**
*
*/
package light.mvc.workflow.serviceTask;
import java.util.List;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate;
import org.activiti.engine.runtime.Execution;
/**
*
* 项目名称:lightmvc
* 类名称:ServiceTask
* 类描述:
* 创建人:邓家海
* 创建时间:2017年6月4日 下午6:18:11
* 修改人:deng
* 修改时间:2017年6月4日 下午6:18:11
* 修改备注:
* @version
*
*/
public class TestRunningTask implements JavaDelegate{
//重写委托的提交方法
@Override
public void execute(DelegateExecution execution) throws Exception {
//receiveTaskprocess
List<Execution> executions= execution.getEngineServices().getRuntimeService().createExecutionQuery().processDefinitionKey("receiveTaskprocess")
.activityId("receiveTask").list();
for(Execution e:executions){
execution.getEngineServices().getRuntimeService().signal(e.getId());
}
System.out.println("TestRunningTask is running!");
}
}
1)首先部署启动接受任务,这个时候,接受任务处于等待的状态
2)然后启动手动任务,手动任务执行,触发监听类,监听类通知接受任务执行,手动任务结束
3)接受任务收到信号,继续往下执行,结束
4)整个过程结束。
运行结果:

可以看到,两个监听器都完成了。下面我们可以用一个图示来解释这整个过程:

Activiti交流QQ群:634320089
Activiti接受任务(receiveTask)的更多相关文章
- Activiti学习笔记7 — ReceiveTask机器自动任务的使用
一. 创建流程规则,如下图 二.发布流程 /** * 2.发布一个流程 */ @Test public void testDeployProcess() { RepositoryService rep ...
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
- Activiti 接收任务活动
流程中往往需要特定人接受任务并进行一定操作才能继续进行下去. 代码如下 import java.io.InputStream; import org.activiti.engine.ProcessEn ...
- activiti工作流引擎学习(三)
5.接收任务活动(receiveTask,即等待活动)不是一个任务节点 接收任务是一个简单任务,他会等待回应消息的到达,当前,官方只实现了这个任务的java语义,当流程达到接受任务,流程状态会保存到数 ...
- activiti学习总结
Activiti界面元素的使用总结 一.图形设计中元素的使用 1.SequenceFlow:连接线,可以连接两个任务,来管理流程实例的流向 -----General -----id:流程的id,用与程 ...
- activiti学习资料(架构描述)
Activiti学习资料 Activiti是业界很流行的java工作流引擎,关于Activiti与JBPM5的关系和如何选择不是本文要讨论的话题,相关内容可以baidu一下.Activiti从架构角度 ...
- Activiti源码分析(框架、核心类。。。)
http://jiangwenfeng762.iteye.com/blog/1338553 Activiti是业界很流行的java工作流引擎,关于Activiti与JBPM5的关系和如何选择不是本文要 ...
- Activiti源码浅析:Activity与Task
最近由于接触到Activiti工作流引擎,因此粗读了一下它的源码. 总结了一些内容如下,这些内容一般的doc上都是没有提及的. 1. model.Activity与model.Task Activit ...
- activiti入门3排他网关,并行网管,包含网关,事件网关(转)
网关用来控制流程的流向 网关可以消费也可以生成token. 网关显示成菱形图形,内部有有一个小图标. 图标表示网关的类型. 基本分支 首先 利用 流程变量 写个带有分支的一个基本流程 流程图: 部署 ...
随机推荐
- H3C配置Trunk端口
- 【23.68%】【hdu 2871】Memory Control
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- JavaScript模块化演变 CommonJs,AMD, CMD, UMD(一)
原文链接:https://www.jianshu.com/p/33d53cce8237 原文系列2链接:https://www.jianshu.com/p/ad427d8879cb 前端完全手册: h ...
- echarts拓扑图(graph,力导向布局图)
echarts连接:https://gallery.echartsjs.com/editor.html?c=xCLEj67T3H 讲解:https://www.cnblogs.com/koala201 ...
- 浅谈月薪3万 iOS程序员 的职业规划与成长!(进阶篇)
前言: 干了这么多年的iOS,虽然接触了许多七七八八的东西.技术,但是感觉本身iOS却没有什么质的飞越,可能跟自己接触的项目深度有关,于是决定在学习其他技术的同时,加强自己在iOS方面的学习,提高自己 ...
- CPP STL学习笔记
STL的概念 源地址 https://www.ev0l.art/index.php/archives/15/ <li> Iterator (迭代器)<li> Containe ...
- 曹工说Spring Boot源码(7)-- Spring解析xml文件,到底从中得到了什么(上)
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- 08_jquery里面的$(this)和this都什么时候用,有什么区别
当你用的是jquery时,就用$(this),如果是JS,就用this $(this).html( $(this).html() + " BAM! "); 这个里的html()是J ...
- java序列化(二)
上一篇我们简单的了解了java的序列化方法.可以想一下,如果有两个类,如果父类实现了序列化,子类没有实现序列化,子类在进行对象序列化读写时,父类和子类均被实现序列化.如果其中父类没有实现序列化,子类实 ...
- hutool BigExcelWriter 下的autoSizeColumnAll异常问题
autoSizeColumnAll java.lang.IllegalStateException: Could not auto-size column. Make sure the column ...