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