SharePoint工作流解決方案QuickFlow系列(4)—Step Rounter(步驟路由)

本文將講解以下幾個活動:Step,Decision,Ronter+Rule

Step:步驟。

Step可以作爲其他活動的容器,除了QuickFlow提供的幾個活動(Task,GroupTask,Step等),其他活動是不能直接拖到設計器上的,如果要用到其他活動怎麼辦呢?比如要用CodeActivity來寫一下Server Code?這時就可以用Step活動,將Step活動拖到設計器上,就可以在其中添加任意其他活動了。

示意圖:

image

Decision:兩路判斷。

Decison相當於IfElse,可以按照一個判斷條件指定下一步要執行的活動。Decision有兩個端點,分別顯示F(false),T(True),這兩個端點可以劃線連接到其他活動,分別爲Conditon爲True或False時下一步要執行的活動。

Decision有個Condition屬性,用來指定判斷條件,可以用聲明性條件或代碼條件,一般在上一步任務結束後需要按照審批結果判斷下一步的步驟。這時候就要用到Task活動的TaskOutome屬性或GroupTask的TaskOutcomes屬性。

image

如果是按照GroupTask或MultiTask做判斷,則需要用類似this.GroupTask1.TaskOutcomes.Filter(“Approve”)>=1來做判斷。

如果採用代碼條件,代碼如下:

private void condition2(object sender, ConditionalEventArgs e)
       {
           e.Result = this.task1.TaskOutcome == "Approve";
       }

Decision只能實現兩個下級活動的路由,如果下級活動是多個那麼就需要用多個Decision串聯。

示意圖:

image

Rounter+Rule:多路判斷

這是兩個活動,Rounter是一個容器活動,可以在其中添加多個Rule,每個Rule都有一個Condition條件和Target屬性,Target指向一個活動,當Contition爲True是即執行Target指向的活動。如果下一級審批可能有兩種以上的可能性,用這兩個活動是非常適合的(當然,也可以用多個Decision連接,但是那樣流程圖看起來不那麼“優美”),Rule的Conditon屬性的使用跟Decision的Conditon屬性用法完全一樣。

但是要注意,Rounter+Rule不能作爲一級活動使用,它們必須放置在Step活動內部,一般在用Rounter+Rule時,先拖放一個Step活動,然後在Step活動中添加一個Tas或GroupTask活動,然後添加Rounter活動,Rounter默認會帶有兩個Rule,實現兩路分支判斷,可以利用Rounter右鍵菜單中的Add Branch菜單添加一個Rule。

image

需要注意的是,就像在這篇文章中提到的:http://www.cnblogs.com/jianyi0115/archive/2009/08/28/1555917.html,有時候,活動的屬性值是不能直接取到的,同樣,在Rule的Conditon屬性中,如果要用到同一個Step中的Task或GroupTask的TaskOutcome或TaskOutcomes屬性,在運行時,值也可能取不到的,爲了避免這個問題,可以總是把TaskOutcome或TaskOutcomes屬性綁定到工作流的一個字段。

 

代碼示例下載:

http://files.cnblogs.com/jianyi0115/QuickFlowExample_StepRounter.rar

注意,請將示例代碼中DLL目錄中的QuickFlow.dll部署到GAC,或者到codeplex下載最新版本(修復了一個bug)。

image

 

後記:Rounter活動路由已經變成一種過期的方式,Quickflow不會再增強這個功能,建議採用其他方式來實現路由,如Decision,RuleDriven,LineRule等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章