在前文中我們提到 SharePoint 是在 WF 工作流引擎之上,封裝了事件驅(qū)動(dòng)接口的一個(gè)工作流平臺(tái); SharePoint 在 WF 上擴(kuò)充了很多 Activity,其中和 WF 密切相關(guān)的有三個(gè)常用 Activity是: OnWorkflowActivated,CreateTask,OnTaskChanged,
SharePoint狀態(tài)機(jī)工作流解決方案(二):SharePoint中的WF狀態(tài)機(jī)
。一個(gè)簡(jiǎn)單的 SharePoint 順序流。
OnWorkflowActivated:響應(yīng)流程啟動(dòng)的事件。
CreateTask:生成 SharePoint 的任務(wù)。
OnTaskChanged:響應(yīng)任務(wù)被改變的事件。
在一個(gè)流程中只能有一個(gè) OnWorkflowActivated ;可以有任意數(shù)量的 CreateTask 和 OnTaskChanged ,但必須成對(duì);
很多 SharePoint 工作流解決方案,在順序流模式下,將 CreateTask 和 OnTaskChanged 組成一個(gè)自 定義的Activity,然后利用 ReplicatorActivity 的自動(dòng)復(fù)制功能,使之支持多人同時(shí)審批。這種方式流 程很簡(jiǎn)潔,但順序流不支持回退,遇到需要回退的情況,只能通過(guò) WhileActivity 模擬,流程又會(huì)變得 很復(fù)雜。
一個(gè)簡(jiǎn)單的 SharePoint 狀態(tài)機(jī)
流程包含了三個(gè)狀態(tài)啟動(dòng)、審批和完成;再添加其他狀態(tài)就可以實(shí)現(xiàn)狀態(tài)之間的回退。
“響應(yīng)啟動(dòng)事件”中包括了 OnWorkflowActivated 和 SetStateActivity
“添加審批人”中包括了 CreateTask
“響應(yīng)審批事件”中包括了 OnTaskChanged 和 SetStateActivity
WF 的每個(gè) StateActivity 只能包含一個(gè) StateInitializationActivity,用于添加審批人和實(shí)現(xiàn)初 始化的業(yè)務(wù)邏輯,
電腦資料
《SharePoint狀態(tài)機(jī)工作流解決方案(二):SharePoint中的WF狀態(tài)機(jī)》(http://www.ishadingyu.com)。可以包含多個(gè) EventDrivenActivity,用于同時(shí)響應(yīng)多個(gè)審批事件,和實(shí)現(xiàn)審批后的業(yè) 務(wù)邏輯;EventDrivenActivity 的第一個(gè)控件必須是 HandleExternalEventActivity (OnTaskChanged的 基類)。從上圖中我們看到,在狀態(tài)機(jī)下 CreateTask 和 OnTaskChanged 仍然是必須成對(duì)的,但他們的位置分 開了,CreateTask 處于 StateInitalizationActivity 中,OnTaskChanged 處于 EventDrivenActivity 中。
可以多人同時(shí)審批的 SharePoint 狀態(tài)機(jī)
如果要多人同時(shí)審批,需要在 StateInitializationActivity 中添加多個(gè) CreateTask,和在 StateActivity 中添加多個(gè) EventDriven。
“添加審批人”中包括了 A 的 CreateTask 和 B 的 CreateTask。
“響應(yīng)A的審批事件”中包含了 A 的 OnTaskChanged。
“響應(yīng)B的審批事件”中包含了 B 的 OnTaskChanged。
如果需要添加更多的審批人,以此類推。
SharePoint 狀態(tài)機(jī)工作流存在的問(wèn)題
從上面我們可以發(fā)現(xiàn),SharePoint 的狀態(tài)機(jī)應(yīng)用存在下面兩個(gè)問(wèn)題:
1、EventDrivenActivity 中的流程存在冗余,當(dāng)流程復(fù)雜,審批人多的時(shí)候,很難維護(hù)。
2、審批人數(shù)在設(shè)計(jì)期就必須確定,不能改變。
在下一篇《SharePoint 狀態(tài)機(jī)工作流解決方案(三);內(nèi)置缺省流程邏輯的 SharePoint 狀態(tài)機(jī)》中 ,我們會(huì)介紹對(duì)這兩個(gè)問(wèn)題的解決方案。