HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
下面將對目前比較主流的三款工作流進(jìn)行介紹和比較,然后通過三款流程引擎分別設(shè)計一個較典型的流程來給大家分別演示這三款創(chuàng)建流程的過程.這三款工作流程引擎分別是 Windows Workflow Foundation,NetBPM, CCFlow.
NetBPM 與 CCFlow 是兩款國內(nèi)知名的開源軟件,尤其是ccflow在國內(nèi)的發(fā)展勢頭強勁。
這個典型的流程假設(shè):公司有兩級領(lǐng)導(dǎo),一級為主管Chief,一級為老板Boss
場景描述:
在某公司中,部門員工休假需要主管Chief的批準(zhǔn)。
如果休假天數(shù)大于10天,則 在部門主管同意后,還必須老板Boss批準(zhǔn)。
如果是部門主管請假則直接提交老板批準(zhǔn)。
在休假被批準(zhǔn)之前,申請人可以撤銷休假申請。
申請批準(zhǔn)后,對休假天數(shù)進(jìn)行修改(也可以是其他業(yè)務(wù)數(shù)據(jù)處理)。 每次休假申請結(jié)束之 后,不管通過未通過或是否取消,都必須記錄下來。
流程結(jié)束時,系統(tǒng)要把請假的結(jié)果信息Email給申請人。
對于大于10天的申請,如果部門主管已批準(zhǔn)同意而上級主管還未批準(zhǔn),這時申請人撤銷申請后,系統(tǒng)應(yīng)發(fā)Email通知部門主管申請已撤銷。
我們這里只是一個模擬,當(dāng)然現(xiàn)實生活中情況比這個更加復(fù)雜一些;
Windows Workflow Foundation
微軟的工作流產(chǎn)品,提供一套工作流引擎和VS解決方案自帶的流程設(shè)計器,但是該流程設(shè)計器面對的是程序員而非業(yè)務(wù)人員,所以界面比較專業(yè),流程運行只能創(chuàng)建控制臺應(yīng)用程序,沒有流程運行界面,沒有表單庫,如需要表單和界面需要二次開發(fā)。
使用WWF創(chuàng)建流程:
1. 啟動VS2010,創(chuàng)建一個順序工作流控制臺的程序。
2. 輸入項目名稱,點擊確定,將自動進(jìn)入流程設(shè)計界面。
3. 自動生成的Workflow1.cs是一個工作流組件。
4. 工具箱中拖放一個IfElse活動組件到設(shè)計界面上。
5. 此時就需要較多的編碼工作和表單界面設(shè)計工作,如在idelseBranchActivitiy1左側(cè)分支,用以判斷請假人是否新申請請假還是取消請假,激活Conditiong屬性,并且添加內(nèi)部事件EvaluateQingJiaNoValidCode,并激活,在內(nèi)部輸入邏輯代碼根據(jù)數(shù)據(jù)庫記錄判斷請假是否通過,未通過則取消請假。也可以走另一分支EvaluateQingJiaCode繼續(xù)申請新的請假;
6. 拖放parallelActivity1組件在IfElse節(jié)點后,用以判斷請假人是否為Chief,設(shè)置sequenceActivity1中的codeActivity3屬性的ExecuteCode處理程序為EvaluateChiefNoValidCode,并激活,內(nèi)部代碼用以判斷不是Chief的情況,另一分支sequenceActivity1中則判斷是Chief的情況;
7.如果不是Chief請假,則需要在EvaluateChiefNoValidCode中進(jìn)行邏輯判斷和表單的設(shè)計,填寫請假申請單, 并拖放IfElse組件,實現(xiàn)其中的codeActivity6代碼用以判斷大于10天的情況。
8.F5即可運行控制臺程序,其中的通過未通過或是否取消的數(shù)據(jù)需要記錄,需要通過代碼和設(shè)計數(shù)據(jù)庫來實現(xiàn),發(fā)送Email也需要代碼實現(xiàn),WWF沒有提供該功能。
WWF下設(shè)計的流程圖如下:
NetBPM
從JBpm1移植到.NET平臺下的開源工作流項目,二次開發(fā)有一定的難度,因為其使用的Castle框架有很多子項目,技術(shù)點較多,需要一一熟悉后才能進(jìn)行流程的二次開發(fā)。
使用NetBPM創(chuàng)建工作流過程:
1. 使用NetBPM的難點之一是要理解生成配置文件,提交請假單配置如下:
請假DEMO 該流程模擬公司的請假流程, ae 提交請假單 requester previousActor 您提交了請假申請 you requested a holiday from ${start date} to ${end date} with comment ${comment} 記錄請假日志? :) 2. 其它配置文件代碼太長就不一一貼出來;
3. 定義委托類:委托類包含在lib文件夾下的程序集中。
因為委托類數(shù)目眾多,這里僅貼出幾個典型的委托類:
1. NetBpm.Example.LeaveOfAbsence.AutoSetAttributionsAction:該委托類設(shè)計為一個通用委托類,這里用來設(shè)置表識屬性,如流程經(jīng)過用戶取消請假路徑,則把RunTrace屬性設(shè)置為requestercancel,供WhichWayDicision作判斷用。
2. NetBpm.Example.LeaveOfAbsence.AnyOneJoin: 該委托主要用來設(shè)置激活父flow機制,這里是只要任何一條路徑到達(dá)了join,則激活父flow,流程往下流。
3. NetBpm.Example.LeaveOfAbsence.WhichWayDecision:該委托根據(jù)流程實際流過路徑,根據(jù)標(biāo)識屬性RunTrace等進(jìn)行走哪條邊的抉擇。
4. 本文僅僅是一個示例,給大家提供一個運用nPdl定義NetBPM流程的參考,如果要把該流程投入現(xiàn)實中使用顯然還需要做很多優(yōu)化。其中的代碼量還是很大的。
NetBPM下設(shè)計的流程圖如下:
CC Flow
ccflow是一款國產(chǎn)開源工作流。支持SQLServer、Oracle、Access、MySQL數(shù)據(jù)庫,支持群集計算、支持多國語言。流程設(shè)計、表單設(shè)計都是可視化的,所見即所得。 ccflow提供了強大的數(shù)據(jù)分析功能:流程運行的各種報表、圖形、挖掘、賺取,可以對實(時)效性、成本分析(人力、時間、財物),進(jìn)行全方位的分析、監(jiān)控。 Ccflow更可與手機+手機短信+短信貓+電子郵件無縫連接,讓您的工作第一時間溝通,第一時間處理。
使用CC Flow創(chuàng)建工作流過程:
1. 在web容器中安裝好程序后,打開流程設(shè)計器,建立請假流程,即可生成填寫請假單和結(jié)束節(jié)點;
2. 拖動Chief審批節(jié)點、 Boss審批節(jié)點,添加連線以及標(biāo)簽注明;
3. 設(shè)置表單:郵件選擇傻瓜型表單或者自由類型表單,設(shè)置表單后,設(shè)置每個節(jié)點的工作崗位;
4. 設(shè)置流程跳轉(zhuǎn)方向條件,如判斷情人是誰,判斷請假天數(shù)等,選擇的數(shù)據(jù)來源自表單數(shù)據(jù)。
5. 點擊運行即可運行流程;可打開windows service,即可使用自帶的消息提醒以及郵件發(fā)送功能;
CC Flow設(shè)計的流程圖如下:
綜上所述,三款的工作流區(qū)別如下表:
本文相關(guān)軟件鏈接:
CCFlow : http://www.oschina.net/p/ccflow 使用中的問題可與 @ccflow 聯(lián)系
NetBPM : http://www.oschina.net/p/netbpm
jBPM : http://www.oschina.net/p/jbpm
WWF : http://msdn.microsoft.com/zh-cn/library/aa480214.aspx