前面對流程引擎個方面已經有了比較詳細的介紹,本篇將最后介紹流程調用的整體解決方案。
在具體項目調用流程引擎之前,我們需要做的是先把流程引擎以及可視化的流程設計器嵌入到自己的項目中,具體的嵌入方式請參考:流程引擎及流程設計器的嵌入方式。
歡迎加入流程交QQ流群:251834323。
在進行流程調用之前,首先需要根據具體的項目擴展流程引擎公開的相關接口(IPersonList)。此接口的作用為:把具體項目相關的人員信息、部門信息、角色信息等提供給流程引擎調用。
IPersonList接口包含兩個方法。GetPersonList及GetGlobalKeyValue,前者擴展的目的為:讓流程引擎可以通過調用此方法,獲得人員類型ID對應的所有的人員列表。后者擴展的目的為:使具體的人員類型對流程引擎透明化(角色,具體有那些角色、部門,具體有哪些部門等),以便可視化流程設計中對相關人員類型處理。

1 using System.Collections.Generic; 2 using Workflow.Abstract; 3 4 namespace Workflow.Concrete 5 { 6 /// <summary> 7 /// 接口實現實例 8 /// </summary> 9 public class TestMode : IPersonList 10 { 11 /// <summary> 12 /// 獲取人員列表 13 /// </summary> 14 /// <param name="processingpersonnel">逗號分割的多記錄</param> 15 /// <returns></returns> 16 List<string> IPersonList.GetPersonList(string processingpersonnel) 17 { 18 //定義返回人員列表 19 var lst = new List<string>(); 20 21 //循環逗號分割的多個人員類型ID 22 foreach (var str in processingpersonnel.Split(',')) 23 { 24 //根據具體的人員類型ID以及項目的具體情況,返回包含在此人員類型ID下的所有人員列表 25 //foreach (var p in GetAllPerson(str)) 26 //{ 27 //循環組中的所有人員,利用下面代碼加入到返回列表中。 28 lst.Add("具體人員"); 29 //} 30 } 31 32 return lst; 33 } 34 35 /// <summary> 36 /// 實現接口的具體類,獲取其對應的鍵值對列表 37 /// </summary> 38 /// <returns></returns> 39 IDictionary<string, string> IPersonList.GetGlobalKeyValue() 40 { 41 //定義返回類型列表 42 IDictionary<string, string> d = new Dictionary<string, string>(); 43 //將具體的鍵值對加入到返回列表中 44 d.Add("鍵(如部門ID)", "值(如部門名稱)"); 45 return d; 46 } 47 } 48 }
實現相關接口后即可根據具體的業務邏輯利用可視化流程設計器進行流程的設計。
由於此流程引擎並未嵌入表單設計相關事項(后期可能加入表單設計引擎),所以如果想使用此流程引擎,還需要自行設計相關流轉表單。當設計好表單后,可調用流程引擎相關方法達到公文流轉。
以下提到的方法具體說明請參考:通用流程相關方法說明及調用事例。
1.調用WorkflowOperation中的方法IsExistTask或GetCurrentStep判斷表單針對某流程的任務是否已經發送。
2.如果任務未發送,調用WorkflowOperation中的SendWorkflow方法,發起公文的流轉。
3.如果任務已發送,調用TaskListOperation中的GetPersonTask或GetByFormTaskList方法獲取待處理的任務列表。
4.調用WorkflowOperation中的IsHereafter方法,判斷待處理任務的節點步驟的處理人類型是否為將來指定,如果為將來指定,需彈出人員選擇框選擇具體的處理人,然后進入步驟5。
5.調用TaskListOperation中的TaskListUpdate方法,對待處理任務進行處理。
6.再次調用WorkflowOperation中的SendWorkflow方法,推動公文的流轉。
7.判斷6中的方法的返回值,確定推動狀態,如果未到達結束節點步驟,重復步驟3-6,否則對表單做后續的相關處理,如改變表單狀態等。
在公文的正常流轉中,難免會出現許許多多的特殊情況,例如,審批人的更換、添加、移除等。在此流程引擎中,也有相關的解決方案。即,通過如下方法對處理人進行增刪。
TaskListOperation類中的AddHandlePerson方法對處理人的增加。
TaskListOperation類中的RemoveHandlePerson方法對處理人的移除。
以上既是,包含流轉發起、流轉推動、任務列表獲取等在內的基本流程應用。
注:流程引擎正在不斷的努力完善中,同時希望有相同愛好的人能加入QQ群251834323,共同為開源軟件做一份微薄之力。
相關文章連接:
通用流程設計:http://www.cnblogs.com/qidq/p/workflow.html
可視化流程設計——流程設計器演示(基於Silverlight):http://www.cnblogs.com/qidq/p/Workflow_Silverlight.html