复习步骤11- BPMN事件(2)开始事件

时间:2024-04-09 12:28:45

开始事件

  • 无指定开始事件 -- 无任何事件定义,如start事件
  • 定时器开始事件  --

     有如下三种类型

    cron表达式,spring的定时器也是用cron表达式

     复习步骤11- BPMN事件(2)开始事件 

  • 消息开始事件
  • 错误开始事件

 

一、测试 定时器开始事件 

     步骤 新建一个 start_event_timer.bpmn

     复习步骤11- BPMN事件(2)开始事件

   1.2 修改start_event_timer.bpmn设置定时类型和值

   复习步骤11- BPMN事件(2)开始事件

 

1.3 修改 activiti.cfg.xml 修改异步执行的属性asyncExecutorActivate,设为true

复习步骤11- BPMN事件(2)开始事件

1.4 测试代码

//测试 定时器开始事件  -- timer.bpmn  <timeCycle>*/10 * * * * ?</timeCycle> <!-- 10秒执行一次 -->

    public static void timerEventTest(){

       ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

       // 存储服务

       RepositoryService rs = engine.getRepositoryService();

       // 运行时服务

       RuntimeService runService = engine.getRuntimeService();

      

      

       Deployment dep = rs.createDeployment().addClasspathResource("start_event_timer.bpmn").deploy();

       /*ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

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

          System.out.println(pi.getId()); */

      

      

       Date t = new Date();

       SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

      

       System.out.println("最开始时间为 "+df.format(t));

       int count = 1;

      

       while(true){

            long temp = runService.createProcessInstanceQuery().count();

            int tempcount= new Long(temp).intValue();

            if(count!=tempcount){

               count=tempcount;

              System.out.println("现在定时器共开启了  "+count+ "条流程实例,即现在有多少条流程 带定时器节点");

             

              Date t1 = new Date();

              SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

              System.out.println(df1.format(t1));

             

              System.out.println("当前时间为 "+df1.format(t));

             

              if(count==10){

                   break;   

              }

           }

       }

       /*

                  输出数据

                  最开始时间为 2019-04-19 18:10:31

           现在定时器共开启了  0条流程实例,即现在有多少条流程 带定时器节点

           2019-04-19 18:10:31

           当前时间为 2019-04-19 18:10:31

           现在定时器共开启了  1条流程实例,即现在有多少条流程 带定时器节点

           2019-04-19 18:10:40

           当前时间为 2019-04-19 18:10:31

           现在定时器共开启了  2条流程实例,即现在有多少条流程 带定时器节点

           2019-04-19 18:10:50

           当前时间为 2019-04-19 18:10:31

           现在定时器共开启了  3条流程实例,即现在有多少条流程 带定时器节点

           ...........................

       */

    }

 

二、测试 消息开始事件 ,启动消息开始事件

    2.1 新建 start_event_message.bpmn

复习步骤11- BPMN事件(2)开始事件

2.2 修改start_event_message.bpmn 定义消息事件标签并引用

复习步骤11- BPMN事件(2)开始事件

 

2.3 测试代码

 

    //测试 消息开始事件 ,启动消息开始事件

    public static void messageEventTest(){

       ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

       // 存储服务

       RepositoryService rs = engine.getRepositoryService();

       // 运行时服务

       RuntimeService runService = engine.getRuntimeService();

      

      

       Deployment dep = rs.createDeployment().addClasspathResource("start_event_message.bpmn").deploy();

       /*

        * 百度 RuntimeService API

        * startProcessInstanceByMessage(String messageName)

        *参数是 start_event_message.bpmn <message id="msg" name="msgName"></message> name的值

        * */

       ProcessInstance pi = runService.startProcessInstanceByMessage("msgName");//启动消息流程后,跳到userTask节点,看act_ru_execution表即知

       // 同事消息的数据会别保存在 act_ru_event_subscr

       System.out.println(pi.getId());

    }

   

三、测试 错误开始事件 --错误开始事件的处理子流程需放在EventSubProcess中如,下图

复习步骤11- BPMN事件(2)开始事件

3.1 新建流程图 start_event_error.bpmn-- 一个正常流程及处理正常流程错误信息的错误处理流程,如图

复习步骤11- BPMN事件(2)开始事件

 

3.2  修改start_event_error.bpmn -- 给Count People和 Event sub Process 这两个Service Task节点加对应的处理类,及定义错误信息,并在子流程节点上进行引用,如下图

复习步骤11- BPMN事件(2)开始事件

 

 

 

复习步骤11- BPMN事件(2)开始事件

 

3.3 . 测试方法

//测试 错误开始事件

    public static void errorEventTest(){

       ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务

        RuntimeService runService = engine.getRuntimeService();

       

        Deployment dep = rs.createDeployment().addClasspathResource("start_event_error.bpmn").deploy();

        ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

       

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

       

    /* 启动流程   输出结果

        清点人数,人数不对,要抛出错误信息,给错误子流程 --- CountDelegate execute方法

        收到正常流程的错误信息通知,人数不对,执行上报任务  --- ReportDelegate execute方法

       

        */

       

    }

 

 

 

 

StartEventTest.java

package com.xiangshuai.act.c14;

 

import java.text.SimpleDateFormat;

import java.util.Date;

 

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.RepositoryService;

import org.activiti.engine.RuntimeService;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.ProcessDefinition;

import org.activiti.engine.runtime.ProcessInstance;

 

 

/**

 * @author lqx

 * 文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤11- BPMN事件(2)开始事件

 * 或 我的网盘\我的笔记\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤11- BPMN事件(2)开始事件

 */

public class StartEventTest {

    public static void main(String[] args) {

                  // timerEventTest();

             //messageEventTest();

             errorEventTest();

         }

   

    //测试 定时器开始事件  -- timer.bpmn  <timeCycle>*/10 * * * * ?</timeCycle> <!-- 每10秒执行一次 -->

    public static void timerEventTest(){

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

             // 存储服务

             RepositoryService rs = engine.getRepositoryService();

             // 运行时服务

             RuntimeService runService = engine.getRuntimeService();

            

            

             Deployment dep = rs.createDeployment().addClasspathResource("start_event_timer.bpmn").deploy();

             /*ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

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

          System.out.println(pi.getId()); */

            

            

             Date t = new Date();

             SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

            

             System.out.println("最开始时间为 "+df.format(t));

             int count = 1;

            

             while(true){

                      long temp = runService.createProcessInstanceQuery().count();

                      int tempcount= new Long(temp).intValue();

                      if(count!=tempcount){

                               count=tempcount;

                              System.out.println("现在定时器共开启了  "+count+ "条流程实例,即现在有多少条流程 带定时器节点");

                             

                              Date t1 = new Date();

                          SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                          System.out.println(df1.format(t1));

                         

                          System.out.println("当前时间为 "+df1.format(t));

                             

                          if(count==10){

                               break;   

                          }

                     }

             }

             /*

                                       输出数据

                                       最开始时间为 2019-04-19 18:10:31

                          现在定时器共开启了  0条流程实例,即现在有多少条流程 带定时器节点

                          2019-04-19 18:10:31

                          当前时间为 2019-04-19 18:10:31

                          现在定时器共开启了  1条流程实例,即现在有多少条流程 带定时器节点

                          2019-04-19 18:10:40

                          当前时间为 2019-04-19 18:10:31

                          现在定时器共开启了  2条流程实例,即现在有多少条流程 带定时器节点

                          2019-04-19 18:10:50

                          当前时间为 2019-04-19 18:10:31

                          现在定时器共开启了  3条流程实例,即现在有多少条流程 带定时器节点

                          ...........................

             */

    }

   

    //测试 消息开始事件 ,启动消息开始事件

    public static void messageEventTest(){

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

             // 存储服务

             RepositoryService rs = engine.getRepositoryService();

             // 运行时服务

             RuntimeService runService = engine.getRuntimeService();

            

            

             Deployment dep = rs.createDeployment().addClasspathResource("start_event_message.bpmn").deploy();

             /*

              * 百度 RuntimeService API

              * startProcessInstanceByMessage(String messageName)

              *参数是 start_event_message.bpmn 的 <message id="msg" name="msgName"></message> 的name的值

              * */

             ProcessInstance pi = runService.startProcessInstanceByMessage("msgName");//启动消息流程后,跳到userTask节点,看act_ru_execution表即知

             // 同事消息的数据会别保存在 act_ru_event_subscr 中

             System.out.println(pi.getId());

    }

   

   

    //测试 错误开始事件

    public static void errorEventTest(){

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务

        RuntimeService runService = engine.getRuntimeService();

       

        Deployment dep = rs.createDeployment().addClasspathResource("start_event_error.bpmn").deploy();

        ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

       

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

        

    /* 启动流程   输出结果

        清点人数,人数不对,要抛出错误信息,给错误子流程 --- CountDelegate execute方法

        收到正常流程的错误信息通知,人数不对,执行上报任务  --- ReportDelegate execute方法

       

        */

       

    }

   

   

}