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

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    fiddler 增加请求时间显示
    es 多字段分词查询优化
    【二分】【预处理】zoj4029 Now Loading!!!
    【数论】【扩展欧几里得】Codeforces Round #484 (Div. 2) E. Billiard
    【set】【multiset】Codeforces Round #484 (Div. 2) D. Shark
    【推导】Codeforces Round #484 (Div. 2) C. Cut 'em all!
    【递推】Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!] D. XOR-pyramid
    【数论】Codeforces Round #483 (Div. 2) [Thanks, Botan Investments and Victor Shaburov!] C. Finite or not?
    【Trie】【枚举约数】Codeforces Round #482 (Div. 2) D. Kuro and GCD and XOR and SUM
    【枚举】【贪心】Codeforces Round #482 (Div. 2) B. Treasure Hunt
  • 原文地址:https://www.cnblogs.com/dengjiahai/p/7191865.html
Copyright © 2011-2022 走看看