复习步骤8-Activiti流程操作与数据查询

此章节学习的目的,怎么样让流程往下走,不同的方式有不同的方法

如任务流程节点是UserTask

那么使用 TaskService.complete(Task.getId());  使流程往下走

 

如任务流程节点是ReceiveTask

那么使用 RuntimeService.trigger(Execution.getId());

  使流程往下走

 

流程触发

触发信号事件:

    捕获事件(Catching):概念 流程一旦碰到捕获事件的时候,流程就会停在这里,等待外部发信号,一直处于捕获状态,直至收到外部给它发的信号,才会继续往下走

    抛出事件(Throwing):流程一旦碰到抛出事件的时候,回往外抛出一个信息,不会等待,

流程继续往下走

    捕获事件,抛出事件是放在流程中间,因此也叫中间事件 ,而开始节点是放在流程开始,因此叫开始事件

 

如任务流程 停在SignalCatchingEvent事件(信号捕获事件--也可叫信号捕获中间事件),如何使流程往下走

捕获事件的 signalEvent.bpmn的流程图画好后,还需再signalEvent.bpmn中

加标签对 信号捕获事件进行定义并引用

    如下定义信号事件并引用

代码中使用 runService.signalEventReceived("testSignal");//signalEvent.bpmn <signal id="testSignal" name="testSignal"></signal>

给它发信号,使流程往下走

 

 

消息捕获中间事件 ,如何使流程往下走--

 

// 让它往前走 --外部给 testMessage  发消息

       //messageEvent.bpmn <message id="testMsg" name="testMsg"></message>

       /*

       百度RuntimeService API   messageEventReceived(String messageName, String executionId)

       多第二参数执行流ID是于 消息捕获中间事件通知往下个节点走的最大区别,消息捕获事件没有执行流ID,相当于广播,

       而消息捕获中间事件相当于订阅,只有此执行流继续往下走,其他执行流仍然等待中

       */

       runService.messageEventReceived("testMsg", exe.getId());

 

项目结构如图

 

 

HandleTest.java

package com.xiangshuai.act.c12;

 

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.RepositoryService;

import org.activiti.engine.RuntimeService;

import org.activiti.engine.TaskService;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.ProcessDefinition;

import org.activiti.engine.runtime.Execution;

import org.activiti.engine.runtime.ProcessInstance;

 

/**

 * * @author lqx

 * 文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤8-Activiti流程操作与数据查询

 * 或 我的网盘\我的笔记学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤8-Activiti流程操作与数据查询

 *

 */

public class HandleTest {

         public static void main(String[] args) {

                  //receiveTaskTest();

                  //singleEventCatchingTest();

                  messageCatchingEventTest();

         }

   

         //任务流程节点是ReceiveTask,如何流转到下一个流程节点测试-通过RuntimeService.trigger(Execution.getId()) 流转到下一个流程节点;

         public static void receiveTaskTest(){

                  ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务

        RuntimeService runService = engine.getRuntimeService();

        // 任务服务

        TaskService taskService = engine.getTaskService();

        // 部署

        Deployment dep = rs.createDeployment()

                .addClasspathResource("receiveTask.bpmn").deploy();

        ProcessDefinition pd = rs.createProcessDefinitionQuery()

                .deploymentId(dep.getId()).singleResult();

        // 启动流程

        ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

        // 查当前的子执行流(此流程只有一个),Execution 对应act_ru_execution表  -- 此表保存运行时 当前节点 下的 主流程(主执行流)和子执行流 数据

        Execution exe = runService.createExecutionQuery()

                .processInstanceId(pi.getId()).onlyChildExecutions()//查当前的子执行流(此流程只有一个)

                .singleResult();

 

        System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId());

       

        // 让它往前走

        runService.trigger(exe.getId());

       

        exe = runService.createExecutionQuery()

                .processInstanceId(pi.getId()).onlyChildExecutions()

                .singleResult();

        System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId());

         }

        

         /*

         任务流程 停在SignalCatchingEvent事件(信号捕获事件),如何流转到下一个流程节点测试--通过

         runService.signalEventReceived("testSignal");//singleEvent.bpmn 的 <signal id="testSignal" name="testSignal"></signal>

       给它发信号,使流程往下走

         */

         public static void singleEventCatchingTest(){

                  ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

                  // 存储服务

                  RepositoryService rs = engine.getRepositoryService();

                  // 运行时服务

                  RuntimeService runService = engine.getRuntimeService();

                  // 任务服务

                  TaskService taskService = engine.getTaskService();

                  // 部署

                  Deployment dep = rs.createDeployment()

                                   .addClasspathResource("signalEvent.bpmn").deploy();

                  ProcessDefinition pd = rs.createProcessDefinitionQuery()

                                   .deploymentId(dep.getId()).singleResult();

                  // 启动流程

                  ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

                  // 查当前的子执行流(此流程只有一个),Execution 对应act_ru_execution表  -- 此表保存运行时 当前节点 下的 主流程(主执行流)和子执行流 数据

                  Execution exe = runService.createExecutionQuery()

                                   .processInstanceId(pi.getId()).onlyChildExecutions()//查当前的子执行流(此流程只有一个)

                                   .singleResult();

                  /*

                  断点查 act_ru_task 表中无 这个信号捕获事件 的任务,但此时却正处于信号捕获事件的节点上由此判断

                  act_ru_task 是存储运行的task任务的,不存储时间,但act_ru_execution 中有信号捕获事件 子执行流,

                  所以可判断act_ru_execution是存储信号捕获事件节点的

                  */

                  System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId());

                  // 输出结果 : 5, 当前节点:signalintermediatecatchevent2

                 

                  // 让它往前走 --外部给 testSignal  发信号

                  runService.signalEventReceived("testSignal");//SingleEvent.bpmn 的 <signal id="testSignal" name="testSignal"></signal>

                 

                  exe = runService.createExecutionQuery()

                                   .processInstanceId(pi.getId()).onlyChildExecutions()

                                   .singleResult();

                  System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId());

                  // 输出结果 :5, 当前节点:usertask1

         }

        

        

         /*

         任务流程 停在MessageCatchingEvent事件(消息捕获事件),如何流转到下一个流程节点测试--通过

         runService.signalEventReceived("testMsg");//messageEvent.bpmn 的 <message id="testMsg" name="testMsg"></message>

       给它发消息,使流程往下走

          */

         public static void messageCatchingEventTest(){

                  ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

                  // 存储服务

                  RepositoryService rs = engine.getRepositoryService();

                  // 运行时服务

                  RuntimeService runService = engine.getRuntimeService();

                  // 任务服务

                  TaskService taskService = engine.getTaskService();

                  // 部署

                  Deployment dep = rs.createDeployment()

                                   .addClasspathResource("messageEvent.bpmn").deploy();

                  ProcessDefinition pd = rs.createProcessDefinitionQuery()

                                   .deploymentId(dep.getId()).singleResult();

                  // 启动流程

                  ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

                  // 查当前的子执行流(此流程只有一个),Execution 对应act_ru_execution表  -- 此表保存运行时 当前节点 下的 主流程(主执行流)和子执行流 数据

                  Execution exe = runService.createExecutionQuery()

                                   .processInstanceId(pi.getId()).onlyChildExecutions()//查当前的子执行流(此流程只有一个)

                                   .singleResult();

                  /*

                  断点查 act_ru_task 表中无 这个捕获事件 的任务,但此时却正处于消息捕获事件的节点上由此判断

                  act_ru_task 是存储运行的task任务的,不存储时间,但act_ru_execution 中有消息捕获事件 子执行流,

                  所以可判断act_ru_execution是存储消息捕获事件节点的

                   */

                  System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId());

                  // 输出结果 :5, 当前节点:messageintermediatecatchevent1

                 

                  // 让它往前走 --外部给 testMessage  发消息

                  //messageEvent.bpmn 的 <message id="testMsg" name="testMsg"></message>

                  /*

                  百度RuntimeService API      messageEventReceived(String messageName, String executionId)

                  多第二参数执行流ID是于 消息捕获中间事件通知往下个节点走的最大区别,消息捕获事件没有执行流ID,相当于广播,

                  而消息捕获中间事件相当于订阅,只有此执行流继续往下走,其他执行流仍然等待中

                  */

                  runService.messageEventReceived("testMsg", exe.getId());

                 

                  exe = runService.createExecutionQuery()

                                   .processInstanceId(pi.getId()).onlyChildExecutions()

                                   .singleResult();

                  System.out.println(pi.getId() + ", 当前节点:" + exe.getActivityId());

                  // 输出结果 :5, 当前节点:usertask1

         }

        

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值