Activiti进阶(九)——接收任务(ReceiveTask)

接收任务(ReceiveTask)即等待任务,接收任务是一个简单任务,它会等待对应消息的到达。当前,官方只实现

这个任务的java语义。 当流程达到接收任务,流程状态会保存到数据库中。在任务创建后,意味着流程会进入等

待状,直到引擎接收了一个特定的消息, 这会触发流程穿过接收任务继续执行。


    一、流程图


                                           

                                                 图一  等待任务流程图


     在这里,我们使用每日向老板汇总当日销售额为例,来演示一下等待任务。


     二、流程演示


[java]  view plain  copy
  1. package cn.gome.j_receiveTask;  
  2.   
  3. import java.io.InputStream;  
  4.   
  5. import org.activiti.engine.ProcessEngine;  
  6. import org.activiti.engine.ProcessEngines;  
  7. import org.activiti.engine.repository.Deployment;  
  8. import org.activiti.engine.runtime.Execution;  
  9. import org.activiti.engine.runtime.ProcessInstance;  
  10. import org.junit.Test;  
  11.   
  12. public class ReceiveTaskTest {  
  13.       
  14.     //流程引擎对象  
  15.     ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();  
  16.       
  17.     /**部署流程定义+启动流程实例*/  
  18.     @Test  
  19.     public void deployementAndStartProcess(){  
  20.         InputStream inputStreamBpmn = this.getClass().getResourceAsStream("receiveTask.bpmn");  
  21.         InputStream inputStreamPng = this.getClass().getResourceAsStream("receiveTask.png");  
  22.           
  23.         //1.部署流程定义  
  24.         Deployment deployment = processEngine.getRepositoryService()  
  25.                 .createDeployment()//创建部署对象  
  26.                 .addInputStream("receiveTask.bpmn", inputStreamBpmn)  
  27.                 .addInputStream("receiveTask.png", inputStreamPng)  
  28.                 .deploy();  
  29.         System.out.println("部署ID:" + deployment.getId());  
  30.           
  31.         //2.启动流程实例  
  32.         ProcessInstance pi = processEngine.getRuntimeService()  
  33.                 .startProcessInstanceByKey("receiveTask");//使用流程定义的key的最新版本启动流程  
  34.         System.out.println("流程实例ID:"+pi.getId());  
  35.         System.out.println("流程定义ID:"+pi.getProcessDefinitionId());  
  36.           
  37.         //3.查询执行对象表,使用流程实例ID和当前活动的名称(receivetask1)  
  38.         String processInstanceId = pi.getId();//得到流程实例ID  
  39.         Execution execution1 = processEngine.getRuntimeService()  
  40.                 .createExecutionQuery()  
  41.                 .processInstanceId(processInstanceId)//流程实例ID  
  42.                 .activityId("receivetask1")//当前活动的名称  
  43.                 .singleResult();  
  44.           
  45.         //4.使用流程变量设置当日的销售额  
  46.         processEngine.getRuntimeService().setVariable(execution1.getId(), "当日销售额"20000);  
  47.           
  48.         //5.向后执行一步  
  49.         processEngine.getRuntimeService()  
  50.             .signal(execution1.getId());  
  51.           
  52.         //6.查询执行对象表,使用流程实例ID和当前活动的名称(receivetask2)  
  53.         Execution execution2 = processEngine.getRuntimeService()  
  54.                 .createExecutionQuery()  
  55.                 .processInstanceId(processInstanceId)  
  56.                 .activityId("receivetask2")  
  57.                 .singleResult();  
  58.           
  59.         //7.获取流程变量,给老板发送短信  
  60.         Integer value = (Integer) processEngine.getRuntimeService()  
  61.                 .getVariable(execution2.getId(), "当日销售额");  
  62.         System.out.println("给老板发送短信:内容,当日销售额:"+value);  
  63.           
  64.         //8.向后执行一步  
  65.         processEngine.getRuntimeService()  
  66.                 .signal(execution2.getId());  
  67.           
  68.         //9.判断流程是否结束  
  69.         ProcessInstance nowPi = processEngine.getRuntimeService()  
  70.                 .createProcessInstanceQuery()  
  71.                 .processInstanceId(pi.getId())  
  72.                 .singleResult();  
  73.         if(nowPi == null){  
  74.             System.out.println("流程结束");  
  75.         }  
  76.     }  
  77.       
  78.       
  79. }  

     说明:与用户任务(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),该表中才有数据。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
01-课程计划02-Activiti工作流概念(使用程序演示工作流执行)03-Activiti介绍04-准备Activiti开发环境05-准备开发环境(配置文件)和核心API的介绍06-Activiti入门程序HelloWorld演示流程的执行07-流程定义的CRUD(上)08-流程定义的CRUD(下)09-流程实例,任务,执行对象控制流程的执行(上)10-流程实例,任务,执行对象控制流程的执行(下)11-流程变量(上)12-流程变量(下)13-流程历史数据查询14-第一天知识点回顾15-连线16-排他网关17-并行网关18-流程实例开始结束19-接收任务活动(receiveTask)20-个人任务分配(三种方式)21-组任务分配(三种方式)22-工作流提供的用户角色组(IdentityService)23-项目框架搭建(Struts)24-请假流程管理系统框架搭建(Spring+Struts)25-请假流程图26-知识点回顾27-系统登录(Session)28-自定义拦截器实现Session验证29-部署流程定义(zip文件部署)30-流程定义和部署对象查询31-查看流程图和删除流程定义32-请假单业务的查询列表和新增保存33-请假单业务的编辑保存和删除34-申请请假(启动流程实例)35-查找正在执行的个人任务列表36-使用类动态指定下一个任务的办理人37-办理任务(获取任务节点form key中的值)38-办理任务(使用任务ID,查询请假单)39-办理任务(使用任务ID,查询任务完成后的连线名称集合)40-完成任务41-查询办理任务时操作的历史批注信息(上)42-查询办理任务时操作的历史批注信息(下)43-在请假单中查询历史批注信息(使用请假单ID查询)44-查看当前流程图和课程总结
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值