1. 程式人生 > >Activiti 6.x【6】StartEvent(上)

Activiti 6.x【6】StartEvent(上)

StartEvent元件

StartEvent總述

這裡寫圖片描述

StartEvent分為五種,第一種為普通StartEvent,第二種為帶定時器的SatrtEvent,第三種為接收訊息的StartEvent,第四種為帶錯誤資訊的StartEvent這種最為特殊,下文會詳細來說。第五種為帶訊號的StartEvent從這篇文章主要講工作流的StartEvent。下面開始逐一講解。

StartEvent(普通)

StartEvent為一個流程的起始點,我們來看看官網是如何描述的: StartEvent(普通)對應的XML內程式碼如下

<startEvent id="startevent1"
name="Start">
</startEvent>

這裡寫圖片描述

activiti:initiator="initiator"

這個部分,activiti:initiator:在程序啟動時將儲存使用者標識的變數名稱。以initiator為UserId。一般設定這個是和form聯用的【emmm我是不會去用的】。這裡就是告訴大家可以用xml開啟bpmn的程式碼有這個屬性設定。通過eclipse外掛可以直接如下圖這樣設定。 這裡寫圖片描述 這裡寫圖片描述

老規矩跑起來試試

這裡寫圖片描述 這裡寫圖片描述 可以看到已經進了歷史資料表了【因為已經啟動了start這個例項被執行了就進入了歷史表】 starter:以這種方式設定就會是starter participant:任務辦理人,建議以流程變數的方式指定 candidate:候選人,組任務那塊可以指定

TimerStartEvent(定時器啟動元件)

TimerStartEvent對應的XML內程式碼如下【未做任何設定的TimerStartEvent】

<startEvent id="timerstartevent1" name="Timer start">
  <timerEventDefinition></timerEventDefinition>
</startEvent>

計時器啟動事件用於在給定時間建立流程例項。它既可以用於應該只啟動一次的程序,也可以用於應該以特定時間間隔啟動的程序。

注意【摘自官網】:

  • 子流程不能有TimerStartEvent。
  • 一旦部署了程序,就會安排TimerStartEvent。不需要呼叫startProcessInstanceByXXX方法,雖然呼叫start process方法不受限制,並且會在startProcessInstanceByXXX Invocation時再啟動一個程序。
  • 當部署具有TimerStartEvent的新版本的程序時,將刪除與先前計時器對應的作業。原因是通常不希望自動啟動此舊版本流程的新流程例項。

使用的方式呢就是使用如下三個標籤控制定時器開始事件。接下來是demo了。

這裡寫圖片描述

TiemCycle【按時間迴圈啟動】

流程圖總覽【UserTask以及後面的完全沒有設定,for流程完整性和方便檢視執行效果】 這裡寫圖片描述

流程圖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="TiemCycle">
  <process id="TiemCycle" name="TiemCycle" isExecutable="true">
    <endEvent id="endevent1" name="End"></endEvent>
    <userTask id="usertask1" name="User Task"></userTask>
    <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
    <startEvent id="timerstartevent1" name="Timer start">
      <timerEventDefinition>
        <timeCycle>0/5 * * * * ?</timeCycle>
      </timerEventDefinition>
    </startEvent>
    <sequenceFlow id="flow3" sourceRef="timerstartevent1" targetRef="usertask1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_TiemCycle">
    <bpmndi:BPMNPlane bpmnElement="TiemCycle" id="BPMNPlane_TiemCycle">
      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="490.0" y="170.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
        <omgdc:Bounds height="55.0" width="105.0" x="290.0" y="160.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="timerstartevent1" id="BPMNShape_timerstartevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="160.0" y="170.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
        <omgdi:waypoint x="395.0" y="187.0"></omgdi:waypoint>
        <omgdi:waypoint x="490.0" y="187.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
        <omgdi:waypoint x="195.0" y="187.0"></omgdi:waypoint>
        <omgdi:waypoint x="290.0" y="187.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

corn 表示式

這裡寫圖片描述 這個代表每分鐘的第0秒開始每五秒鐘呼叫一次。【生成Corn表示式的網站,不必刻意去記憶 http://cron.qqe2.com/

【ISO 8601方式】重複5次,每次間隔10小時

<timeCycle activiti:endDate="2019-09-12T21:42:00+00:00">R5/PT10H</timeCycle>
<timeCycle>R5/2019-10-07T12:00/PT10H</timeCycle>//這個是開始時間

測試程式碼

TimeDate【定時啟動】

流程圖總覽

這裡寫圖片描述 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">
  <process id="myProcess" name="My process" isExecutable="true">
    <startEvent id="timerstartevent1" name="Timer start">
      <timerEventDefinition>
        <timeDate>2018-09-12T17:20:00</timeDate>
      </timerEventDefinition>
    </startEvent>
    <userTask id="usertask1" name="User Task"></userTask>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow1" sourceRef="timerstartevent1" targetRef="usertask1"></sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
    <bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess">
      <bpmndi:BPMNShape bpmnElement="timerstartevent1" id="BPMNShape_timerstartevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="210.0" y="240.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
        <omgdc:Bounds height="55.0" width="105.0" x="360.0" y="230.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="590.0" y="240.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="245.0" y="257.0"></omgdi:waypoint>
        <omgdi:waypoint x="360.0" y="257.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
        <omgdi:waypoint x="465.0" y="257.0"></omgdi:waypoint>
        <omgdi:waypoint x="590.0" y="257.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

時間的格式是有要求的 這裡寫圖片描述

直接部署流程五點20時檢視是否已經自動生成流程例項

@Test
public void TimeDate() throws InterruptedException{
    Deployment deployment = repositoryService.createDeployment()
            .name("TimeDate")
            .addClasspathResource("bpmn/TimeDate.bpmn")
            .addClasspathResource("bpmn/TimeDate.png")
            .deploy();
    long dataCount = runtimeService.createProcessInstanceQuery().count();
    System.out.println("sleep前流程例項數量:" + dataCount);
    Thread.sleep(60000L);//
    dataCount = runtimeService.createProcessInstanceQuery().count();
    System.out.println("sleep後流程例項數量:" + dataCount);
}

這裡寫圖片描述 【單元測試執行緒程式碼執行完則退出,不會像主執行緒一樣等待子執行緒退出而退出, 會直接退出。Junit單元測試不支援多執行緒。主執行緒退出,子執行緒也會退出。】

@Test
public void TimeDate() throws InterruptedException{
    Deployment deployment = repositoryService.createDeployment()
            .name("TimeDate")
            .addClasspathResource("bpmn/TimeDate.bpmn")
            .addClasspathResource("bpmn/TimeDate.png")
            .deploy();
    long dataCount = runtimeService.createProcessInstanceQuery().count();
    System.out.println("sleep前流程例項數量:" + dataCount);
    Thread.sleep(60000L);//
    dataCount = runtimeService.createProcessInstanceQuery().count();
    System.out.println("sleep後流程例項數量:" + dataCount);
}

這裡寫圖片描述 【單元測試執行緒程式碼執行完則退出,不會像主執行緒一樣等待子執行緒退出而退出, 會直接退出。Junit單元測試不支援多執行緒。主執行緒退出,子執行緒也會退出。】

TimeDuration【定時啟動】

微改一下,這裡稍微偷懶一下啦。 這裡寫圖片描述

@Test
public void TimeDate() throws InterruptedException{
    Deployment deployment = repositoryService.createDeployment()
            .name("TimeDate")
            .addClasspathResource("bpmn/TimeDate.bpmn")
            .addClasspathResource("bpmn/TimeDate.png")
            .deploy();
    long dataCount = runtimeService.createProcessInstanceQuery().count();
    System.out.println("sleep前流程例項數量:" + dataCount);
    Thread.sleep(5000L);
    dataCount = runtimeService.createProcessInstanceQuery().count();
    System.out.println("sleep後流程例項數量:" + dataCount);
}

這裡寫圖片描述