前面對流程引擎個方面已經有了比較詳細的介紹,本篇將最後介紹流程調用的總體解決方案。html
在具體項目調用流程引擎以前,咱們須要作的是先把流程引擎以及可視化的流程設計器嵌入到本身的項目中,具體的嵌入方式請參考:流程引擎及流程設計器的嵌入方式。ide
歡迎加入流程交QQ流羣:251834323。post
在進行流程調用以前,首先須要根據具體的項目擴展流程引擎公開的相關接口(IPersonList)。此接口的做用爲:把具體項目相關的人員信息、部門信息、角色信息等提供給流程引擎調用。spa
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 }
實現相關接口後便可根據具體的業務邏輯利用可視化流程設計器進行流程的設計。code
因爲此流程引擎並未嵌入表單設計相關事項(後期可能加入表單設計引擎),因此若是想使用此流程引擎,還須要自行設計相關流轉表單。當設計好表單後,可調用流程引擎相關方法達到公文流轉。orm
如下提到的方法具體說明請參考:通用流程相關方法說明及調用事例。htm
1.調用WorkflowOperation中的方法IsExistTask或GetCurrentStep判斷表單針對某流程的任務是否已經發送。blog
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