[轉(zhuǎn)]工作流學(xué)習(xí)(3)
轉(zhuǎn)自:http://www.guodanpi.com/zblog/post/23.html
繼續(xù)工作流的學(xué)習(xí)和開發(fā)工作。
繼續(xù)研究Powerstone,繼續(xù)思考,繼續(xù)做一些自己的數(shù)據(jù)庫設(shè)計。越深入一點Powerstone的設(shè)計,越覺得他確實設(shè)計得非常不錯,考慮到了很多東西,也實現(xiàn)得不錯,今天再度請教了作者daquan關(guān)于節(jié)點中為什么要bind數(shù)據(jù)的問題,答案讓我一下茅塞頓開,非常感謝!但是個人還是覺得是否有必要,所以當(dāng)前的設(shè)計暫時沒有加入這方面的考慮。
初步的設(shè)計可以看這里(pdm文檔沒法下載,呵呵,jpg查看)。圖片如下所示:
大致的定義流程如下:
1. 首先定義工作流(只是名稱、是否發(fā)布等簡單屬性,主要是獲取一個id)
2. 設(shè)置該工作流存在的狀態(tài)
1) (設(shè)定參與者,這里打算直接通過Group:32;Role:98等這種方式處理,詳細的處理將交給用戶角色模塊,可返回參與者的user集合)
2) 設(shè)定前驅(qū)進入規(guī)則:主要是通過定義的“工作流規(guī)則”,將“聚合、順序、and、xor、or、投票”等一系列的規(guī)則放入工作流規(guī)則中統(tǒng)一處理(處理工作流規(guī)則將是一項艱巨的工作,所以感覺表[工作流規(guī)則]的設(shè)計還需要考慮。
3) 是結(jié)束狀態(tài):個人覺得結(jié)束狀態(tài)是比較特殊的狀態(tài),應(yīng)該不需要每個工作流都需要定義,可以公用,但是暫時還是每個工作流都定義這樣的狀態(tài)好處理(還沒想到更好的辦法)
4) 是否開始狀態(tài):開始狀態(tài)同樣很特殊,實際上在將事件放入到工作流時就已經(jīng)開始,這時候主要需要的可能就是能夠使該事件進入工作流的參與者的定義。
3. 設(shè)定個狀態(tài)間的路由:也就是各狀態(tài)間的連線
1) 指定[從狀態(tài)]和[到狀態(tài)],
2) 指定[從狀態(tài)]到[到狀態(tài)]的使用規(guī)則:比如說明在一個從狀態(tài)存在多個后續(xù)狀態(tài)時,是否選擇該路由的規(guī)則。
3) 定義業(yè)務(wù)是否可主動選擇參與者的具體用戶:由于參與者存在多個用戶的情況,所以存在兩種需要考慮的狀況a.參與者中某個具體的[人]主動請求任務(wù),b.在定義業(yè)務(wù)可主動選擇參與者的情況下,可以讓業(yè)務(wù)指定參與者中的具體的[人]。
感覺工作流引擎純粹的定義好像就是這么簡單(當(dāng)然現(xiàn)在我仍然在是否需要在狀態(tài)中綁定數(shù)據(jù)上猶豫,雖然在狀態(tài)中綁定數(shù)據(jù)是wfmc已經(jīng)說明了的),但是我現(xiàn)在的考慮在下面將會提到。
對應(yīng)與純粹的工作流定義,需要“事件”的參與,這里面定義為“工作流實體”
4. 設(shè)定工作流實體:指定實體id,實體類別,選取的工作流,當(dāng)前在工作流中的狀態(tài)信息
5. [實體在工作流中狀態(tài)]將由工作流引擎驅(qū)動并生成數(shù)據(jù)
6. 用戶驅(qū)動生成[用戶參與記錄],或由業(yè)務(wù)驅(qū)動主動生成[用戶參與記錄]
到現(xiàn)在為止,關(guān)于數(shù)據(jù)和工作流的關(guān)聯(lián)關(guān)系已經(jīng)建立,業(yè)務(wù)端可以完全可以通過上面的工作流引擎提供的接口來對“實體”進行操作,但是我覺得powerstone中采用url來驅(qū)動的設(shè)計非常好,引用之,呵呵
7. 定義外部業(yè)務(wù)web應(yīng)用
8. 定義web具體的url
9. 定義url與工作流每一步狀態(tài)的關(guān)系,從而可以從當(dāng)前狀態(tài)獲取需要交互的url信息。
大致上的數(shù)據(jù)庫如此,需要繼續(xù)研究和討論,做個記號先!
posted on 2007-08-25 20:50 hijackwust 閱讀(192) 評論(0) 編輯 收藏