天天看點

Activiti7入門手冊

一、工作流介紹

工作流(Workflow),指“業務過程的部分或整體在計算機應用環境下的自動化”。是對工作流程及其各操作步驟之間業務規則的抽象、概括描述。在計算機中,工作流屬于計算機支援的協同工作(CSCW)的一部分。後者是普遍地研究一個群體如何在計算機的幫助下實作協同工作的。

工作流主要解決的主要問題是:為了實作某個業務目标,利用計算機在多個參與者之間按某種預定規則自動傳遞文檔、資訊或者任務。

工作流管理系統(Workflow Management System, WfMS)是一個軟體系統,它完成工作量的定義和管理,按照在系統中預先定義好的工作流邏輯進行工作流執行個體的執行。

工作流管理系統不是企業的業務系統,而是為企業的業務系統的運作提供了一個軟體的支撐環境。

工作流管理聯盟(WfMC,Workflow Management Coalition)給出的關于工作流管理系統的定義是:工作流管理系統是一個軟體系統,它完成工作流的定義和管理,并按照在計算機中預先定義好的工作流邏輯推進工作流執行個體的執行。

消費品行業,制造業,電信服務業,銀證險等金融服務業,物流服務業,物業服務業,物業管理,大中型進出口貿易公司,政府事業機構,研究院所及教育服務業等,特别是大的跨國企業和集團公司。

關鍵業務流程:訂單、報價處理、合同稽核、客戶電話處理、供應鍊管理等。

行政管理類:出差申請、加班申請、請假申請、用車申請、各種辦公用品申請、購買申請、日報周報等凡是原來手工流轉處理的行政表單。

人事管理類:員工教育訓練安排、績效考評、職位變動處理、員工檔案資訊管理等。

财務相關類:付款請求、應收款處理、日常報帳處、出差報帳、預算和計劃申請等。

客戶服務類:客戶資訊管理、客戶投訴、請求處理、售後财務管理等。

特殊服務類:ISO系統對應流程、品質管理對應流程、産品資料資訊管理、貿易公司報關處理、物流公司貨物跟蹤處理等各種通過表單逐漸手動流轉完成的任務均可應用工作流軟體自動規範實施。

在沒有專門的工作流引擎之前,我們之前為了實作流程控制,通常的做法就是采用狀态字段的值來跟蹤流程的變化情況。這樣不同角色的使用者,通過狀态字段的取值來決定記錄是否顯示。

針對有權限可以檢視的記錄,目前使用者根據自己的角色來決定審批是否是合格的操作。如果合格将狀态字段設定一個值,來代表合格;當然如果不合格也需要設定一個值來代表不合格的情況。

這是一種最為原始的方式。通過狀态字段雖然做到了流程控制,但是當我們的流程發生變更的時候,這種方式所編寫的代碼也要進行調整。

那麼有沒有專業的方式來實作工作流的管理呢?并且可以做到業務流程變化之後,我們的程式可以不用改變,如果可以實作這樣的效果,那麼我們的業務系統的适應能力就得到了極大提升。答案就是采用工作流引擎。

二、Activiti7介紹

Alfresco 軟體在 2010 年 5 月 17 日宣布 Activiti 業務流程管理(BPM)開源項目的正式啟動, 其首席架構師由業務流程管理 BPM 的專家 Tom Baeyens 擔任, Tom Baeyens 就是原來 jbpm 的架構師,而 jbpm 是一個非常有名的工作流引擎,當然 activiti 也是一個工作流引擎。

Activiti 是一個工作流引擎, activiti 可以将業務系統中複雜的業務流程抽取出來,使用專門的模組化語言(BPMN2.0)進行定義,業務系統按照預先定義的流程進行執行,實作了業務系統的業務流程由 activiti 進行管理,減少業務系統由于流程變更進行系統更新改造的工作量,進而提高系統的健壯性,同時也減少了系統開發維護成本。

官方網站

BPM(Business Process Management),即業務流程管理,是一種以規範化的構造端到端的卓越業務流程為中心,以持續的提高組織業務績效為目的的系統化方法,常見商業管理教育如EMBA、MBA等均将BPM包含在内。

企業流程管理主要是對企業内部改革,改變企業隻能管理機構重疊、中間層次多、流程不閉環等,做到機構不重疊、業務不複雜,達到縮短流程周期、節約運作資本、提高企業效益的作用。

比較下面的兩個人事加薪流程,那個效率更高?

流程一:

graph LR

F[人事加薪流程]

A[制定加新計劃] -->B[部門經理審批]

   B --> C[總經理審批]

   C -->D[财務經理審批]

流程二:

   B --> C{1萬元}

   C -->|1萬元以内|D[财務經理審批]  

   C -->|1萬元以上|E[總經理審批]

上面的兩個流程的差別在于第二個流程在執行時,如果本次加薪金額在一萬元内不再由總經理審批将比第一個流程縮短流程周期,進而提高效率。

BPM軟體就是根據企業中業務環境的變化,推進人和人之間、人和系統之間以及系統和系統之間的整合及調整的經營方法和解決方案的IT工具。通常以Internet方式實作資訊傳、資料同步、業務監控和企業業務流程的持續更新優化,進而實作跨應用、跨部門、誇合作夥伴和客戶的企業運作。

通過BPM軟體對企業内部及外部的業務流程的整個生命周期進行模組化、自動化、管理監控和優化,使企業成本降低,利潤得以大幅度提升。

BPM軟體在企業中應用領域廣泛,凡是有業務流程的地方都可以用BPM軟體進行管理,比如企業人事辦公管理、采購流程管理、公文審批流程管理、财務管理等。

BPMN(Business Process Model And Notation),業務流程模型和符号,是由BPMI(Business Process Management Initiative)開發的一套的業務流程模組化符号,使用BPMN提供的符号可以建立業務流程。

2004年5月釋出了BPMN1.0規範。BPMI于2005年9月并入OMG(The Object Management Group,對象管理組織)組織。OMG于2011年1月釋出BPMN2.0的最終版本。

BPMN是目前被各BPM廠商廣泛接受的BPM标準。Activit就是使用BPMN2.0進行流程模組化、流程執行管理,它包括很多的模組化符号。

一個BPMN的例子:

首先當事人發起一個請假單;

其次他所在部門的經理對請假單進行稽核;

然後人事經理進行複核并進行備案;

最後請假流程結束。

Activiti7入門手冊

線上BPMN網址https://bpmn.io

三、Activiti如何使用

Activiti是一個工作流引擎,業務系統使用Activiti來對系統的業務流程進行自動化管理,為了友善業務系統通路(操作)Activiti的接口或功能,通常将Activiti和業務系統的環境內建在一起。

使用Activiti流程模組化工具定義業務流程(.bpmn檔案)。

.bpmn檔案就是業務流程定義檔案,通過xml定義業務流程。

如果使用其他公司開發的工作引擎一般都提供了可視化的模組化工具(Process Designer)用于生成流程定義檔案,模組化工具操作直覺,一般都支援圖形化拖拽方式、多視窗的使用者界面、豐富的過程圖形元素、過程元素拷貝、粘貼、删除等功能。

向Activiti部署業務流程定義(.bpmn檔案)。

使用Activiti提供的API向Activiti中部署.bpmn檔案(一般情況下還需要一起部署業務流程的圖檔.png)。

啟動一個流程執行個體表示開始一次業務流程的運作,比如員工請假流程部署完成,如果張三要請假就可以啟動一個流程執行個體,如果李四要請假也需要啟動一個流程執行個體,兩個流程的執行互不影響,就好比定義一個Java類,執行個體化兩個Java對象一樣,部署的流程就好比Java類,啟動一個流程執行個體就好比new一個Java對象。

因為現在系統的業務流程已經交給Activiti管理,通過Activiti就可以查詢目前流程執行到哪裡了,目前使用者需要辦理什麼任務了,這些Activiti幫我們管理了,而不像傳統方式中需要我們在SQL語句中的WHERE條件中指定目前查詢的狀态值是多少。。

使用者查詢待辦任務後,就可以辦理某個任務,如果這任務辦理完成還需要其他使用者辦理,比如采購單建立後由部門經理稽核,這個過程也是由Activiti幫我們完成了,不需要我們在代碼中寫死指定下一個任務辦理人了。

當任務辦理完成沒有下一個任務/結點了,這個流程執行個體就完成了。四、Activiti環境

通過IDEA建立Maven的Java工程。

在Java工程中加入ProcessEngine所需要的jar包,包括:

activiti-engine-7.0.0.GA.jar

activiti依賴的jar包:mybatis、slf4j、log4j等

activiti依賴的spring的jar包

資料庫驅動

第三方資料庫連接配接池dbcp

單元測試junit

建立ProcessEngineConfiguration,通過ProcessEngineConfiguration建立ProcessEngine,在建立ProcessEngine的同時會自動建立資料庫。

示例:

也可以這樣

此時我們檢視資料庫,發現25張表

五、Activiti服務架構

Activiti7入門手冊

通過ProcessEngine建立Service,Service是工作流引擎提供用于進行工作流部署、指定、管理的服務接口。

建立方式如下:

Service接口

說明

RepositoryService

Activiti的資源管理接口

RuntimeService

Activiti的流程運作管理接口

TaskService

Activiti的任務管理接口

HistoryService

Activiti的曆史管理接口

ManagementService

Activiti的引擎管理接口

RepositoryService,是Activiti的資源管理接口,提供了管理和控制流程釋出包和流程定義的操作。使用工作流模組化工具設計的業務流程圖需要使用此Service将流程定義檔案的内容部署到計算機中。

除了流程部署定義以外還可以做如下的操作:

查詢引擎中的釋出包和流程定義。

暫停或激活釋出包以及對應全部和特定流程定義。暫停意味着它們不能再在執行任務操作了,激活是對應的反向操作。

擷取多種資源,像包含在釋出包中的檔案獲引擎自動生成的流程圖。

擷取流程定義的POJO,可以用解析流程,而不必通過XML。

RuntimeService是Activiti的流程運作管理接口,可以從這個接口中擷取很多關于流程執行相關的資訊。

TaskService是Activiti的任務管理接口,可以從這個接口中擷取任務的資訊。

HistoryService是Activiti的曆史管理類,可以查詢曆史資訊,執行流程時,引擎會包含很多資料(根據配置),比如流程執行個體啟動時間,任務的參與者,完成任務的時間,每個流程執行個體的執行路徑,等等。

ManagementService是Activiti的引擎管理接口,提供了對Activiti流程引擎的管理和維護功能,這些功能不在工作流驅動的應用程式中使用,主要用于Activiti系統的日常維護。六、流程定義

在IDEA中安裝對應的Activiti-Designer已停止更新了。

https://gitee.com/jjjxxx/activiti-designer

基于bpmn.js 的 activiti 模型設計器

切換到項目目錄下運作 npm install 安裝依賴

運作 npm run dev 啟動

可在頁面進行拖拽設計activiti的流程圖,支援導出bpmn流程圖和svg圖檔

運作截圖

Activiti7入門手冊

選中可執行檔案

Activiti7入門手冊

把請假申請任務配置設定給張三

Activiti7入門手冊

導出diagram.bpmn

将剛才生成的holiday.bpmn和holiday.png拷貝到項目的resources目錄下。

Activiti7入門手冊

測試

運作結果:

Activiti7入門手冊

流程定義部署在Activiti中之後就可以通過工作流管理業務流程了。

針對該流程,啟動一個流程表示發起一個新的請假申請單,這就相當于Java類和Java對象的關系,類定義好之後需要new建立一個對象使用,當然,也可以new多個對象。

對于請假申請流程,張三發起一個請假申請單需要啟動一個流程執行個體,李四發起一個請求申請單也需要啟動一個流程執行個體。

關系: 流程定義(BPMN檔案)-->流程部署(Activiti的三張表)。 流程執行個體-->啟動流程執行個體。 類比: 流程定義類似于Java中的類,流程執行個體類似于Java中的一個執行個體(對象),是以一個流程定義key對應多個不同的流程執行個體。
Activiti7入門手冊

流程啟動後,各個任務的負責人就可以查詢自己目前需要處理的任務,查詢出來的任務都是該使用者的待辦任務。

Activiti7入門手冊

任務負責人查詢待辦任務,選擇任務進行處理,完成任務。

Activiti7入門手冊

七、流程定義

流程定義是按照BPMN2.0标準去描述業務流程,通常使用Activiti-explorer(Activiti控制台)或Activiti-eclipse-designer(Activiti的eclipse設計器)插件對業務流程進行模組化,這兩種方式都遵循BPMN2.0标準。

如果使用Activiti-eclipse-designer插件完成業務流程模組化。可以生成兩個檔案:.bpmn和.png檔案。

.bpmn檔案其實就是XML檔案。

.bpmn檔案的根節點是definitions節點。這個元素中,可以定義多個流程定義(建議每個檔案隻包含一個流程定義,可以簡化開發過程中的維護難度)。注意,definitions元素最少也要包含xmlns和targetNamespace的聲明。targetNamespace可以是任何值,它用來對流程執行個體進行分類。

流程定義部分:定義了流程每個結點的描述和結點之間的流程流轉。

流程布局定義:定義流程每個結點在流程圖上的位置坐标等資訊。

将生成的流程定義部署到Activiti的資料庫中,這就是流程定義部署,通過調用Activiti的API将流程定義的bpmn和png兩個檔案一個一個添加部署到Activiti中,也可以将兩個檔案打成zip包進行部署。

分别将bpmn檔案和png圖檔檔案部署。

将.bpmn檔案和.png圖檔壓縮成一個zip包。

Activiti7入門手冊

流程定義部署後,會操作三張表:act_re_deployment、act_re_procdef和act_ge_bytearray。

act_re_deployment是流程定義部署表,記錄流程部署資訊。

act_re_procdef是流程定義表,記錄流程定義資訊。

act_ge_bytearray是資源表,将.bpmn檔案和.png圖檔存入到這個表。

說明: act_re_deployment和act_re_procdef是一對多的關系,一次部署在流程部署表生成一條記錄,但一次流程部署可以部署多個流程定義,每個流程定義在流程定義表生成一條記錄。每一個流程定義在act_ge_bytearray會存在兩個資源記錄.bpmn檔案和.png圖檔。 建議: 一次部署一個流程,這樣部署表和流程定義表示一對一的關系,友善讀取流程部署和流程定義資訊。

結果顯示為:

Activiti7入門手冊
Activiti7入門手冊

在資料庫中通路DEPLOYMENT_ID表可以發現22501的部署資料已經消失。

示例:通過查詢流程定義對象擷取流程定義資源,即bpmn和png

繼續閱讀