Activiti接受任务(receiveTask)
Activiti接受任务(receiveTask)
作者:邓家海
前言:
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());
流程设计:
流程图源码:
1 <?xml version='1.0' encoding='UTF-8'?> 2 3 <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"> 4 5 <process id="receiveTaskprocess" isExecutable="true"> 6 7 <startEvent id="sid-4AF5399C-5241-4F58-BE58-6B2D0A1249D2" /> 8 9 <receiveTask id="receiveTask" name="接受任务"> 10 11 <extensionElements> 12 13 <activiti:executionListener event="end" class="light.mvc.workflow.serviceTask.receiveTestRunningTask" /> 14 15 </extensionElements> 16 17 </receiveTask> 18 19 <sequenceFlow id="sid-46A38F6A-4413-48E2-ADAA-5DC86682086C" sourceRef="sid-4AF5399C-5241-4F58-BE58-6B2D0A1249D2" targetRef="receiveTask" /> 20 21 <endEvent id="sid-156246B5-C81C-4AAB-A183-FCA197EC6901" /> 22 23 <sequenceFlow id="sid-2CCD7E71-70FE-418C-8365-5CD7636E9657" sourceRef="receiveTask" targetRef="sid-156246B5-C81C-4AAB-A183-FCA197EC6901" /> 24 25 </process> 26 27 <bpmndi:BPMNDiagram id="BPMNDiagram_receiveTaskprocess"> 28 29 <bpmndi:BPMNPlane bpmnElement="receiveTaskprocess" id="BPMNPlane_receiveTaskprocess"> 30 31 <bpmndi:BPMNShape bpmnElement="sid-4AF5399C-5241-4F58-BE58-6B2D0A1249D2" id="BPMNShape_sid-4AF5399C-5241-4F58-BE58-6B2D0A1249D2"> 32 33 <omgdc:Bounds height="30.0" width="30.0" x="173.75" y="107.0" /> 34 35 </bpmndi:BPMNShape> 36 37 <bpmndi:BPMNShape bpmnElement="receiveTask" id="BPMNShape_receiveTask"> 38 39 <omgdc:Bounds height="80.0" width="100.0" x="324.75" y="81.0" /> 40 41 </bpmndi:BPMNShape> 42 43 <bpmndi:BPMNShape bpmnElement="sid-156246B5-C81C-4AAB-A183-FCA197EC6901" id="BPMNShape_sid-156246B5-C81C-4AAB-A183-FCA197EC6901"> 44 45 <omgdc:Bounds height="28.0" width="28.0" x="469.75" y="107.0" /> 46 47 </bpmndi:BPMNShape> 48 49 <bpmndi:BPMNEdge bpmnElement="sid-46A38F6A-4413-48E2-ADAA-5DC86682086C" id="BPMNEdge_sid-46A38F6A-4413-48E2-ADAA-5DC86682086C"> 50 51 <omgdi:waypoint x="203.7497832166316" y="121.91935600421166" /> 52 53 <omgdi:waypoint x="324.75" y="121.26881720430107" /> 54 55 </bpmndi:BPMNEdge> 56 57 <bpmndi:BPMNEdge bpmnElement="sid-2CCD7E71-70FE-418C-8365-5CD7636E9657" id="BPMNEdge_sid-2CCD7E71-70FE-418C-8365-5CD7636E9657"> 58 59 <omgdi:waypoint x="424.75" y="121.0" /> 60 61 <omgdi:waypoint x="469.75" y="121.0" /> 62 63 </bpmndi:BPMNEdge> 64 65 </bpmndi:BPMNPlane> 66 67 </bpmndi:BPMNDiagram> 68 69 </definitions>
给该流程设置一个监听器,用来监听流程是否执行:
1 /** 2 3 * 4 5 */ 6 7 package light.mvc.workflow.serviceTask; 8 9 10 11 import org.activiti.engine.delegate.DelegateExecution; 12 13 import org.activiti.engine.delegate.JavaDelegate; 14 15 16 17 /** 18 19 * 20 21 * 项目名称:lightmvc 22 23 * 类名称:ServiceTask 24 25 * 类描述: 26 27 * 创建人:邓家海 28 29 * 创建时间:2017年6月4日 下午6:18:11 30 31 * 修改人:deng 32 33 * 修改时间:2017年6月4日 下午6:18:11 34 35 * 修改备注: 36 37 * @version 38 39 * 40 41 */ 42 43 44 45 public class receiveTestRunningTask implements JavaDelegate{ 46 47 48 49 //重写委托的提交方法 50 51 @Override 52 53 public void execute(DelegateExecution execution) throws Exception { 54 55 //receiveTaskprocess 56 57 System.out.println("receiveTestRunningTask is running!"); 58 59 } 60 61 62 63 }
在这里,我们通过一个手动任务来启动这个接受任务。
手动任务流程设计:
手动任务源码:
1 <?xml version='1.0' encoding='UTF-8'?> 2 3 <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"> 4 5 <process id="process" isExecutable="true"> 6 7 <startEvent id="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" /> 8 9 <manualTask id="sid-B57FA289-A98B-45B8-8550-211ED155778E" name="手工任务"> 10 11 <extensionElements> 12 13 <activiti:executionListener event="start" class="light.mvc.workflow.serviceTask.TestRunningTask" /> 14 15 </extensionElements> 16 17 </manualTask> 18 19 <endEvent id="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" /> 20 21 <sequenceFlow id="sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834" sourceRef="sid-B57FA289-A98B-45B8-8550-211ED155778E" targetRef="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" /> 22 23 <sequenceFlow id="sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185" sourceRef="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" targetRef="sid-B57FA289-A98B-45B8-8550-211ED155778E" /> 24 25 </process> 26 27 <bpmndi:BPMNDiagram id="BPMNDiagram_process"> 28 29 <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process"> 30 31 <bpmndi:BPMNShape bpmnElement="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" id="BPMNShape_sid-8D52A572-DD68-4640-BCEE-AA46FD19F535"> 32 33 <omgdc:Bounds height="30.0" width="30.0" x="233.75" y="102.0" /> 34 35 </bpmndi:BPMNShape> 36 37 <bpmndi:BPMNShape bpmnElement="sid-B57FA289-A98B-45B8-8550-211ED155778E" id="BPMNShape_sid-B57FA289-A98B-45B8-8550-211ED155778E"> 38 39 <omgdc:Bounds height="80.0" width="100.0" x="375.0" y="77.0" /> 40 41 </bpmndi:BPMNShape> 42 43 <bpmndi:BPMNShape bpmnElement="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" id="BPMNShape_sid-DF898F06-5F35-4C64-B84D-6A405ADECA91"> 44 45 <omgdc:Bounds height="28.0" width="28.0" x="630.0" y="103.0" /> 46 47 </bpmndi:BPMNShape> 48 49 <bpmndi:BPMNEdge bpmnElement="sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834" id="BPMNEdge_sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834"> 50 51 <omgdi:waypoint x="475.0" y="117.0" /> 52 53 <omgdi:waypoint x="630.0" y="117.0" /> 54 55 </bpmndi:BPMNEdge> 56 57 <bpmndi:BPMNEdge bpmnElement="sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185" id="BPMNEdge_sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185"> 58 59 <omgdi:waypoint x="263.75" y="117.0" /> 60 61 <omgdi:waypoint x="375.0" y="117.0" /> 62 63 </bpmndi:BPMNEdge> 64 65 </bpmndi:BPMNPlane> 66 67 </bpmndi:BPMNDiagram> 68 69 </definitions>
1 <?xml version='1.0' encoding='UTF-8'?> 2 3 <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"> 4 5 <process id="process" isExecutable="true"> 6 7 <startEvent id="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" /> 8 9 <manualTask id="sid-B57FA289-A98B-45B8-8550-211ED155778E" name="手工任务"> 10 11 <extensionElements> 12 13 <activiti:executionListener event="start" class="light.mvc.workflow.serviceTask.TestRunningTask" /> 14 15 </extensionElements> 16 17 </manualTask> 18 19 <endEvent id="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" /> 20 21 <sequenceFlow id="sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834" sourceRef="sid-B57FA289-A98B-45B8-8550-211ED155778E" targetRef="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" /> 22 23 <sequenceFlow id="sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185" sourceRef="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" targetRef="sid-B57FA289-A98B-45B8-8550-211ED155778E" /> 24 25 </process> 26 27 <bpmndi:BPMNDiagram id="BPMNDiagram_process"> 28 29 <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process"> 30 31 <bpmndi:BPMNShape bpmnElement="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" id="BPMNShape_sid-8D52A572-DD68-4640-BCEE-AA46FD19F535"> 32 33 <omgdc:Bounds height="30.0" width="30.0" x="233.75" y="102.0" /> 34 35 </bpmndi:BPMNShape> 36 37 <bpmndi:BPMNShape bpmnElement="sid-B57FA289-A98B-45B8-8550-211ED155778E" id="BPMNShape_sid-B57FA289-A98B-45B8-8550-211ED155778E"> 38 39 <omgdc:Bounds height="80.0" width="100.0" x="375.0" y="77.0" /> 40 41 </bpmndi:BPMNShape> 42 43 <bpmndi:BPMNShape bpmnElement="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" id="BPMNShape_sid-DF898F06-5F35-4C64-B84D-6A405ADECA91"> 44 45 <omgdc:Bounds height="28.0" width="28.0" x="630.0" y="103.0" /> 46 47 </bpmndi:BPMNShape> 48 49 <bpmndi:BPMNEdge bpmnElement="sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834" id="BPMNEdge_sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834"> 50 51 <omgdi:waypoint x="475.0" y="117.0" /> 52 53 <omgdi:waypoint x="630.0" y="117.0" /> 54 55 </bpmndi:BPMNEdge> 56 57 <bpmndi:BPMNEdge bpmnElement="sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185" id="BPMNEdge_sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185"> 58 59 <omgdi:waypoint x="263.75" y="117.0" /> 60 61 <omgdi:waypoint x="375.0" y="117.0" /> 62 63 </bpmndi:BPMNEdge> 64 65 </bpmndi:BPMNPlane> 66 67 </bpmndi:BPMNDiagram> 68 69 </definitions>
给该流程设置一个监听器,用来通知接受任务继续往下执行。
1 /** 2 3 * 4 5 */ 6 7 package light.mvc.workflow.serviceTask; 8 9 10 11 import java.util.List; 12 13 14 15 import org.activiti.engine.delegate.DelegateExecution; 16 17 import org.activiti.engine.delegate.JavaDelegate; 18 19 import org.activiti.engine.runtime.Execution; 20 21 22 23 /** 24 25 * 26 27 * 项目名称:lightmvc 28 29 * 类名称:ServiceTask 30 31 * 类描述: 32 33 * 创建人:邓家海 34 35 * 创建时间:2017年6月4日 下午6:18:11 36 37 * 修改人:deng 38 39 * 修改时间:2017年6月4日 下午6:18:11 40 41 * 修改备注: 42 43 * @version 44 45 * 46 47 */ 48 49 50 51 public class TestRunningTask implements JavaDelegate{ 52 53 54 55 //重写委托的提交方法 56 57 @Override 58 59 public void execute(DelegateExecution execution) throws Exception { 60 61 //receiveTaskprocess 62 63 List<Execution> executions= execution.getEngineServices().getRuntimeService().createExecutionQuery().processDefinitionKey("receiveTaskprocess") 64 65 .activityId("receiveTask").list(); 66 67 for(Execution e:executions){ 68 69 execution.getEngineServices().getRuntimeService().signal(e.getId()); 70 71 } 72 73 74 75 System.out.println("TestRunningTask is running!"); 76 77 } 78 79 80 81 }
1)首先部署启动接受任务,这个时候,接受任务处于等待的状态
2)然后启动手动任务,手动任务执行,触发监听类,监听类通知接受任务执行,手动任务结束
3)接受任务收到信号,继续往下执行,结束
4)整个过程结束。
运行结果:
可以看到,两个监听器都完成了。下面我们可以用一个图示来解释这整个过程:
Activiti交流QQ群:634320089
转载于:https://www.cnblogs.com/dengjiahai/p/7087181.html
Activiti接受任务(receiveTask)相关推荐
- Activiti核心API
本章概述 流程引擎及服务 流程引擎存储服务 RepositoryService 管理流程定义文件xml及静态的服务 对特定的流程的暂停和激活 流程定义启动权限管理 部署文件构造器DeploymentB ...
- Activiti-5.22.0——activiti-modeler界面设计组件介绍
目录 1.启动事件(Start Events): (1)无启动事件(Start event): A.描述: B.图标: (2)计时器事件(Start timer event): A.描述: B.图标: ...
- 【弄nèng - Activiti6】Activiti6入门篇(八)—— 手动任务与接收任务
文章目录 1. 手动任务与接受任务 1.1 流程设计 1.2 定义DeleGate类 1.2 测试类 1.3 运行 1.3.1 启动任务 1.3.2 查询任务 1.3.3 查询执行流 1.3.4 完成 ...
- Activiti进阶(九)——接收任务(ReceiveTask)
接收任务(ReceiveTask)即等待任务,接收任务是一个简单任务,它会等待对应消息的到达.当前,官方只实现 了这个任务的java语义. 当流程达到接收任务,流程状态会保存到数据库中.在任务创建后, ...
- 学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot
本篇学习笔记是观看黑马程序员Activiti7视频而得 Activiti7 一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是" ...
- Activiti 接收任务活动
流程中往往需要特定人接受任务并进行一定操作才能继续进行下去. 代码如下 import java.io.InputStream;import org.activiti.engine.ProcessEng ...
- springboot集成activiti汉化
activiti的modeler汉化. 汉化步骤: 将en.json(路径:editor-app/i18n/en.json)文件汉化,改名zh-CN.json,放在en.json同目录. 同时将汉化后 ...
- Activiti流程实例开始结束,接收任务活动
代码: StartTest.java package com.ytdx.start;import java.io.InputStream;import org.activiti.engine.Proc ...
- 工作流引擎 Activiti 万字详细进阶
Activiti进阶 一.流程实例 什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实例. 一个流程实例包括了所有的运行节点.我们可以利用这个对象来了解当前流程实例的进度等 ...
- 在Eclipse上安装Activiti插件
然后点击: Help ---> Install new SoftWare 然后在点击Add添加新的: 我们在Name上 写上 Activiti BPMN 2.0 designer Locatio ...
最新文章
- 实验吧_NSCTF web200FALSE(代码审计)
- [Z]如何使用OpenGL扩展
- 第三次学JAVA再学不好就吃翔(part53)--StringBuffer类的构造方法
- java 枚举学习--从小程序中学习
- “约见”面试官系列之常见面试题之第七十三篇之js文件中import中加{}和不加{}的区别(建议收藏)
- IE中window的模态框与返回值
- android 怎么调用js项目_APP逆向神器之Frida【Android初级篇】
- 我滴个乖乖,我复现了Spring的漏洞,害怕!
- python判断文件是否存在 中文_python如何判断文件是否存在
- 06 php 单例模式
- NUC1371 Who's in the Middle【中位数+排序】
- html5 打开支付宝app,支付宝H5唤醒APP
- 洛谷 P1653 猴子 解题报告
- js实现农历时间代码
- 阿里云边缘云场景化商业实践
- 成语接龙 给一个很大的成语库 如何找出其中最长的一条线
- oracle 表空间管理
- isin函数及其反函数
- CTF基础知识-Web
- Django管理后台之登录
热门文章
- mysql innodb缓冲池_InnoDB 缓冲池
- 截取字符串_妙用字符串的替换和截取让Shell脚本精准得到你心中的那个“她”...
- TCP模块如何处理连接包
- 为什么基于接口而非实现编程?
- 如何const定义一个不可变数组
- 网页内容复制粘贴(三种方案 兼容多种浏览器)
- Java_String_01_由转义字符串得到其原本字符串
- ThreadLocal了解
- Lintcode14 First Position of Target Solution 题解
- JPA与EJB3的关系