Activiti 6.x【7】StartEvent(下)

简介: 版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82693912 ...
版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82693912

StartEvent组件


StartEvent总述

这里写图片描述

StartEvent分为五种,第一种为普通StartEvent,第二种为带定时器的SatrtEvent,第三种为接收消息的StartEvent,第四种为带错误信息的StartEvent这种最为特殊,下文会详细来说。第五种为带信号的StartEvent从这篇文章主要讲工作流的StartEvent。下面开始逐一讲解。

MessageStartEvent(消息启动组件)

注意事项(摘自官网)

  • MessageStartEvent的name在给定的流程定义中必须是唯一的。流程定义不能具有多个具有相同name的MessageStartEvent。如果两个或多个MessageStartEvent引用具有相同消息名称的消息,则Activiti在部署流程定义时抛出异常。
  • MessageStartEvent的name在所有已部署的流程定义中必须是唯一的。如果一个或多个消息启动事件引用与已经由不同流程定义部署的MessageStartEvent同名的消息,则Activiti在部署流程定义时抛出异常【划重点了要考啊,简单说别重名吧】。
  • 流程版本控制:部署新版本的流程定义后,将取消先前版本的消息订阅。对于新版本中不存在的消息事件也是如此。
  • MessageStartEvent仅在顶级流程上受支持。嵌入式子流程不支持消息启动事件。
  • 如果一个流程定义有多个消息开始的事件和一个无启动的事件,
    runtimeService.startProcessInstanceByKey(…​)和runtimeService.startProcessInstanceById(…​)使用无启动事件启动流程实例。
  • 如果一个流程定义有多个消息开始的事件,并没有无启动事件,
    runtimeService.startProcessInstanceByKey(…​)和runtimeService.startProcessInstanceById(…​)抛出一个异常。
  • 如果一个流程定义有一个消息开始的事件,runtimeService.startProcessInstanceByKey(…​)和runtimeService.startProcessInstanceById(…​)使用消息开始的事件开始一个新的流程实例。

流程图总览
这里写图片描述
XML代码

<?xml version="1.0" encoding="UTF-8"?>
<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/test">
  <message id="msg" name="msgName"></message>
  <process id="myProcess" name="My process" isExecutable="true">
    <startEvent id="messagestartevent1" name="Message start">
      <messageEventDefinition>
        <messageEventDefinition messageRef="msg"></messageEventDefinition>
      </messageEventDefinition>
    </startEvent>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
    <bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess">
      <bpmndi:BPMNShape bpmnElement="messagestartevent1" id="BPMNShape_messagestartevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="260.0" y="210.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

注意

这个属性冒似只能在XML内设置,这个为需要传入的message。如下:

这里写图片描述

    @Test
    public void MessageTest() throws InterruptedException{

        Deployment deployment = repositoryService.createDeployment()
                .name("MessageStart")
                .addClasspathResource("bpmn/MessageStart.bpmn")
                .addClasspathResource("bpmn/MessageStart.png")
                .deploy();

        ProcessInstance pi = runtimeService.startProcessInstanceByMessage("msgName");
        //ProcessInstance pi = runtimeService.startProcessInstanceByKey("MessageStart");
        System.out.println(pi.getId());
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .messageEventSubscriptionName("msgName")
                .singleResult();
        //测试查询消息方法
        System.out.println(processDefinition.getDeploymentId()+" "+deployment.getId());
    }
}

这里写图片描述

注意:这个时候以messageName可以完成部署,同时原来的老方式也仍然会执行。建议这种情况只使用message方式启动流程实例

官网的典型应用场景
这里写图片描述

SignalStartEvent(信号启动组件)

所谓信号,类似一种广播模式

流程图
这里写图片描述

XML代码

<?xml version="1.0" encoding="UTF-8"?>
<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/test">
  <signal id="Signal" name="SignalPTM"></signal>
  <process id="myProcess" name="My process" isExecutable="true">
    <startEvent id="signalstartevent1" name="Signal start">
      <signalEventDefinition signalRef="Signal"></signalEventDefinition>
    </startEvent>
    <userTask id="usertask1" name="User Task"></userTask>
    <sequenceFlow id="flow1" sourceRef="signalstartevent1" targetRef="usertask1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
    <bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess">
      <bpmndi:BPMNShape bpmnElement="signalstartevent1" id="BPMNShape_signalstartevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="200.0" y="200.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
        <omgdc:Bounds height="55.0" width="105.0" x="280.0" y="190.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="235.0" y="217.0"></omgdi:waypoint>
        <omgdi:waypoint x="280.0" y="217.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

设置如下:

这里写图片描述

测试代码

@Test
public void signalEvent() throws InterruptedException{

    Deployment deployment = repositoryService.createDeployment()
            .name("SignalEvent")
            .addClasspathResource("bpmn/SignalEvent.bpmn")
            .addClasspathResource("bpmn/SignalEvent.png")
            .deploy();
    long dataCount = runtimeService.createProcessInstanceQuery().count();
    System.out.println("sleep前流程实例数量:" + dataCount);
    runtimeService.signalEventReceived("SignalPTM");
    dataCount = runtimeService.createProcessInstanceQuery().count();
    System.out.println("sleep后流程实例数量:" + dataCount);
}

这里写图片描述

【注意:信号为多播事件,一般由信号中间件或后台执行方法发出信号,ref里面有该信号的所有组件将接收到信号,开始执行】

ErrorStartEvent(错误启动组件)

这里写图片描述
错误启动组件只能放在事件子流程中使用,为对应error信号被触发时调用。demo的话将在下一贴的第一个demo内讲解。与ErrorEndEvent一起讲解。

目录
相关文章
|
6月前
|
XML 数据可视化 安全
一文了解Activiti7
一文了解Activiti7
132 0
|
6月前
|
XML Java API
Activiti应用
Activiti应用
90 0
|
数据可视化 Java 关系型数据库
01-认识Activiti
类似如请假、离职、出差、报销这种有审批流程的业务,我们都可以称之为工作流(也叫流程引擎),它可以帮助用户实现一个审批流程的可视化,借助于工作流引擎可以搭建客户关系管理系统(CRM)、运输管理系统(TMS)、仓储管理系统(WMS)、财务费用系统等多种复杂业务系统。
103 0
|
安全 Java 测试技术
Activiti-Activiti整合篇
Activiti-Activiti整合篇
Activiti-Activiti整合篇
|
架构师 应用服务中间件 Apache
Activiti就是这么简单(二)
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 流程图。.
212 0
Activiti就是这么简单(二)
|
架构师 应用服务中间件 Apache
Activiti就是这么简单(三)
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 流程图。.
287 0
Activiti就是这么简单(三)
|
架构师 应用服务中间件 API
Activiti就是这么简单(四)
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 流程图。.
226 0
Activiti就是这么简单(四)
|
架构师 Java 应用服务中间件
Activiti就是这么简单(一)
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 流程图。.
385 0
Activiti就是这么简单(一)
|
XML 数据格式
Activiti 6.x【10】BoundaryEvent【下】
版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82720556 ...
2509 0
|
XML 数据格式
Activiti 6.x【11】IntermediateEvent
版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82728835 ...
1753 0