zoukankan      html  css  js  c++  java
  • Activiti 启动事件(Start Event)

    Activiti 启动事件(Start Event

    作者:Jesai

    生活里,没有容易二字,忧伤是一种本能,而微笑是一种能力

    版权所有,未经允许,禁止引用。如需引用,请注明出处。

     

    前言:

    启动事件是Activiti活动的开始节点。现在有很多国产的工作流是省略了开始和结束这两个节点的。但是BPMBN 2.0标准是必须要有开始和结束节点的。启动事件表示流程的开始。 定义了流程如何被启动的启动事件类型(当收到消息、特定的时是以一个小图标来形象表示事件的。在 XML 表示中,类型是由子元素的声明给出的。启动事件总是捕获型的:从概念上讲,该事件(任何时候) 会一直等待直到触发发生。

    启动事件(Start Event)的类型:

    (1)空启动事件(None Satrt Event

    (2)定时启动事件(Timer Satrt Event

    (3)信号事件(Signal Start Event)

    (4)消息事件(Message Start Event)

    (5)异常事件(Error Start Event)

     

    (1)空启动事件(None Satrt Event

    图标:

     

    1-1 空启动事件图标

     

    空启动事件就是一个圆圈。在工作流里面使用的非常多。但是空启动事件必须要人工去启动一个流程。空启动事件是建立在部署完成的流程上面的。每启动一次,就会产生一个新的流程实例。

    代码:

    1 <startEventid="start"name="my start event"/> 

    这个启动事件非常的简单。就无需多说。

    (2)定时启动事件(Timer Satrt Event

    图标:

    2-1 定时启动事件图标

    定时启动事件是一个时钟图标,注意的是,这个时钟图标是比较少圆圈的,要跟定时边界事件区分清楚。

    定时器启动事件用于在给定的时间点创建流程实例。它可以用在只启动一次的流程中,也可以用在特定时间间隔下启动。如果是有重复执行的,流程在周期内都有效,可以重复利用。
    的流程。


    注意:

    子流程中不能使用定时器启动事件。 定时器是从流程部署开始计时,不需要去启动流程。

    代码:

    timeDate:指定ISO 8601格式的日期定时器激活。

    1 <timerEventDefinition>
    2 
    3     <timeDate>2016-08-23T18:13:00</timeDate></timerEventDefinition>

    timeDuration定义定时器经过多少时间后激活。时间段也是取得ISO 8601格式,比如在一年三个月五天六小时七分三十秒内,可以写成P1Y3M5DT6H7M30S

    1 <timerEventDefinition>
    2 
    3     <timeDuration>P10D</timeDuration></timerEventDefinition>

    timeCycle定义定时器重复间隔,在某些场景使用,比如周期性的启动流程,任务超时发送提醒。timeCycle的设置目前有两种方式:ISO 8601Cron表达式(quartz任务调度框架提供的解决方案)activiti默认是使用ISO 8601。例如现在重复三次,每次间隔10小时:

    1  <timerEventDefinition>2     <timeCycle activiti:endDate="2016-08-22T16:42:11+00:00">R3/PT10H</timeCycle>3 </timerEventDefinition>
    2 
    3 <timerEventDefinition>
    4 
    5     <timeCycle>R3/PT10H/${EndDate}</timeCycle>
    6 
    7 </timerEventDefinition>

    其中endDate是可选的配置,上面使用了两张方式加上了endDate, 定时器将会在指定的时间停止工作。

    此外如果你使用Cron 表达式,可以这样写:

    0 0/5 * * * ?

    注意: 

    第一个数字表示秒,而不是像通常Unix cron中那样表示分钟。重复的时间周期能更好的处理相对时间,它可以计算一些特定的时间点 (比如用户任务的开始时间),而cron表达式可以处理绝对时间, 这对定时启动事件特别有用。

    你可以使用表达式进行配置,在里面动态设置值,不过该值需要为ISO 8601或者(cron表达式)格式

     

    1 <boundaryEvent id="escalationTimer" cancelActivity="true" attachedToRef="firstLineSupport">
    2 
    3   <timerEventDefinition>
    4 
    5     <timeDuration>${duration}</timeDuration>
    6 
    7   </timerEventDefinition></boundaryEvent>

     示例:从 2011 3 11 12:13 开始,流程将启动 4 次,每次间隔 5 分钟。

    1 <startEventid="theStart">
    2 <timerEventDefinition>
    3 <timeCycle>R4/2017-06-11T12:13/PT5M</timeCycle>
    4 </timerEventDefinition>
    5 </startEvent> 

    示例: 流程将在选定的时间上启动一次

    1 <startEventid="theStart">
    2 <timerEventDefinition>
    3 <timeDate>2017-06-11T12:13:14</timeDate>
    4 </timerEventDefinition>
    5 </startEvent> 

     实验:

    我们设计一个简单的流程,一个定时启动事件,一个手动任务来监控定时启动任务是否已经启动。

    流程设计:

     

    2-2定时启动事件流程设计

     

    流程代码:

     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-B51BA61F-F3FA-489E-8E50-87AEED50C3B3">
     8 
     9       <timerEventDefinition>
    10 
    11         <timeCycle>R4/2017-06-27T20:45/PT1M</timeCycle>
    12 
    13       </timerEventDefinition>
    14 
    15     </startEvent>
    16 
    17     <manualTask id="sid-15215C7C-14D0-4460-9BB1-4DE865EA03A7" name="手工任务">
    18 
    19       <extensionElements>
    20 
    21         <activiti:executionListener event="start" class="light.mvc.workflow.serviceTask.TimerTestRunningTask" />
    22 
    23       </extensionElements>
    24 
    25     </manualTask>
    26 
    27     <endEvent id="sid-11AC64F4-17C1-489A-9BED-0FCCDBAF5602" />
    28 
    29     <sequenceFlow id="sid-15E29826-5274-4586-A743-A728B87EBB00" sourceRef="sid-15215C7C-14D0-4460-9BB1-4DE865EA03A7" targetRef="sid-11AC64F4-17C1-489A-9BED-0FCCDBAF5602" />
    30 
    31     <sequenceFlow id="sid-228F25A5-209F-4239-852E-F0B734F115A4" sourceRef="sid-B51BA61F-F3FA-489E-8E50-87AEED50C3B3" targetRef="sid-15215C7C-14D0-4460-9BB1-4DE865EA03A7" />
    32 
    33   </process>
    34 
    35   <bpmndi:BPMNDiagram id="BPMNDiagram_process">
    36 
    37     <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process">
    38 
    39       <bpmndi:BPMNShape bpmnElement="sid-B51BA61F-F3FA-489E-8E50-87AEED50C3B3" id="BPMNShape_sid-B51BA61F-F3FA-489E-8E50-87AEED50C3B3">
    40 
    41         <omgdc:Bounds height="31.0" width="31.0" x="161.25" y="91.5" />
    42 
    43       </bpmndi:BPMNShape>
    44 
    45       <bpmndi:BPMNShape bpmnElement="sid-15215C7C-14D0-4460-9BB1-4DE865EA03A7" id="BPMNShape_sid-15215C7C-14D0-4460-9BB1-4DE865EA03A7">
    46 
    47         <omgdc:Bounds height="80.0" width="100.0" x="313.75" y="67.0" />
    48 
    49       </bpmndi:BPMNShape>
    50 
    51       <bpmndi:BPMNShape bpmnElement="sid-11AC64F4-17C1-489A-9BED-0FCCDBAF5602" id="BPMNShape_sid-11AC64F4-17C1-489A-9BED-0FCCDBAF5602">
    52 
    53         <omgdc:Bounds height="28.0" width="28.0" x="458.75" y="93.0" />
    54 
    55       </bpmndi:BPMNShape>
    56 
    57       <bpmndi:BPMNEdge bpmnElement="sid-228F25A5-209F-4239-852E-F0B734F115A4" id="BPMNEdge_sid-228F25A5-209F-4239-852E-F0B734F115A4">
    58 
    59         <omgdi:waypoint x="193.24994249971698" y="107.457104711797" />
    60 
    61         <omgdi:waypoint x="313.75" y="107.13404825737265" />
    62 
    63       </bpmndi:BPMNEdge>
    64 
    65       <bpmndi:BPMNEdge bpmnElement="sid-15E29826-5274-4586-A743-A728B87EBB00" id="BPMNEdge_sid-15E29826-5274-4586-A743-A728B87EBB00">
    66 
    67         <omgdi:waypoint x="413.75" y="107.0" />
    68 
    69         <omgdi:waypoint x="458.75" y="107.0" />
    70 
    71       </bpmndi:BPMNEdge>
    72 
    73     </bpmndi:BPMNPlane>
    74 
    75   </bpmndi:BPMNDiagram>
    76 
    77 </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 TimerTestRunningTask 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("TimerTestRunningTask is running!");
    58 
    59 }
    60 
    61  
    62 
    63 }

    部署流程,无需启动。

    运行结果:

    2-3定时启动事件运行结果

     

    注意的是,当定时启动任务已经超过运行时间,再次去部署流程里面启动这个任务,就会把它当成一个普通的空启动事件来处理。部署新的流程,上一版本的流程就会被移除。

    (3)信号事件(Signal Start Event)

    信号启动事件,使用具名信号启动流程实例。这个信号可以由流程实例中的信号抛出中间事件(intermediary signal throw event),或
    APIruntimeService.signalEventReceivedXXX方法)触发。这些情况下,所有拥有相同名字信号启动事件的流程定义都会被启动。
    请注意这些情况下,都可以选择异步还是同步启动流程实例。
    需要为API传递的 signalName ,是由 signal 元素的 name 属性决定的名字。 signal 元素被 signalEventDefinition signalRef
    属性所引用。

    图标:

    3-1 信号启动事件图标

    信号事件流程图设计:

      3-2 信号启动流程设计

     

    信号事件的启动:

     1 List<Execution> executions =  execution.getEngineServices().getRuntimeService().createExecutionQuery()
     2 
     3        .signalEventSubscriptionName("singal")
     4 
     5        .list();
     6 
     7 for(Execution e:executions){
     8 
     9 execution.getEngineServices().getRuntimeService().signalEventReceived("singal", e.getId());
    10 
    11 }

    信号事件XML代码:

     1 <signal id="theSignal" name="The Signal" />
     2 <process id="processWithSignalStart1">
     3 <startEvent id="theStart">
     4 <signalEventDefinition id="theSignalEventDefinition" signalRef="theSignal" />
     5 </startEvent>
     6 <sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask" />
     7 <userTask id="theTask" name="Task in process A" />
     8 <sequenceFlow id="flow2" sourceRef="theTask" targetRef="theEnd" />
     9 <endEvent id="theEnd" />
    10 </process> 

    说明:

    信号启动事件的两种启动方式:

    1、信号可以是流程实例中抛出的信号事件

    2、API触发

    信号事件的执行方式:

    1、异步执行

    2、同步执行

    注意:信号启动事件,是所有相同名称的信号事件都会被执行!

    (4)消息事件(Message Start Event

    启动方式:

    1、流程实例中的信号抛出事件

    2、API触发(runtimeService.signalEventReceivedXXX方法)触发 

     

    注意事项:

    1)流程的消息名称必须是唯一的,一个流程定义不得包含多个同名的启动消息。否则部署流程的时候就会抛异常。

    2)消息启动事件,在所有部署的流程里面必须要唯一,否则也会抛异常。

    3)直接启动消息定义事件,会当作一个普通启动事件执行。

    4)新版本发布,会取消上一版本的消息订阅。

    5)启动流程实例的三种方法

    1 ProcessInstance startProcessInstanceByMessage(String messageName);
    2 ProcessInstance startProcessInstanceByMessage(String messageName, Map<String, Object> processVariables);
    3 ProcessInstance startProcessInstanceByMessage(String messageName, String businessKey, Map<String, Object<
    4 processVariables); 

     

    注:messageName 是由 message 元素的 name 属性决定的名字。 message 元素被 messageEventDefinition messageRef 属性引用 

    6)只有顶层流程(toplevel process)才支持消息启动事件 ,嵌入流程(子流程)不支持消息事件。

    7)如果一个流程定义多个消息事件无法使用runtimeService.startProcessInstanceByKey()
    runtimeService.startProcessInstanceById() 启动消息事件,但是一个流程定义单个消息事件可以启动。如果同一个流程定义同时具有多个消息事件和空启动事件,就会启动空启动事件,同一个流程定义多个消息事件的时候,使用这个方法启动,就会抛异常。

     

    图标:

      4-1 消息启动事件图标

    流程图设计:

      4-2 消息启动事件流程设计

     

    我们在消息启动事件后面放置了一个手工任务,并在这个手工任务上面设置一个监听类,这个任务只要是监控这个启动事件的流程是否被成功的执行。

    流程代码:

     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   <message id="message" name="messages" />
     6 
     7   <process id="process" isExecutable="true">
     8 
     9     <startEvent id="startEven" name="MessageTask">
    10 
    11       <messageEventDefinition messageRef="message" />
    12 
    13     </startEvent>
    14 
    15     <manualTask id="sid-CB1E9115-3038-4E4D-901B-3FFE85996ADB" name="手动任务">
    16 
    17       <extensionElements>
    18 
    19         <activiti:executionListener event="start" class="light.mvc.workflow.serviceTask.MessageTestRunningTask" />
    20 
    21       </extensionElements>
    22 
    23     </manualTask>
    24 
    25     <endEvent id="sid-EB3FFCA5-960F-4BD1-A765-67AEAD90B862" />
    26 
    27     <sequenceFlow id="sid-3A543EA6-7A84-4CA1-80AE-0F9C40F7F208" sourceRef="sid-CB1E9115-3038-4E4D-901B-3FFE85996ADB" targetRef="sid-EB3FFCA5-960F-4BD1-A765-67AEAD90B862" />
    28 
    29     <sequenceFlow id="sid-1169B143-B2B1-4460-A357-50EA0D53CA6A" sourceRef="startEven" targetRef="sid-CB1E9115-3038-4E4D-901B-3FFE85996ADB" />
    30 
    31   </process>
    32 
    33   <bpmndi:BPMNDiagram id="BPMNDiagram_process">
    34 
    35     <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process">
    36 
    37       <bpmndi:BPMNShape bpmnElement="startEven" id="BPMNShape_startEven">
    38 
    39         <omgdc:Bounds height="30.0" width="30.5" x="237.5" y="116.0" />
    40 
    41       </bpmndi:BPMNShape>
    42 
    43       <bpmndi:BPMNShape bpmnElement="sid-CB1E9115-3038-4E4D-901B-3FFE85996ADB" id="BPMNShape_sid-CB1E9115-3038-4E4D-901B-3FFE85996ADB">
    44 
    45         <omgdc:Bounds height="80.0" width="100.0" x="344.75" y="88.0" />
    46 
    47       </bpmndi:BPMNShape>
    48 
    49       <bpmndi:BPMNShape bpmnElement="sid-EB3FFCA5-960F-4BD1-A765-67AEAD90B862" id="BPMNShape_sid-EB3FFCA5-960F-4BD1-A765-67AEAD90B862">
    50 
    51         <omgdc:Bounds height="28.0" width="28.0" x="540.0" y="114.0" />
    52 
    53       </bpmndi:BPMNShape>
    54 
    55       <bpmndi:BPMNEdge bpmnElement="sid-3A543EA6-7A84-4CA1-80AE-0F9C40F7F208" id="BPMNEdge_sid-3A543EA6-7A84-4CA1-80AE-0F9C40F7F208">
    56 
    57         <omgdi:waypoint x="444.75" y="128.0" />
    58 
    59         <omgdi:waypoint x="540.0" y="128.0" />
    60 
    61       </bpmndi:BPMNEdge>
    62 
    63       <bpmndi:BPMNEdge bpmnElement="sid-1169B143-B2B1-4460-A357-50EA0D53CA6A" id="BPMNEdge_sid-1169B143-B2B1-4460-A357-50EA0D53CA6A">
    64 
    65         <omgdi:waypoint x="268.4965298183317" y="130.67203111495593" />
    66 
    67         <omgdi:waypoint x="344.75" y="129.05820105820106" />
    68 
    69       </bpmndi:BPMNEdge>
    70 
    71     </bpmndi:BPMNPlane>
    72 
    73   </bpmndi:BPMNDiagram>
    74 
    75 </definitions>

     

    我们测试的时候借助一个手工任务触发消息事件的流程。

     

    手工任务流程设计:

    4-3 手工任务事件流程设计

     

     

    手工任务流程代码:

     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.ServiceTask" />
    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 { execution.getEngineServices().getRuntimeService().startProcessInstanceByMessage("message");
    60 
    61 System.out.println("TestRunningTask is running!");
    62 
    63 }
    64 
    65  
    66 
    67 }

    消息事件执行测试代码(监听类):

     

     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 MessageTestRunningTask 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("MessageTestRunningTask is running!");
    58 
    59 }
    60 
    61  
    62 
    63 }

     

    运行结果:

     

    4-4 消息事件执行结果

     

     

     

    (5)异常事件(错误启动事件 Error Start Event

     

    BPMN2.0规定了错误开始事件只能使用在事件子流程(Event Sub-Process)中,该该事件不能使用在其他流程中,包括最高级流程(Top-Level Process)、嵌套子流程(Sub-Process)和调用子流程(Call Activity)。BPMN错误与Java异常不是一回事。事实上,这两者毫无共同点。BPMN错误事件是建模业务异常(business exceptions)的方式。

     

    错误消息开始事件图标:

     

      5-1 异常事件图标

     

     

    错误事件定义 Error Event Definitions

    errorerrorCode用于查找匹配的错误捕获边界事件。如果errorRef不匹配任何已定义的error,则该errorRef会用做errorCode的快捷方式。


    请注意errorRef必须遵从BPMN 2.0概要(schema),且必须是合法的QName

    下面这两段代码是一样的
    1)

    1 <error id="myError" errorCode="error123" />
    2 ...
    3 <process id="myProcess">
    4 ...
    5 <endEvent id="myErrorEndEvent">
    6 <errorEventDefinition errorRef="myError" />
    7 </endEvent>

    2

    1 <endEvent id="myErrorEndEvent">
    2 <errorEventDefinition errorRef="error123" />
    3 </endEvent> 

    错误启动事件流程图设计:

     

    5-2 异常事件流程设计

     

     

    说明:

    我们一共设计两个流程,一个是子流程事件,一个是主流程。当这个流程启动,便会启动主流程。主流程的Servertask便会抛出一个BpmnError的流程错误。这个流程错误会被Activiti引擎拦截到,然户触发子流程事件里面的错误启动事件。从而触发SubServertask这个Server任务。

    图解:

     

    5-3 异常事件图解

     

    流程图XML定义:

      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="test2" name="test" isExecutable="true">
      6 
      7     <subProcess id="sid-79BC7EB5-33E8-45BF-9572-2B74EAEECA04" name="subProcess" triggeredByEvent="true">
      8 
      9       <startEvent id="errorId" name="error">
     10 
     11         <errorEventDefinition errorRef="MyErrorCode" />
     12 
     13       </startEvent>
     14 
     15       <serviceTask id="Sub" name="SubServer task" activiti:class="light.mvc.workflow.serviceTask.ErrorTestRunningTask" />
     16 
     17       <endEvent id="sid-7511716A-8CE6-4BA6-94B4-77F5C6976148" />
     18 
     19       <sequenceFlow id="sid-C0C5E2A2-2859-4A00-A14D-B74D12C4F992" sourceRef="Sub" targetRef="sid-7511716A-8CE6-4BA6-94B4-77F5C6976148" />
     20 
     21       <sequenceFlow id="sid-B6D21933-0380-4829-BF96-1D4206F33507" sourceRef="errorId" targetRef="Sub" />
     22 
     23     </subProcess>
     24 
     25     <startEvent id="sid-7DB721F7-4F4D-4C4B-AC8F-C9ED7EF64D76" />
     26 
     27     <serviceTask id="pro" name="Servertask" activiti:class="light.mvc.workflow.serviceTask.TestRunningTask" />
     28 
     29     <endEvent id="sid-C3FC8A02-7A8A-4E38-AC2A-31444F3167FF" />
     30 
     31     <sequenceFlow id="sid-3544F586-2757-45DB-9D17-2AB72EBB1535" sourceRef="pro" targetRef="sid-C3FC8A02-7A8A-4E38-AC2A-31444F3167FF" />
     32 
     33     <sequenceFlow id="sid-D638FB68-7AB5-48D1-9B0D-4C74B1351B6D" sourceRef="sid-7DB721F7-4F4D-4C4B-AC8F-C9ED7EF64D76" targetRef="pro" />
     34 
     35   </process>
     36 
     37   <bpmndi:BPMNDiagram id="BPMNDiagram_test2">
     38 
     39     <bpmndi:BPMNPlane bpmnElement="test2" id="BPMNPlane_test2">
     40 
     41       <bpmndi:BPMNShape bpmnElement="sid-79BC7EB5-33E8-45BF-9572-2B74EAEECA04" id="BPMNShape_sid-79BC7EB5-33E8-45BF-9572-2B74EAEECA04">
     42 
     43         <omgdc:Bounds height="128.0" width="434.0" x="165.0" y="30.0" />
     44 
     45       </bpmndi:BPMNShape>
     46 
     47       <bpmndi:BPMNShape bpmnElement="errorId" id="BPMNShape_errorId">
     48 
     49         <omgdc:Bounds height="30.0" width="30.0" x="228.75" y="68.0" />
     50 
     51       </bpmndi:BPMNShape>
     52 
     53       <bpmndi:BPMNShape bpmnElement="Sub" id="BPMNShape_Sub">
     54 
     55         <omgdc:Bounds height="80.0" width="100.0" x="332.0" y="44.0" />
     56 
     57       </bpmndi:BPMNShape>
     58 
     59       <bpmndi:BPMNShape bpmnElement="sid-7511716A-8CE6-4BA6-94B4-77F5C6976148" id="BPMNShape_sid-7511716A-8CE6-4BA6-94B4-77F5C6976148">
     60 
     61         <omgdc:Bounds height="28.0" width="28.0" x="461.75" y="70.0" />
     62 
     63       </bpmndi:BPMNShape>
     64 
     65       <bpmndi:BPMNShape bpmnElement="sid-7DB721F7-4F4D-4C4B-AC8F-C9ED7EF64D76" id="BPMNShape_sid-7DB721F7-4F4D-4C4B-AC8F-C9ED7EF64D76">
     66 
     67         <omgdc:Bounds height="30.0" width="30.0" x="231.75" y="196.0" />
     68 
     69       </bpmndi:BPMNShape>
     70 
     71       <bpmndi:BPMNShape bpmnElement="pro" id="BPMNShape_pro">
     72 
     73         <omgdc:Bounds height="80.0" width="100.0" x="316.75" y="172.0" />
     74 
     75       </bpmndi:BPMNShape>
     76 
     77       <bpmndi:BPMNShape bpmnElement="sid-C3FC8A02-7A8A-4E38-AC2A-31444F3167FF" id="BPMNShape_sid-C3FC8A02-7A8A-4E38-AC2A-31444F3167FF">
     78 
     79         <omgdc:Bounds height="28.0" width="28.0" x="461.75" y="198.0" />
     80 
     81       </bpmndi:BPMNShape>
     82 
     83       <bpmndi:BPMNEdge bpmnElement="sid-C0C5E2A2-2859-4A00-A14D-B74D12C4F992" id="BPMNEdge_sid-C0C5E2A2-2859-4A00-A14D-B74D12C4F992">
     84 
     85         <omgdi:waypoint x="432.0" y="84.0" />
     86 
     87         <omgdi:waypoint x="461.75" y="84.0" />
     88 
     89       </bpmndi:BPMNEdge>
     90 
     91       <bpmndi:BPMNEdge bpmnElement="sid-B6D21933-0380-4829-BF96-1D4206F33507" id="BPMNEdge_sid-B6D21933-0380-4829-BF96-1D4206F33507">
     92 
     93         <omgdi:waypoint x="258.749607613604" y="83.10849625760292" />
     94 
     95         <omgdi:waypoint x="332.0" y="83.63833634719711" />
     96 
     97       </bpmndi:BPMNEdge>
     98 
     99       <bpmndi:BPMNEdge bpmnElement="sid-3544F586-2757-45DB-9D17-2AB72EBB1535" id="BPMNEdge_sid-3544F586-2757-45DB-9D17-2AB72EBB1535">
    100 
    101         <omgdi:waypoint x="416.75" y="212.0" />
    102 
    103         <omgdi:waypoint x="461.75" y="212.0" />
    104 
    105       </bpmndi:BPMNEdge>
    106 
    107       <bpmndi:BPMNEdge bpmnElement="sid-D638FB68-7AB5-48D1-9B0D-4C74B1351B6D" id="BPMNEdge_sid-D638FB68-7AB5-48D1-9B0D-4C74B1351B6D">
    108 
    109         <omgdi:waypoint x="261.74947919379184" y="211.12499565994827" />
    110 
    111         <omgdi:waypoint x="316.75" y="211.58333333333331" />
    112 
    113       </bpmndi:BPMNEdge>
    114 
    115     </bpmndi:BPMNPlane>
    116 
    117   </bpmndi:BPMNDiagram>
    118 
    119 </definitions>

    主流程的监听类:

     1 /**
     2 
     3  *
     4 
     5  */
     6 
     7 package light.mvc.workflow.serviceTask;
     8 
     9  
    10 
    11 import org.activiti.engine.delegate.BpmnError;
    12 
    13 import org.activiti.engine.delegate.DelegateExecution;
    14 
    15 import org.activiti.engine.delegate.JavaDelegate;
    16 
    17  
    18 
    19 /**  
    20 
    21  *   
    22 
    23  * 项目名称:lightmvc  
    24 
    25  * 类名称:ServiceTask  
    26 
    27  * 类描述:  
    28 
    29  * 创建人:邓家海  
    30 
    31  * 创建时间:2017年6月4日 下午6:18:11  
    32 
    33  * 修改人:deng  
    34 
    35  * 修改时间:2017年7月16日 下午7:28:11  
    36 
    37  * 修改备注:  
    38 
    39  * @version   
    40 
    41  *   
    42 
    43  */
    44 
    45  
    46 
    47 public class TestRunningTask implements JavaDelegate{
    48 
    49  
    50 
    51 //重写委托的提交方法
    52 
    53  
    54 
    55  
    56 
    57 @Override
    58 
    59 public void execute(DelegateExecution execution) throws Exception{
    60 
    61 System.out.println("TestRunningTask is running!");
    62 
    63  
    64 
    65  
    66 
    67 //throw new BpmnError("myError","myError");
    68 
    69 throw new BpmnError("MyErrorCode","myError");
    70 
    71  
    72 
    73  
    74 
    75  
    76 
    77  
    78 
    79 }
    80 
    81  
    82 
    83  
    84 
    85 }
    86 
    87  

    子流程事件的监听类:

     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 ErrorTestRunningTask 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("ErrorTestRunningTask is running!");
    58 
    59 }
    60 
    61  
    62 
    63 }
    64 
    65  

    运行结果:

    5-4 异常事件执行结果

     

    到这里,五个启动事件都介绍完了。接下来就网关了。

     Activiti交流QQ群:634320089

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    jackson 枚举 enum json 解析类型 返回数字 或者自定义文字 How To Serialize Enums as JSON Objects with Jackson
    Antd Pro V5 中ProTable 自定义查询参数和返回值
    ES6/Antd 代码阅读记录
    es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
    Antd Hooks
    使用.Net Core开发WPF App系列教程(其它 、保存控件内容为图片)
    使用.Net Core开发WPF App系列教程( 三、与.Net Framework的区别)
    使用.Net Core开发WPF App系列教程( 四、WPF中的XAML)
    使用.Net Core开发WPF App系列教程( 二、在Visual Studio 2019中创建.Net Core WPF工程)
    使用.Net Core开发WPF App系列教程( 一、.Net Core和WPF介绍)
  • 原文地址:https://www.cnblogs.com/dengjiahai/p/7191865.html
Copyright © 2011-2022 走看看