一種基于自定義表單、Activiti的工作流解決方法
【技術領域】
[0001]本發(fā)明涉及工作流技術,尤其涉及一種基于自定義表單、Activiti的工作流解決方法,Activiti其核心是BPMN 2.0的流程引擎。BPMN是目前被各BPM廠商廣泛接受的BPM標準,全稱為Business Process Model and Notat1n,由OMG組織進行維護,2011年1月份發(fā)布了其2.0的正式版。BPMN 2.0對比于第一個版本,其最重要的變化在于其定義了流程的元模型和執(zhí)行語義,即它自己解決了存儲、交換和執(zhí)行的問題。這代表著BPMN 2.0流程定義模型不僅僅可以在任何兼容BPMN 2.0的引擎中執(zhí)行,而且也可以在圖形編輯器間交換。作為一個標準,BPMN 2.0統一了工作流社區(qū)。
【背景技術】
[0002]表單在信息管理系統中的重要作用,基本上采用表單+流程就可以實現一個業(yè)務流程。然而數量眾多的表單和易變動性讓開發(fā)人員感到疲憊。為了讓開發(fā)人員把注意力集中在業(yè)務流程上來,也可以讓系統操作人員參與到表單的管理,就出現了動態(tài)表單技術。
[0003]在對信息管理系統的探索中發(fā)現,按業(yè)務的量和成熟度,可以將業(yè)務系統是分為大業(yè)務系統和小業(yè)務系統。大業(yè)務具有業(yè)務量大且成熟穩(wěn)定的特點。而小業(yè)務大部分也是新業(yè)務,具有業(yè)務量小和動態(tài)多變的特點。這些特點主要體現在業(yè)務流程和表單上的不同。往往對新業(yè)務沒有一個很好的系統支持,因為新業(yè)務的特性是市場前景不明,業(yè)務量小,表單和業(yè)務流程都隨著業(yè)務的發(fā)展不斷在變,越具有快速成長性的新業(yè)務可能變化更多。為一個新的業(yè)務開發(fā)一個獨立的系統支持,從業(yè)務運營者角度看成本大,從系統開發(fā)者角度看難度更大。通常只有當新業(yè)務逐步發(fā)展,逐步穩(wěn)定下來,業(yè)務量上去了,變成了一個大業(yè)務,才可以考慮建立獨立系統支持或者移植到原有的大業(yè)務系統中去。所以對許多新業(yè)務的系統支持上比較薄弱。
[0004]從現狀來看,由于新業(yè)務沒有系統支持,所以大部分采用各種excel表單的方式進行管理,一項業(yè)務的辦理都是通過excel表單的流轉。當然比紙制的要先進。不過,無序和低效表現得比較明顯。
從技術上講,新業(yè)務系統的開發(fā)需要解決可定制表單和流程的技術難題。許多業(yè)務都是由表單驅動,比如申請開通業(yè)務填寫申請單,業(yè)務實施填寫施工單。不過,隨著業(yè)務的發(fā)展,這些表單包括字段和顯示格式都在變。很顯然,固定表單的開發(fā)無法滿足這類用戶業(yè)務需求。而作為軟件開發(fā)者在做需求分析的時候,希望通過要求用戶簽字確認的方式來限制用戶需求的變化,這樣的做法不合情理,技術沒有真正為生產服務。那么如何在新業(yè)務的發(fā)展階段支持業(yè)務中多變的表單呢,因此就提出了動態(tài)表單。
[0005]Activiti 5對表單的支持目前還是比較弱的,表現在對表單的開發(fā)還需要寫Freemark模板,并且它的模板還需要跟class文件一起打包發(fā)布。這使得流程的表單設計必須由開發(fā)人員來開發(fā)處理。因而,開發(fā)一套易用性強的流程表單功能就顯得很有必要。
【發(fā)明內容】
[0006]為了解決該問題,本發(fā)明提出了一種基于自定義表單、Activiti的工作流解決方法,目的是提供一種統一的工作流引擎。
[0007]用戶一般都希望能有如Microsoft的Office套件中的InfoPath那樣,可以自己進行設計,并且能與工作流程綁在一起進行流轉處理。
[0008]表單中每個字段有固定的數據類型,并由不同的數據控件展示,如日期、數字、單選或多選、下拉、多行文本甚至富文本編輯器。在實現更強的功能上,允許控件能實現腳本交互。
[0009]Activiti作為一個遵從Apache許可的工作流和業(yè)務流程管理開源平臺,其核心是基于Java的超快速、超穩(wěn)定的BPMN2.0流程引擎,強調流程服務的可嵌入性和可擴展性,同時更加強調面向業(yè)務人員。通過使用這些服務,開發(fā)人員能夠構建出功能豐富、輕便且高效的BPM應用程序。
[0010]Activiti引擎的系統服務架構分為以下幾個部分:
RepositoryService:Activiti中每一個不同版本的業(yè)務流程的定義都需要使用一些定義文件,部署文件和支持數據,這些文件都存儲在Repository中。Repository Service提供了對repository的存取服務。
[0011]RuntimeService:在Activiti中,每當一個流程定義被啟動一次之后,都會生成一個相應的流程對象實例。Runtime Service提供了啟動流程、查詢流程實例、設置獲取流程實例變量等功能。此外它還提供了對流程部署,流程定義和流程實例的存取服務。
[0012]TaskService:在Activiti中業(yè)務流程定義中的每一個執(zhí)行節(jié)點被稱為一個Task,對流程中的數據存取,狀態(tài)變更等操作均需要在Task中完成。Task Service提供了對用戶Task和Form相關的操作。它提供了運行時任務查詢、領取、完成、刪除以及變量設置等功能。
[0013]IdentityService:Activiti中內置了用戶及組管理的功能,必須使用這些用戶和組的信息才能獲取到相應的Task。Identity Service提供了對Activiti系統中的用戶和組的管理功能。
[0014]ManagementService -Management Service 提供了對 Activiti 流程引擎的管理和維護功能,這些功能不在工作流驅動的應用程序中使用,主要用于Activiti系統的日常維護。
[0015]HistoryService: History Service用于獲取正在運行或已經完成的流程實例的信息,與Runtime Service中獲取的流程信息不同,歷史信息包含已經持久化存儲的永久信息,并已經被針對查詢優(yōu)化。
[0016]FormService: Activiti中的流程和狀態(tài)Task均可以關聯業(yè)務相關的數據。通過使用Form Service可以存取啟動和完成任務所需的表單數據并且根據需要來渲染表單。
[0017]在表單與流程的整合中,一般不建議把表單的所有數據都存儲在流程中,僅需要把參與流程跳轉的數據才存到流程變量中去。如請假出差的流程,在表單與流程的整合中,一般不建議把表單的所有數據都存儲在流程中,僅需要把參與流程跳轉的數據才存到流程變量中去;
流程實例與業(yè)務表單關聯:基于以上設計的原則,流程中則不存儲業(yè)務表單的數據,Activiti 5在流程實例表及任務實例表相關運行表中增加了一個字段(BusinessKey),用來關聯業(yè)務表單的數據,一般把這個字段稱為業(yè)務主鍵;對自定義的表單提供了生成物理表的方式,那么表單的存儲則通過在線生成的頁面獲取物理表必需要的數據,然后保存至物理表中。這需要在設計表單時,生成一套表單數據規(guī)范,在審批時,能夠進行頁面表單的數據驗證及存儲。另外,還需要對在執(zhí)行過程中的表單進行權限控制,如同一節(jié)點上審批相同的表單,不同角色的人員對表單的字段的讀寫權限是不一樣的。
[0018]在線表單設計功能要求:允許用戶預先設置好一些帶有漂亮格式的表單,如包括表頭、表尾及樣式,方便用戶調整表單;允許用戶在線進行在線布局,目前一般來說都是基于表格的布局方式;
設計表單字段控件、數據類型、數據驗證:設計表單字段的輸入控件類型及數據類型,用于保證用戶輸入的數據的正確性;
設置表單字段權限:用于控制表單的字段的讀寫權限,結合工作流的審批,可以更有效顯示數據;
支持表單動態(tài)腳本:允許對表單控件加上交互腳本,以實現如一些級聯更新等的數據交互等;
表單預覽:可以在線實時顯示表單的顯示效果;
預設流程變量:把參與流程運算的表單字段標識為流程變量;
流程定義與業(yè)務表單綁定:在線表單可以用全局表單,則整個流程用同一個表單,如果每個流程節(jié)點的表單不一樣,則可以通過設計表單,所以在啟動流程時及在任務進行跳轉時,均可以獲取流程節(jié)點的表單設置,從而在啟動流程或執(zhí)行任務處理時能進行正確的表單展示。
[0019]Activiti其核心是BPMN 2.0的流程引擎,其定義了流程的元模型和執(zhí)行語義,即它自己解決了存儲、交換和執(zhí)行的問題。不僅僅可以在任何兼容BPMN 2.0的引擎中執(zhí)行,而且也可以在圖形編輯器間交換。
[0020]Activiti的使用方便,只有一個jar包,使用時僅需要將其放在類路徑中,Activiti也可以作為獨立服務器的方式使用;同時Activiti提供了很多BPM高級工具,其中還包括開發(fā)了協作工具,使得開發(fā)人員、業(yè)務人員和運維人員能夠更好的協同工作。
[0021]采用表單+流程就可以快速實現一個業(yè)務功能,開發(fā)人員可以把注意力集中在業(yè)務邏輯處理,流程交給Activiti管理,業(yè)務表單可以通過動態(tài)表單技術由業(yè)務人員設計完成。
【具體實施方式】
[0022]Activiti開發(fā)環(huán)境的配置
Activiti提供了基于Eclipse插件的開發(fā)工具和流程設計工具(需要Eclipse的版本為 Hel1s 或 Indigo,如果尚未安裝 Eclipse,請從 http://www.eclipse, org/downloads/下載安裝最新版本的Eclipse集成開發(fā)環(huán)境。)。這些工具可以使用Eclipse的” Install new software”功能在線安裝,安裝方法如下:
在Eclipse的Help菜單中選擇Install New Software選項,在彈出菜單中,點擊Add Repository 按鈕添加新的遠程 Software Repository,在 Locat1n 中添加 http://activit1.0rg/designer/update/ 作為 Repository 的遠程地址。當新的 Repository 添加完成后,Eclipse會自動獲取Repository中的軟件列表。Activiti BPMN2.0 Designer的最新版本為5.8.1,選擇所有選項然后等待安裝完成即可。
[0023]當Eclipse插件安裝完成后,選擇File ->New project選項新建一個項目,此時如果可以看到Activiti項目選項,證明Activiti的Eclipse開發(fā)環(huán)境的配置已經順利完成。
[0024]Activiti 功能示例
使用Activiti內置Eclipse項目
Activiti可以和多種Java企業(yè)級開發(fā)技術(Spring, JPA),動態(tài)開發(fā)語言(groovy)以及Web Service開發(fā)工具(CXF)結合使用。在Actitivi的安裝目錄中的workspace文件夾中包含了 Activiti自身特性和與這些開發(fā)技術結合使用的Eclipse項目不例(activit1-engine-examples、activit1-spring-examples、activit1-groovy-examples、activit1-jpa-examples、activit1-cxf-examples 等 Eclipse 項目)。要使用這些不例項目,只需在 Eclipse 中使用,,Import_>Existing Projects into Workspace” 從文件系統中導入這些項目即可。
[0025]activit1-engine-examples項目中包含了使用Activiti大部分主要功能的示例代碼,這些代碼使用的流程定義信息都已經部署在項目使用的H2內存數據庫中。流程的執(zhí)行中產生的信息也都會使用持久化API存儲在該H2內存數據庫中。
[0026]使用Activiti Eclipse流程設計器設計Activiti流程定義
Activiti使用標準的BPMN2.0流程定義文件來描述工作流的定義。BPMN2.0流程定義文件是一個符合行業(yè)標準的XML格式的文件。在這個文件中包含了流程的流轉序列,步驟節(jié)點以及各個節(jié)點上相關的用戶,變量信息等流程元素。在BPMN2.0 XML流程定義文件中還包含了各個流程元素在定義中的顯示位置等信息,從而可以以圖形化的方式來顯示或編輯流程定義文件。目前已經有多種BPMN2.0流程定義文件的可視化編輯器。Activiti中提供了 2種定義文件的可視化編輯器:Web Applicat1n形式的Activiti Modeler和Eclipse插件形式的流程編輯器。Activiti Modeler必須部署在Web應用服務器中才能通過Web瀏覽器來使用而Eclipse插件形式的編輯器可以在Eclipse中直接使用,更好的結合了 Act