最近打算深入了解一下工作流,經(jīng)過(guò)考察,OSWorkflow輕便靈活,從它入手吧。先備忘幾個(gè)概念性的東東。
Step
大致相當于流程所在的位置。譬如企業(yè)年檢,年檢報告書(shū)在企業(yè)端算一個(gè)step,在工商局算第二個(gè)step,在復核窗口算第三個(gè)step。每個(gè)step可以有多種狀態(tài)(status)和多個(gè)動(dòng)作(action),用Workflow.getCurrentSteps()可以獲得所有當前的step(如果有并列流程,則可能同時(shí)有多個(gè)step,例如一次年檢可能同時(shí)位于"初審"step和"廣告經(jīng)營(yíng)資格審查"step)。
Status
流程在某個(gè)step中的狀態(tài)。很容易理解,譬如"待認領(lǐng)"、"審核不通過(guò)"之類(lèi)的。OSWorkflow中的狀態(tài)完全是由開(kāi)發(fā)者自定義的,狀態(tài)判別純粹是字符串比對,靈活性相當強,而且可以把定義文件做得很好看。
Action
導致流程狀態(tài)變遷的動(dòng)作。一個(gè)action典型地由兩部分組成:可以執行此動(dòng)作的條件(conditions),以及執行此動(dòng)作的結果(results)。條件可以用BeanShell腳本來(lái)判斷,因此具有很大的靈活性,幾乎任何與流程相關(guān)的東西都可以用來(lái)做判斷。
Result
執行動(dòng)作后的結果。這是個(gè)比較重要的概念。result分為兩種,conditional-result和unconditional-result。執行一個(gè)動(dòng)作之后,首先判斷所有conditional-result的條件是否滿(mǎn)足,滿(mǎn)足則使用該結果;如果沒(méi)有任何contidional-result滿(mǎn)足條件,則使用unconditional-result。unconditional-result需要指定兩部分信息:old-status,表示"當前step的狀態(tài)變成什么";后續狀態(tài),可能是用step+status指定一個(gè)新?tīng)顟B(tài),也可能進(jìn)入split或者join。
conditional-result非常有用。還是以年檢為例,同樣是提交年檢報告書(shū),"未提交"和"被退回"是不同的狀態(tài),在這兩個(gè)狀態(tài)基礎上執行"提交"動(dòng)作,結果分別是"初次提交"和"退回之后再次提交"。這時(shí)可以考慮在"提交"動(dòng)作上用conditional-result。
Split/Join
流程的切分和融合。很簡(jiǎn)單的概念,split提供多個(gè)result;join則判斷多個(gè)current step的狀態(tài),提供一個(gè)result。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。