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)的更多相关文章

  1. Activiti学习笔记7 — ReceiveTask机器自动任务的使用

    一. 创建流程规则,如下图 二.发布流程 /** * 2.发布一个流程 */ @Test public void testDeployProcess() { RepositoryService rep ...

  2. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  3. Activiti 接收任务活动

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

  4. activiti工作流引擎学习(三)

    5.接收任务活动(receiveTask,即等待活动)不是一个任务节点 接收任务是一个简单任务,他会等待回应消息的到达,当前,官方只实现了这个任务的java语义,当流程达到接受任务,流程状态会保存到数 ...

  5. activiti学习总结

    Activiti界面元素的使用总结 一.图形设计中元素的使用 1.SequenceFlow:连接线,可以连接两个任务,来管理流程实例的流向 -----General -----id:流程的id,用与程 ...

  6. activiti学习资料(架构描述)

    Activiti学习资料 Activiti是业界很流行的java工作流引擎,关于Activiti与JBPM5的关系和如何选择不是本文要讨论的话题,相关内容可以baidu一下.Activiti从架构角度 ...

  7. Activiti源码分析(框架、核心类。。。)

    http://jiangwenfeng762.iteye.com/blog/1338553 Activiti是业界很流行的java工作流引擎,关于Activiti与JBPM5的关系和如何选择不是本文要 ...

  8. Activiti源码浅析:Activity与Task

    最近由于接触到Activiti工作流引擎,因此粗读了一下它的源码. 总结了一些内容如下,这些内容一般的doc上都是没有提及的. 1. model.Activity与model.Task Activit ...

  9. activiti入门3排他网关,并行网管,包含网关,事件网关(转)

    网关用来控制流程的流向 网关可以消费也可以生成token. 网关显示成菱形图形,内部有有一个小图标. 图标表示网关的类型. 基本分支 首先 利用 流程变量  写个带有分支的一个基本流程 流程图: 部署 ...

随机推荐

  1. AMD-require.js模块加载原理

    项目中使用大了require.js,功能实现,现重新学习下模块加载原理相关知识,借鉴如下博文:https://blog.csdn.net/ai52011/article/details/7711361 ...

  2. tensorflow在文本处理中的使用——skip-gram模型

    代码来源于:tensorflow机器学习实战指南(曾益强 译,2017年9月)——第七章:自然语言处理 代码地址:https://github.com/nfmcclure/tensorflow-coo ...

  3. 2019-2-27-win10-uwp-去掉-Flyout-边框

    title author date CreateTime categories win10 uwp 去掉 Flyout 边框 lindexi 2019-02-27 17:48:46 +0800 201 ...

  4. <Standard Template Library>标准模板库专项复习总结(二)

    4.队列 先进先出(FIFO)表 头文件:#include<queue> 变量的定义:queue<TYPE>queueName 成员函数: bool empty() 空队列返回 ...

  5. 【record】#10

    反正最近就一直在1600分左右徘徊;好想回蓝名啊

  6. koa2入门--01.ES6简单复习、koa2安装以及例子

    1.ES6简单复习 /*let 和 const: let用于定义一个块作用域的变量,const 定义一个常量 */ let a = 'test'; const b = 2; /*对象的属性和方法的简写 ...

  7. k8s生产环境部署

    建议配置: 服务器 900G*2 SSD 安装操作系统 CPU 16核心*2 40G网卡*2 RAM 64G*8 操作系统建议:Centos7.4/Centos 7.6 不建议使用CentOS8 分布 ...

  8. docker(整理中

    docker镜像默认的下载地址就是docker的官网,而他们的官网在国内没有节点,时不时就被国家防火墙隔绝,会出现DNS解析不到,或者找不到镜像等狗血提示. 解决的方法有三个: 第一,就是不断尝试,因 ...

  9. Python之eval和exec

    eval可以执行字符串形式的表达式 In [1]: eval("1 + 2 + 3") Out[1]: 6 In [2]: eval("a + 1", {&qu ...

  10. mysql:创建新库,新表,查看character

    创建新库create database wenda; 创建新表drop table if exists `user`;create table `user`( `id` int(11) unsigne ...