1. 程式人生 > 其它 >activiti 5.22介面文件_Activiti極簡入門教程

activiti 5.22介面文件_Activiti極簡入門教程

技術標籤:activiti 5.22介面文件

activiti極簡入門

大綱

1.activiti簡介

2.BPMN2.0流程定義規範

3.常用場景實戰(demo)

許可權管理

序列審批

並行審批

activiti簡介

什麼是工作流

工作流(Workflow),是對工作流程及其各操作步驟之間業務規則的抽象、概括描述。工作流建模,即將工作流程中的工作如何前後組織在一起的邏輯和規則,在計算機中以恰當的模型表達並對其實施計算。工作流要解決的主要問題是:為實現某個業務目標,利用計算機在多個參與者之間按某種預定規則自動傳遞文件、資訊或者任務。

https://zh.wikipedia.org/wiki/%E5%B7%A5%E4%BD%9C%E6%B5%81%E6%8A%80%E6%9C%AF

什麼是activiti

Activiti is a light-weight workflow and Business Process Management (BPM) Platform.

Its core is a super-fast and rock-solid BPMN 2 process engine for Java.

It's open-source and distributed under the Apache license.

https://github.com/Activiti/Activiti

什麼是BPMN

業務流程模型和標記法BPMN, Business Process Model and Notation

)[譯註1]是一套圖形化表示法,用於以業務流程模型詳細說明各種業務流程。

https://zh.wikipedia.org/wiki/%E4%B8%9A%E5%8A%A1%E6%B5%81%E7%A8%8B%E6%A8%A1%E5%9E%8B%E5%92%8C%E6%A0%87%E8%AE%B0%E6%B3%95

activiti特點

1.資料持久化

Activiti資料持久化使用MyBatis,通過最優的SQL語句執行Command。

2.引擎service介面

| service介面 | 功能 |

| RespositoryService | 用於管理流程倉庫,例如:部署、刪除、讀取流程資源 |

| IdentifyService | 使用者管理、組管理 |

| RuntimeService | 處理執行狀態流程例項、任務 |

| TaskService | 管理、查詢任務 |

| FormService | 讀取流程、任務相關的表單資料 |

| HistoryService | 查詢歷史資料 |

| ManagementService | 引擎管理,查詢引擎配置、資料庫等資訊 |

3.流程設計器

Activiti團隊專門設計了用來設計BPMN2.0規範的流程設計器——Eclipse Designer.

Idea中外掛 actiBPM.

4.原生支援spring

輕鬆地進行spring整合

5.分離執行時與歷史資料

提高執行時資料操作的效率

6.activiti資料表結構

| 表名 | 解釋 | 功能 |

| ACT_RE_* |repository |流程資訊 |

|ACT_RU_* | runtime | 執行例項資訊 |

| ACT_ID_* |identity |使用者和組資訊 |

|ACT_HI_* | history | 歷史資訊 |

| ACT_GE_* | general | 系統資訊 |

activiti BPMN2.0規範流程定義

啟動事件與結束事件

Activiti可以呼叫API觸發啟動事件。

1.空啟動事件

定義

<startEvent id="_2" name="StartEvent"/>

啟動

runtimeService.startProcessInstance()

儲存啟動事件使用者資訊,方便後續直接呼叫

<startEvent activiti:initiator="applyUserId" id="startevent1" name="Start">
${applyUserId}

2.定時啟動事件

設定事件啟動

| 屬性名 | 功能 |

| timeDate | 一次性啟動時間 |

| timeDuration | 某個流程後間隔多長時間啟動 |

| timeCycle | 週期性任務 |

<startEvent id="_2" name="StartEvent">
    <timerEventDefinition id="_2_ED_1">
        <timeDate><![CDATA[2012-02-01T00:00:00]]></timeDate>
    </timerEventDefinition>
</startEvent>

3.異常啟動事件

丟擲異常時啟動,常用於啟動子流程

4.空結束事件

結束事件,無返回資訊

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

5.異常結束事件

結束事件,丟擲異常資訊

6.終止結束事件

提前結束流程時使用

7.取消結束事件

取消事務子流程時使用

順序流

1.標準順序流

連線流程定義中的原件

<sequenceFlow id="_13" sourceRef="_7" targetRef="_12"/>

2.條件順序流

滿足指定條件才會執行

<sequenceFlow id="_15" name="審批人1拒絕" sourceRef="_12" targetRef="_3">
    <conditionExpression xsi:type="tFormalExpression"><![CDATA[${spr1_status == '拒絕'}]]></conditionExpression>
</sequenceFlow>

任務

1.使用者任務

使用者任務必須有人蔘與

| 屬性名 | 功能 |

| assignee | 指定任務處理人 |

| cadidateUsers | 指定候選人 |

| cadidateGroups | 指定候選組 |

| dueDate | 設定任務到期時間 |

<userTask activiti:candidateGroups="deptLeader" activiti:exclusive="true" id="_3" name="領導審批Task"/>

2.指令碼任務、WebService任務、JavaService任務、業務規則任務、郵件任務、Mule任務、Caml任務、手動任務、shell任務

閘道器

閘道器用於控制流程走向

1.排他閘道器

排他閘道器與條件順序流配合使用,執行條件滿足的一條路線

(1)如果多個閘道器結果為true,執行第一個為true的閘道器路線

(2)如果所有閘道器結果均為false,拋異常

<userTask activiti:candidateUsers="小明" activiti:exclusive="true" id="_cxsp" name="申請人重新申請"/>
<sequenceFlow id="_9" name="班長拒絕" sourceRef="_5" targetRef="_cxsp">
    <conditionExpression xsi:type="tFormalExpression"><![CDATA[${bz_status == '拒絕'}]]></conditionExpression>
</sequenceFlow>
<userTask activiti:candidateUsers="班主任" activiti:exclusive="true" id="_bzrsp" name="班主任審批"/>
<sequenceFlow id="_11" name="班長同意" sourceRef="_5" targetRef="_bzrsp">
    <conditionExpression xsi:type="tFormalExpression"><![CDATA[${bz_status == '同意'}]]></conditionExpression>
</sequenceFlow>

2.並行閘道器

並行閘道器將單條線路拆分成多條線路,最終再合併,主要操作有

拆分(fork):並行執行所有順序流,並未每條順序流建立一條執行線路。

合併(join):所有從並行閘道器拆分並執行完成的線路均在此等候,直到所有執行完了才繼續向下執行。

<parallelGateway id="_18" name="fork"/>
<parallelGateway id="_19" name="join"/>
<sequenceFlow id="_20" sourceRef="_4" targetRef="_18"/>
<sequenceFlow id="_21" sourceRef="_18" targetRef="_7"/>
<sequenceFlow id="_22" sourceRef="_18" targetRef="_8"/>
<sequenceFlow id="_23" sourceRef="_7" targetRef="_19"/>
<sequenceFlow id="_24" sourceRef="_8" targetRef="_19"/>
<sequenceFlow id="_25" sourceRef="_19" targetRef="_15"/>

3.包容閘道器

包容閘道器是排他閘道器和並行閘道器的組合,可以為並行執行的線路設定執行前提條件

常用場景實戰

全部基於以上介紹的小知識點實現,基於springboot,程式碼地址

lyyang233/activiti-study​github.com d637e7c91578ca085fdf644aa4f19726.png

許可權管理

使用者和組的使用,配合使用者任務設定候選人的功能實現許可權控制

(1)新建使用者和組

(2)將使用者加入指定組

(3)設定使用者任務候選使用者或候選組

(4)候選人中領取任務

(5)候選人完成任務

詳情見demo

序列審批

使用排他閘道器,實行序列審批,跳級審批,打回功能

詳情見demo

並行審批

使用排他閘道器、並行閘道器,實現並行審批、邏輯打回功能

詳情見demo

常見問題

1.類衝突

使用springboot整合activiti的時候,需要在啟動項中排除org.activiti.spring.boot 中的SecurityAutoConfiguration類

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)

2.resource預設載入流程定義檔案不能為空

啟動web服務的時候,resource下必須有processes資料夾、且資料夾內必須有.bpmn流程定義檔案

3.idea流程定義外掛顯示問題

actiBPM定義候選人之後,移動到其他元件再點回去會顯示為空,需要用文字形式檢視原始檔

4.流程定義允許重名

流程定義主鍵為流程id,使用者定義流程互動的標識一般為流程名,重複定義流程名之後,使用流程名啟動流程例項可能啟動錯誤的流程

5.事務一致性

使用者認領task後,服務停止,task仍保留