Activiti實戰03_Hello World

  Hello World如此經典,以至於幾乎學習沒一門新的技術都是從Hello World開始,可能意味着開啓了新世界的大門吧,接下來就讓我們一起步入到Activiti的世界中吧!

  本文所使用開發環境

  JDK1.8、Maven、Eclipse(Version: Neon Release (4.6.0))

1:最簡單的流程定義

  1.1 Activiti項目創建

    打開Eclipse -> File -> New -> Other -> 輸入Activiti -> 選擇Activiti Project -> 輸入文件名

           

    創建好的項目結構如圖所示(典型的Maven項目結構):

      

      項目建好了,就可以開始了,右鍵diagrams -> New -> Other -> Activiti Diagram ,選定後隨便起個名字就行了。

      進入文件後會看到在Eclipse的右邊有一個控件欄一樣的東西

        

      創建一個最簡單的流程定義,主要會用到Event控件,至於剩下的其他控件的使用,會在後續做出說明。然後選擇一個StartEvent

        

 

      在開始任務之後在選擇一個結束任務(EndEvent),至此,一個最簡單的流程定義就完成了,如下圖所示:

     

      其實Activiti的Bpmn流程圖也是通過Xml進行描述的,右鍵該流程圖 -> Open With -> XML editor

   代碼清單

<?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: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="startevent1" name="Start"></startEvent>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="endevent1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
    <bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess">
      <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="140.0" y="120.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="250.0" y="120.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="175.0" y="137.0"></omgdi:waypoint>
        <omgdi:waypoint x="250.0" y="137.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

  代碼清單解讀:

   1:<definitions></definitions>

      在該標籤之間的內容屬於整個流程定義的所有信息

   2:<process></process>(非常重要

      在該標籤中的是流程相關信息,是能夠在Properties中進行修改和添加的。

       id:唯一標識符,如果id相同,表明是同一流程,Activiti將會對其進行升級部署

       name:流程圖名稱

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

        這段XML主要是對開始節點的命名和屬性設置

      <endEvent id="endevent1" name="End"></endEvent>

        這段XML主要是對結束節點的命名和屬性設置

      <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="endevent1"></sequenceFlow>

        這段XML是對流程圖中連線的解讀,從哪開始,流向哪裏:

        sourceRef:連線的起點(對應相關節點的id)

        targetRef:連線的終點(對應相關節點的id)

        id:連線的標識

   3:<bpmndi:BPMNDiagram></bpmndi:BPMNDiagram>(基本不需要關心)

      該標籤這個是爲了給流程圖中任務添加顯示框所用的定位信息,標註了每個元素的位置信息。

  在Activiti的開發中,有一個至關重要的窗口——Properties窗口,在這個窗口內包含了這個流程的所有基本信息,以及對這個流程的所有操作。

  Properties窗口的調出方式:Window -> Show View -> Otehr -> Properties即可

2:測試

  

public class VerySimpleLeaveProcessTest {

    @Test
    public void testStartProcess(){
        // 創建流程引擎,使用內存數據庫
        ProcessEngine processEngine = ProcessEngineConfiguration
                .createStandaloneInMemProcessEngineConfiguration()
                .buildProcessEngine();
        // 部署流程定義文件
        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.createDeployment()
        .addClasspathResource("diagrams/ch02Leave.bpmn")
        .deploy();
        // 驗證已部署的流程定義
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .singleResult();
        assertEquals("myProcess",processDefinition.getKey());
        // 啓動流程並返回流程實例
        RuntimeService runtimeService = processEngine.getRuntimeService();
        ProcessInstance instance = runtimeService.startProcessInstanceByKey("myProcess");
        assertNotNull(instance);
        
    }

}

輸出結果,如果輸出有結果,就說明你成功了:

 

 

  

 

發佈了51 篇原創文章 · 獲贊 26 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章