1. 程式人生 > >Flowable深入淺出-1 Flowable簡介

Flowable深入淺出-1 Flowable簡介

1 Flowable簡介

什麼是BPMN

先來看下百度百科的定義:
由BPMI(The Business Process Management Initiative)開發了一套標準叫業務流程建模符號(BPMN - Business Process Modeling Notation)。在 BPMI Notation Working Group超過2年的努力,於2004年5月對外發布了BPMN 1.0 規範。後BPMI併入到OMG組織,OMG於2011年推出BPMN2.0標準,對BPMN進行了重新定義**(Business Process Model and Notation**)。BPMN的主要目標是提供一些被所有業務使用者容易理解的符號,從建立流程輪廓的業務分析到這些流程的實現,直到終端使用者的管理監控。BPMN也支援提供一個內部的模型可以生成可執行的BPEL4WS。因此BPMN的出現,彌補了從業務流程設計到流程開發的間隙。
BPMN定義了一個業務流程圖(Business Process Diagram),該業務流程圖基於一個流程圖(flowcharting),該流程圖被設計用於建立業務流程操作的圖形化模型。而一個業務流程模型(Business Process Model),指一個由圖形物件(graphical objects)組成的網狀圖,圖形物件包括活動(activities)和用於定義這些活動執行順序的流程控制器(flow controls)。
大白話理解:
BPMN是一套符號的標準,這些符號描述瞭如果做一個業務,並且這個業務在做的過程中被人監控和控制。業務人員和開發人員通過這套圖形可以很好的完成協作。

什麼是Flowable

官方描述如下:
Flowable提供了一個組高效的核心開源業務流程引擎,為開發人員,系統管理員和業務使用者提供工作流和業務流程管理(BPM)平臺。全部用Java編寫,並且基於Apache 2.0許可的開源,程式碼在社群維護。其核心是一個快速,經過試驗和測試的動態BPMN流程引擎,附帶DMN決策表和CMMN Case管理引擎.
大白話理解:
Flowable是BPMN的一個基於java的軟體實現,不過Flowable不僅僅包括BPMN,還有DMN決策表和CMMN Case管理引擎,並且有自己的使用者管理、微服務API等一系列功能,是一個服務平臺。

Flowable官網、開源社群

Flowable官方網站:
https://www.flowable.org/
Flowable開原始碼倉庫:
https://github.com/flowable/flowable-engine
Flowable 最新版本(V6.4.0)截止目前下載地址:
Tomcat 版本安裝包:
https://download.csdn.net/download/houyj1986/10871025
https://github.com/flowable/flowable-engine/releases/download/flowable-6.4.0/tomcat-flowable-6.4.0.zip
EAR版本版本安裝包:
https://download.csdn.net/download/houyj1986/10871018


https://github.com/flowable/flowable-engine/releases/download/flowable-6.4.0/flowable-6.4.0.zip
Flowable原始碼(V6.4.0)下載地址:
https://download.csdn.net/download/houyj1986/10871014

Flowable流程示例

一個簡單度假申請流程主要過程如下:
1、員工提交請假資訊,如工號,請假天數
2、經理點選審批通過或者拒絕
3、如果拒絕直接進入系統發郵件服務通知員工
4、如果通過系統記錄該員工的請假天數,減少可用天數
5、員工看到自己請假審批通過,點選完成請假。
Flowable的BPMN流程圖: 員工度假申請流程圖

流程圖的BMPN檔案如下:

<?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:flowable="http://flowable.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.flowable.org/processdef">
  <process id="holidayRequest" name="Holiday Request" isExecutable="true">
    <startEvent id="startEvent"></startEvent>
    <sequenceFlow id="sequenceFlow-3fa7af74-df9a-4d3a-b0eb-10b20e7dc202" sourceRef="startEvent" targetRef="approveTask"></sequenceFlow>
    <userTask id="approveTask" name="經理通過或駁回申請"></userTask>
    <sequenceFlow id="sequenceFlow-d9127dc0-158f-4169-b61b-99226ffe8494" sourceRef="approveTask" targetRef="decision"></sequenceFlow>
    <exclusiveGateway id="decision"></exclusiveGateway>
    <serviceTask id="externalSystemCall" name="系統記錄申請天數" flowable:class="org.flowable.CallExternalSystemDelegate"></serviceTask>
    <sequenceFlow id="sequenceFlow-6232f578-3975-4d7e-81f2-43b242d33ebd" sourceRef="externalSystemCall" targetRef="holidayApprovedTask"></sequenceFlow>
    <userTask id="holidayApprovedTask" name="員工檢視申請通過"></userTask>
    <sequenceFlow id="sequenceFlow-29fd3375-9bcb-42f2-bb6f-63ae1f98813a" sourceRef="holidayApprovedTask" targetRef="approveEnd"></sequenceFlow>
    <serviceTask id="sendRejectionMail" name="傳送駁回郵件" flowable:class="org.flowable.SendRejectionMail"></serviceTask>
    <sequenceFlow id="sequenceFlow-b390b442-2411-44a9-96eb-3c129d4c8408" sourceRef="sendRejectionMail" targetRef="rejectEnd"></sequenceFlow>
    <endEvent id="approveEnd"></endEvent>
    <endEvent id="rejectEnd"></endEvent>
    <sequenceFlow id="sequenceFlow-6f21d3e2-2e49-4b00-9aae-0b71d861a177" name="駁回" sourceRef="decision" targetRef="sendRejectionMail">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!approved}]]></conditionExpression>
    </sequenceFlow>
    <sequenceFlow id="sequenceFlow-2470619b-fa36-440b-a231-b7bd226c23bb" name="通過" sourceRef="decision" targetRef="externalSystemCall">
      <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approved}]]></conditionExpression>
    </sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_holidayRequest">
    <bpmndi:BPMNPlane bpmnElement="holidayRequest" id="BPMNPlane_holidayRequest">
      <bpmndi:BPMNShape bpmnElement="startEvent" id="BPMNShape_startEvent">
        <omgdc:Bounds height="30.0" width="30.0" x="0.0" y="95.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="approveTask" id="BPMNShape_approveTask">
        <omgdc:Bounds height="60.0" width="100.0" x="80.0" y="80.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="decision" id="BPMNShape_decision">
        <omgdc:Bounds height="40.0" width="40.0" x="230.0" y="90.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="externalSystemCall" id="BPMNShape_externalSystemCall">
        <omgdc:Bounds height="60.0" width="100.0" x="320.0" y="1.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="holidayApprovedTask" id="BPMNShape_holidayApprovedTask">
        <omgdc:Bounds height="60.0" width="100.0" x="470.0" y="1.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="sendRejectionMail" id="BPMNShape_sendRejectionMail">
        <omgdc:Bounds height="60.0" width="100.0" x="320.0" y="160.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="approveEnd" id="BPMNShape_approveEnd">
        <omgdc:Bounds height="28.0" width="28.0" x="620.0" y="16.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="rejectEnd" id="BPMNShape_rejectEnd">
        <omgdc:Bounds height="28.0" width="28.0" x="505.0" y="175.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="sequenceFlow-2470619b-fa36-440b-a231-b7bd226c23bb" id="BPMNEdge_sequenceFlow-2470619b-fa36-440b-a231-b7bd226c23bb">
        <omgdi:waypoint x="250.0" y="90.0"></omgdi:waypoint>
        <omgdi:waypoint x="250.0" y="31.0"></omgdi:waypoint>
        <omgdi:waypoint x="319.99999999999284" y="31.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sequenceFlow-3fa7af74-df9a-4d3a-b0eb-10b20e7dc202" id="BPMNEdge_sequenceFlow-3fa7af74-df9a-4d3a-b0eb-10b20e7dc202">
        <omgdi:waypoint x="29.949998618355412" y="110.0"></omgdi:waypoint>
        <omgdi:waypoint x="80.0" y="110.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sequenceFlow-6232f578-3975-4d7e-81f2-43b242d33ebd" id="BPMNEdge_sequenceFlow-6232f578-3975-4d7e-81f2-43b242d33ebd">
        <omgdi:waypoint x="419.95000000000005" y="31.0"></omgdi:waypoint>
        <omgdi:waypoint x="470.0" y="31.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sequenceFlow-b390b442-2411-44a9-96eb-3c129d4c8408" id="BPMNEdge_sequenceFlow-b390b442-2411-44a9-96eb-3c129d4c8408">
        <omgdi:waypoint x="419.949999999997" y="189.66442953020135"></omgdi:waypoint>
        <omgdi:waypoint x="505.00030595247523" y="189.0936221647077"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sequenceFlow-d9127dc0-158f-4169-b61b-99226ffe8494" id="BPMNEdge_sequenceFlow-d9127dc0-158f-4169-b61b-99226ffe8494">
        <omgdi:waypoint x="179.9499999999898" y="110.0"></omgdi:waypoint>
        <omgdi:waypoint x="230.0" y="110.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sequenceFlow-29fd3375-9bcb-42f2-bb6f-63ae1f98813a" id="BPMNEdge_sequenceFlow-29fd3375-9bcb-42f2-bb6f-63ae1f98813a">
        <omgdi:waypoint x="569.9499999999988" y="31.0"></omgdi:waypoint>
        <omgdi:waypoint x="582.0" y="31.0"></omgdi:waypoint>
        <omgdi:waypoint x="582.0" y="31.0"></omgdi:waypoint>
        <omgdi:waypoint x="620.0025321198765" y="30.268220825690175"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="sequenceFlow-6f21d3e2-2e49-4b00-9aae-0b71d861a177" id="BPMNEdge_sequenceFlow-6f21d3e2-2e49-4b00-9aae-0b71d861a177">
        <omgdi:waypoint x="250.0" y="129.9375468164794"></omgdi:waypoint>
        <omgdi:waypoint x="250.0" y="190.0"></omgdi:waypoint>
        <omgdi:waypoint x="319.99999999997794" y="190.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

檔名為Holiday_Request.bpmn20.xml,flowable支援以BPMN和bpmn20.xml結尾的流程檔案。上面的xml看起來非常恐怖,不用擔心,後面我會介紹Flowable的專門的流程繪製軟體。
以上主要讓大家對Flowable有個簡單的瞭解,下一節介紹如何啟動Flowable,並且介紹Flowable的啟動包的相關內容。

版權

轉載請聯絡作者,謝謝。由書山登峰人創作。