最近公司要重新上線一套新的CRM系統,要重整老系統里的業務流模塊,團隊討論已微軟的workflow作為技術基礎。本人之前沒有涉及過相關的知識,目前項目還沒開始,前期來系統的的學習和了解下WF為后期開發打下些技術基礎。該篇為開題片,做一些簡單那的介紹和入門。
從WinFX到NET3.x再到NET4.0 ,WPF,WCF,WF 始終是放在一起的,WPF(silverlight)用於程序UI的展現,WCF用於程序通信,WF用於程序的邏輯控制,這種思想在微軟提出WinFX到現在的NET3.x再到NET4.0都是十分明確的. WPF(silverlight)與WCF現在已被大家熟知,並已廣泛使用.但關注WF的人卻還不是很多。
摘要
WorkFlow是最近比較流行的一門技術,其實WF起源於20世紀70年代中期的辦公化自動領域,自1993年8月,WFMC(工作流管理聯盟)成立,1994年制定了一系列的關於工作流的標准。進入21世紀工作流被越來越多的學者關注,該項技術越發走向成熟。當然我也是必須跟上時代的步伐,所以也加入工作流的大軍,希望能夠跟上前人的腳步。
WF的全稱是Windows Workflow Foundation ,
最早接觸WF是在2004年的時候,那時微軟推出了一個CTP版的開發包,WinFX.
在WinFX中提供了三個內容: Avalon, Indigo, WinOE當時這三方面的內容我都有涉及
與微軟很多的技術一樣,WinFX在Bata2后就沒有后續了.然而幸運的是我的這次長達一年的技術投入並沒有浪費,WinFX在2006年以Net 3.0 的方式正式發布了(其實就算WinFX沒有下文,我也沒有什么遺憾,在學習WinFX的日子里,我理解了很多全新的設計思想)
在NET 3.0 中,
Avalon成為了Windows Presentation Foundation 簡稱為WPF
Indigo成為了 Windows Communication Foundation 簡稱為WCF
WinOE 成為了 Windows Workflow Foundation 簡稱為WWF
后來, 微軟基於WPF推出了WFP/E, WFP/E就是silverlight的前身.
WPF,WCF,WWF從一開始就是綁在一起的,為什么WWF現在叫WF,少了一個"W",那是因為WWF與另一個縮寫重名了 World Wild Fund for Nature"世界自然基金會"
世界自然基金會
那么WF到底是什么,在這里我先不做具體介紹,但WF絕對不是傳統"工作流"層面的東西.
從WinFX到NET3.x再到NET4.0 ,WPF,WCF,WF 始終是放在一起的,
WPF(silverlight)用於程序UI的展現,WCF用於程序通信,WF用於程序的邏輯控制,這種思想在微軟提出WinFX到現在的NET3.x再到NET4.0都是十分明確的.
WPF(silverlight)與WCF現在已被大家熟知,並已廣泛使用.但關注WF的人卻還不是很多.
大綱
一、工作流簡介
二、工作流的參考模型
三、工作流管理系統
四、工作流管理系統架構
五、工作流目前的現狀
六、第一個工作流實例
工作流簡介
工作流的英文單詞是workflow,猶如大多數計算機領域的術語一樣,也是個合成詞,是英文單詞work和英文單詞flow的組合。Work翻譯為任務、工作等,flow則 翻譯為流程、流動等。Flow反映的是一種事物的動態屬性或變化過程,例如水的流動被稱為水流,空氣的流動被稱為氣流,還有物料流、資金流等,在抽象領域還有信息流、控制流等,因此,使用任務、活動以及活動之間的變化過程表示業務流程就被稱為工作流。
工作流尚沒有一個統一的、明確的定義,不同的組織和研究人員對工作流給出了各自的定義:
- 定義1:工作流是一類能夠完全或者部分自動執行的經營過程,它根據一系列過程規則,文檔、信息或任務能夠在不同的執行者之間進行傳遞與執行。
- 定義2:工作流是將一組任務組織起來完成某個經營過程。在工作流中定義了任務的觸發順序和觸發條件。每個任務可以由一個或多個軟件系統完成,也可以由一個或一組人完成,還可以是由一個或多個人與軟件系統協作完成。任務的觸發順序和觸發條件用來定義並實現任務的觸發、任務的同步和信息流(數據流)的傳遞。
- 定義3:工作流是一個用來實施經營過程實踐的機制。
- 定義4:工作流是經營過程的一種計算機化的表示模型,定義了完成整個過程所需要的各種參數。這些參數包括對過程中每一個步驟的定義、步驟間的執行順序、條件以及數據流的建立、每一步驟由誰負責以及每個活動所需要的應用程序。
以上這些工作流的定義,雖然在表述方式上有所不同,但是基本上說明了這樣一個問題,即工作流是經營過程的一個計算機實現。使用工作流作為經營過程的實現技術首先要求工作流系統能夠反映經營過程的如下幾個方面問題:
- 1. 經營過程是什么,即由哪些活動、任務組成,也就是結構上的定義;
- 2. 怎么做,即活動間的執行條件、規則以及所交互的信息,也就是控制流與信息流的定義;
- 3. 由誰來做,即人或者計算機應用程序,也就是組織角色的定義;
- 4. 做得怎樣,即通過工作流管理系統對執行過程進行監控。
工作流參考模型
WFMC在工作流的相關規范和標准方面做出的主要貢獻之一就是提出了一個工作流參考模型(Workflow Reference Model)。工作流參考模型來源於對普通工作流程序結構的分析,確定結構中的接口,這些接口可以使不同產品在不同的結構層次上協同工作。所有工作流系統都包含一系列的公共組件,組件間采用一套被定義好的方法進行協作;不同的產品在這些公共的組件中,會表現出不同的處理能力。為了實現不同工作流產品間的協同工作,需要在這些組件間制定一套標准的接口和數據交換格式。通過實現這些標准接口,可以達到產品間的協同工作。
我們先來看看下圖,看看WFMC的參考模型:
下面我們來挨個解釋下每個接口的具體作用吧:
1、接口1:
在建模或定義工具與運行時期工作流管理軟件間的接口。
2、接口2:
該接口,提供客戶端應用程序與工作流引擎之間的通信API 。
3、接口3:
該接口是工作流引擎與其他應用程序之間通信的API。
4、接口4:
通過工作流與工作流之間的通信API,是實現分布式工作流管理系統的核心API。
5、接口5:
該工具提供了對工作流引擎的當前狀態及運行在該引擎下的實例的監管和管理的接口。
我們再來看看上面相關工具的作用吧:
流程定義工具 :
就是提供一種方便的使用的,並且能夠被計算機識別的過程定義,目前我們使用較廣泛的是通過圖形化的工具來完成WF的過程定義。最后輸出一個XPDL文件。XPDL(XML Process Definition Language)是由Workflow Management Coalition所提出的一個標准化規格,使用XML文件讓不同的工作流程軟件能夠交換商業流程定義。
管理監控工具:
對工作流在整個組織內的流程情況進行監控,並提供一系列管理功能,實現安全性、過程控制、授權等操作。典型的功能范圍包括用戶管理、角色管理、監控管理、資源管理、過程監控管理。具體如:過程模型的實例化,啟動、掛起、恢復、終止過程實例;管理正在執行的過程實例等。
工作流執行服務:
由一個或多個工作流引擎組成,提供過程實例的執行,為活動進行導航,與外界資源交互完成各項活動,維護控制數據和相關數據等功能。
下圖是工作流服務的整個流程:
工作流管理系統
工作流管理系統——Workflow Management System(簡稱WFMS),在工作流定義基礎上,具有如下定義。
定義1:工作流管理系統是一個軟件系統,它完成工作流的定義和管理,並按照在計算機中預先定義好的工作流邏輯推進工作流實例的執行。
定義2:工作流管理系統是支持企業經營過程高效執行並監控其執行過程的計算機軟件系統。
根據工作流管理系統的定義,一個工作流管理系統應該提供如下的功能:
1. 定義、實現和管理工作流的運行;
2. 與工作流執行者,即人或應用系統,進行交互;
3. 推進工作流實例的執行;
4.監控工作流的運行狀態。
需要指出的是,工作流管理系統不是企業的業務系統。在很大程度上,工作流管理系統為企業的業務系統運行提供了一個軟件支撐環境,非常類似於在單個計算機上的操作系統。只不過工作流管理系統支撐的范圍比較大、環境比較復雜而以,所以也有人稱工作流管理系統是業務操作系統。
工作流管理系統架構
WFMC提出的工作流管理系統產品架構。這個架構給出了抽象的工作流管理系統的功能組成部件和接口,它能夠滿足工作流管理系統和產品應該具有的主要功能,可為實現工作流產品之間的互操作提供公共的基礎。從圖中可以看出,工作流管理系統主要由三部分組成:
上圖也是WFMC提出的工作流管理系統的架構設計圖。我們這里來解釋下幾個重要組件的作用吧:
軟件構件:完成工作流管理系統不同組成部分功能的實現,包括過程建模工具,工作流引擎,任務表管理器和用戶界面;
系統控制數據:工作流管理系統中的一個或多個軟件構件使用的數據,包括過程定義,組織/角色模型數據,工作流控制數據,工作流相關數據,任務表;
應用與應用數據:對於工作流管理系統來說,它們不是工作流管理系統的組成部分,而是屬於外部系統和數據,它們被工作流管理系統調用來完成整個或部分工作流管理的功能,如被工作流管理系統調用的外部應用以及這些應用操作的數據。
工作流的目前現狀
我們先來看看目前很多的自動化辦公的流程:
通過上面的圖片,可能看不太清楚,我也沒有從新畫一張清晰的,所以大家先湊合着看下,然后后面我再補上,上面可以看到不同角色的人,負責在工作流中的狀態及行為是不同的。上面中強調說明了工作職責的分配性問題。
工作流的概念起源於生產組織和辦公自動化領域,提出的目的是通過將工作分解成定義良好的任務、角色,按照一定的規則和過程來執行這些任務並對它們進行監控,達到提高工作效率、降低生產成本、提高企業生產經營管理水平和企業競爭力的目標。
眾多的企業應用系統按照功能從大的范圍來划分,無非兩種,一種是以公文流轉、日常辦公為主體的辦公自動化系統,另一種則是以企業經營過程的業務流程為主要輔助對象的具體業務系統。無論是辦公自動化系統還是具體業務系統,都是為企業提供軟件服務的,都是本着服務於企業需求為目標的,然而,現實世界中的各個企業的經營過程是無時無刻不在變化和調整中的,以便適應瞬息萬變的市場。這種變更帶給信息化系統軟件的最大的問題在於企業經營過程的調整往往使得原有的信息化系統軟件要推倒重新設計開發,使開發成本非常的高,尋找到一種能夠相對靈活的架構和管理方式以使得信息化系統能夠快速的適應企業經營過程的變更成為了為企業構造信息化系統的軟件設計人員的頭等課題。工作流及工作流管理系統之所以能為企業信息化系統所使用究其原因也在於此。雖然工作流技術已經開始在企業應用中擁有了一片天空,然而,同已經應用於企業的其他技術相比,工作流技術仍然處於其技術發展的初期。
下圖顯示了,工作流與RDBMS系統之間的發展曲線對比圖:
當然從上圖中,我們看到WF處於提出並初始發展階段,而數據庫管理系統已經非常的成熟並產品化。
My WorkFlow Trip
下面我們開始進入WF的開發之旅吧,好像廢話的篇幅比較多,希望大家不要不喜歡看呵呵,下面我們就來開始開發吧來完成我們的WF開發之旅的第一個程序demo。
1、新建一個狀態機工作流或者順序工作流控制台應用程序:
2、輸入項目名稱后:
3、設計WorkFlow中的相關狀態節點。主設計頁面如下:
4、新建State節點,在左側的工具欄中找到如下節點,然后拖拽到設計器中:
5、設計狀態流程中的起始狀態節點以及完成狀態節點,畢竟工作流的狀態必須有開始和結束的,對於狀態機來說是必須的。
6、當我們添加了State之后,我們現在來設置狀態的跳轉及路程。拖拽一個新的節點到設計器中:
7、設置該狀態節點的跳轉及其他行為等:
8、依照上圖中的順序,給第一個初始化開始狀態也添加同樣的事件,來完成跳轉。后台的代碼如下:
9、運行后的效果如下: