實在睡不著,就繼續說說關於工作流程的一些事。
早上發了一篇關於工作流程系統中業務資料和流程資料的理解,兩者是相互關聯著,缺了誰都不可能成為一個完整的商務程序。我想說的是,兩者之間是需要相互瞭解,也就是說流程資料需要業務資料來進行一些操作,而業務資料又需要流程資料來提供一些資訊。
一個工作流程系統是否能夠靈活方便的開發業務功能,業務資料處理能力的靈力性很是關鍵,或許對於一個簡單的審批流,比如公文、申請等不會涉及太多的業務處理,頂多就是申請人填寫表單,通過預定的流程路由在各個節點中流轉,而節點執行個體就是對應的任務,逐步的進行審批,最後產生一個結果。這是很簡單的流程應用,複雜一點的話,比如在某些任務節點中涉及到業務資料的計算、根據條件進行業務資料的批處理,流程正常結束後進行資料入庫、資訊歸檔,中斷後進行訊息通知等,各種各樣的業務處理都會掛接在流程的流轉過程中,而流程僅僅是一個設定好的路程,就像公路,具體的加油、或者別的動作都需要人為來處理。對於領域的核心業務,我們要將它們整理成代碼,因為流程不可能為我們做任務除了流轉外的其他事,這就需要流程能夠在各種情況下都能進行資料處理,也就是業務操作介面。
在這裡重點想要說的就是這個業務操作介面,在流程中哪些關鍵點應該能夠支援。在這裡其實可以聯想一下微軟的WF,它在活動的方法中就有涉及到前置函數以及後置函數,這就是為業務處理提供的介面,同理,我們也可以想象,流程執行個體在建立時以及結果時也應該能夠進行業務處理,更細的話在流程執行個體的各個狀態變更時也提供介面來作預防。對於流程節點執行個體,前置函數和後置函數顯得更為重要一些,在節點路由中,每個路由也應該涉及到前置和後置函數。可以看到,流程執行個體及節點執行個體在變化時就可能發生業務處理,這個點就是需要掛接業務的地方,也就是介面的開放位置。
剛才也提到,工作流程並非簡單的審批流,審批只是它的整個過程的描述,能夠有效、靈活方便的帶動具體的生產經營過程中的業務才是更有意義的,特別是怎樣能夠更加方便的進行複雜的業務資料處理,是開發工作流程系統需要考慮的重點。
對於流程資料和業務資料的關聯,當業務資料是多張表時,我們通常都是將主表與流程執行個體關聯,業務子表與主表進行關聯。
在通常情況下,建立業務表時會習慣性的添加一些欄位,比如建立人、建立時間,除此之外還喜歡添加一個業務狀態欄位,前面也說過,它非同於流程狀態,也許一致,也許不一致,通過流程來驅動業務狀態的變化,這樣有時候能方便查詢。對於在業務表中是否添加流程執行個體ID,這個應該按具體情況再定,畢竟各家的開發模式不同。