SharePoint工作流解决方案QuickFlow系列(2)--Task
任務是工作流的核心,一個工作流系統如何方便的表達任務分發的邏輯是衡量這個工作流系統可用性的重要標準之一.
SharePoint默認提供了CreateTask , OnTaskChanged,CompleteTask來實現對一個任務的分配和處理.
每次分配一個任務都要處理三個Activity,有點"麻煩",所以QuickFlow將這三個活動整合成一個活動—Task,通過單一的Task活動,即可實現任務的處理邏輯.
將Task活動拖入Flowchart設計器后,可以發現其如下的屬性:
User : 用來指定任務的操作人,Task內部會自動給這個用戶分配任務,并設置任務的操作權限。
TaskTitle:任務的名稱
TaskType : 任務表單的ID,跟workflow.xml中的TaskX_URN配置對應。
TaskStep : 任務所屬的步驟,這個步驟會直接顯示到列表中的WorkflowStep字段中.WorkflowStep是QuickFlow自動給工作流管理的列表或文檔庫添加的欄,用來記錄當前流程步驟。 很多客戶都會要求列表中能明確的現實出當前流程處于那個步驟,這是,你要你啟動工作流后,修改視圖,將那個WorkflowStep字段顯示出來即可,你可以修改WorkflowStep的字段名。
AutoReturn : 當為true時,任務完成后自動返回到來源的任務,可以用于多次審批拒絕時都返回給提交人,然后提交人提交或自動返回上一次的審批人。
TaskOutcome:任務結果。可以在InfoPath表單中設置一個__TaskOutome字段,這個字段的最終值及是TaskOutcome的值。
IncomeSync:輸入同步.當上一級審批是多個同步的活動時,不要設置這個屬性為true,這樣,只有上一級的所有活動都執行完成后才會執行此活動。
Task同時具有如下事件:
Initialized :? 活動初始化事件。
TaskCreating : 任務創建事件,一般在此事件中給任務屬性賦值。如:
private void task1_TaskCreating(object sender, TaskEventArgs e)
?????? {
?????????? //set infopath form field value
?????????? e.TaskProperties.ExtendedProperties["someInfoField"] = "";
?????????? Task t = (Task)sender;
?????????? t.User = "domain/userAccount";
?????? }
Competed : 活動完成事件,一般在此事件中可以獲取到用戶的輸入數據,如:
private void task1_Completed(object sender, EventArgs e)
?????? {
??????????? Task t = (Task)sender;
??????????? string approveResult = t.TaskOutcome;
?????????? string approveComments = t.TaskProperties.ExtendedProperties["comments"];
?????? }
?
常見開發問題:
1)多級審批時如何將上一級審批的審批意見顯示到下級審批?
答:在上級活動的Completed事件中將審批意見保存到一個全局字段中,然后在下級審批任務的TaskCreating事件中給InfoPath賦值。如:
string approval1Comments ; //用來保存上級審批意見的字段
?????? private void task1_Completed(object sender, EventArgs e)
?????? {
?????????? Task t = (Task)sender;
?????????? string approveResult = t.TaskOutcome;
?????????? approval1Comments = ""+t.TaskProperties.ExtendedProperties["comments"];
?????? }
private void task2_TaskCreating(object sender, TaskEventArgs e)
??????? {
??????????? e.ExtendedProperties["comments"] = approval1Comments;
??????? }
2)為什么有時候直接訪問Task的屬性不能獲取到值?
答:為了實現一個活動可以執行任意多次,QuickFlow的Activity調度服務會在活動執行時動態創建一個活動,而不是執行原始的活動,設計器上那個活動只是一個原型 ,所以通過活動的事件訪問活動時,除了通過事件參數,還可以將事件的第一個參數(object sender),進行類型轉換,這個object一定就是執行中的活動。
為了Decision活動可以直接訪問”原型”活動,QuickFlow在活動執行完成后會進行屬性同步,所有Decision是可以直接訪問
原型活動的TaskOutcome屬性的。
要完全避免屬性訪問的問題,可以將要訪問的屬性綁定到工作流類的字段,這樣就總是可以訪問了。
示例代碼下載:
http://files.cnblogs.com/jianyi0115/QuickExample.zip
轉載于:https://www.cnblogs.com/jianyi0115/archive/2009/08/28/1555917.html
總結
以上是生活随笔為你收集整理的SharePoint工作流解决方案QuickFlow系列(2)--Task的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用ModelForm上传图片
- 下一篇: G少爷上证技术分析 8月31日