国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

.net之工作流工程展示及代碼分享(四)主控制類

2019-11-17 02:01:20
字體:
供稿:網(wǎng)友

.net之工作流工程展示及代碼分享(四)主控制類

現(xiàn)在應該講主控制類了,為了不把系統(tǒng)弄得太復雜,所以就用一個類作為主要控制類(服務類),作為前端、后端、業(yè)務邏輯的控制類。

WorkflowService類的類圖如下:

該類的構造函數(shù):

1         public WorkflowService(IWorkflowDB workflowDb, IWorkflowMethods workflowMethods)2         {3             _iWorkflowDb = workflowDb;4             _iWorkflowMethods = workflowMethods;5         }

通過簡單工廠方法返回類的實例:

 1         /// <summary> 2         /// 程序主調(diào)用方法 3         /// </summary> 4         /// <returns></returns> 5         public static WorkflowService GetWorkflowService() 6         { 7             IWorkflowDB iWorkflowDb; 8             try 9             {10             string dbSavingPRovider = WorkFlowUtility.GetConfiguration("DataBaseProvider").ToLower();11                 switch (dbSavingProvider)12                 {13                     case "Oracle":14                         iWorkflowDb = new OracleWorkFlowDBUtility();15                         break;16                     case "sqlserver":17                         //iWorkflowDb = new SqlServerWorkFlowDBUtility();18                         //break;19                     default:20                         iWorkflowDb = (IWorkflowDB) Assembly.Load(dbSavingProvider).CreateInstance(dbSavingProvider);21                         break;22                 }23 24             }25             catch (Exception)26             {27                 throw new WorkFlowConfigurationNotImplementException("數(shù)據(jù)庫配置失敗!");28             }29 30                 IWorkflowMethods iWorkflowMethods;31             try32             {33                 string dbInterface = WorkFlowUtility.GetConfiguration("WorkflowConfigurationNameSpace");34                 iWorkflowMethods = (IWorkflowMethods)Assembly.Load(dbInterface).CreateInstance(dbInterface + ".WorkflowConfiguration");35             }36             catch (Exception ex)37             {38                 throw new WorkFlowConfigurationNotImplementException("應用程序?qū)嵗渲檬。?);39             }40 41             return new WorkflowService(iWorkflowDb, iWorkflowMethods);42         }
View Code

所有方法返回的類型都是WorkflowServiceResponse類型,該類定義如下:

 1     public class WorkflowServiceResponse 2     { 3         public WorkflowServiceResponse() 4         { 5             Success = false; 6         } 7         public bool Success { get; set; }  8         public string Message { get; set; } 9         public dynamic ReturnEntity { get; set; }10     }

使用了Request-Response模式,其中返回的實體使用了.net4.0新增的Dynamic類型,這樣就不用做抽象類,然后各種不同的返回類型來繼承基類了。

調(diào)用的方法如下:

1             var wfs = WorkflowService.GetWorkflowService();2             var wfsr = wfs.GetFlowById(flowId);3             if (!wfsr.Success)4             {5                 this.ShowAndRedirects("參數(shù)錯誤", "FlowManager.aspx");6                 return;7             }8             var flow = wfsr.ReturnEntity as Flow;9 .......

那GetFlowById是怎么寫的呢?

 1         /// <summary> 2         /// 根據(jù)流程Id得到一個流程的情況 3         /// </summary> 4         /// <param name="flowId"></param> 5         /// <returns></returns> 6         public WorkflowServiceResponse GetFlowById(Guid flowId) 7         { 8             var wfsr = new WorkflowServiceResponse(); 9             try10             {11                 var flow = _iWorkflowDb.GetFlows().SingleOrDefault(f => f.FlowId == flowId);12                 if (flow != null)13                 {14                     wfsr.ReturnEntity = flow;15                     wfsr.Success = true;16                 }17             }18             catch (Exception ex)19             {20                 wfsr.Message = ex.ToString();21             }22             return wfsr;23         }

這樣前后端都串起來了。

在IWorkflowDB接口定義里,GetFlows返回的是List<Flow>對象,所以這么做數(shù)據(jù)接口存在一定的性能問題,如果改成IQueryable<Flow>就能夠返回Linq表達式,實現(xiàn)Lazy-Loaing的模式,但是Oracle不支持Linq查詢,以后換EF看看......

大家注意到了WorkflowService類里面還有個IWorkflowMethods接口。對了,這個接口就是和其它系統(tǒng)交互的關鍵,定義如下:

1     public interface IWorkflowMethods2     {3         Person GetCurrentLoginPerson();4         IList<Person> GetPersonByCondition(SearchCriteria searchCriteria);5         bool SendMail(Person person, string message);6         bool SendMessage(Person person, string message);7         string GetAutoCompleteValueByType(string autoCompleteType);8         IList<string> GetUserRoleGroupNames(Person person);9     }

這些方法分別是獲取當前登錄用戶、根據(jù)條件獲取應該審核流程的用戶、調(diào)用原系統(tǒng)方法法郵件、發(fā)短信,用于表單處理中的自動填入用戶姓名、職務等,獲取用戶所在的組(有些流程只有特定組可以申請)。

在其中一個系統(tǒng)中的實現(xiàn)方法如下:

 1         public IList<Person> GetPersonByCondition(SearchCriteria searchCriteria) 2         { 3             var flowLaunchPerson = searchCriteria.FlowLaunchPerson; 4             string sql = string.Empty; 5             IList<Person> persons = new List<Person>(); 6             switch (searchCriteria.NextPersonWorkGroupName) 7             { 8                 case ".....": 9                     break;10                 case "xxx審核":11                 {12                     sql = string.Format(" jsgh in (select gh from VM_TUAN....ERGR where zbid in" +13                                         " (select zbid from TUA....ELATIONSHip where gh = '{0}' or xh = '{0}')" +14                                         " and lv = 4 and zwname = '輔導員)')  ", flowLaunchPerson.PersonId);15                     break;16                 }17                 case ".....審核":18                 {19                     sql = string.Format(" jsgh in (select gh from VM.....HERGR where zbid in" +20                                         " (select zbid from TUA....IONSHIP where gh = '{0}' or xh = '{0}')" +21                                         " and lv = 4 and zwname = '...')  ", flowLaunchPerson.PersonId); 22                     break;23                 };24                  case ".....審核":25                   ........26                   break;27                 default:28                     break;29             }30 31             var teachers = new B.....GetModelList(sql);32 33             if (teachers.Count > 0)34             {35                 foreach (var teacher in teachers)36                 {37                     Person person = new Person()38                     {39                         PersonId = teacher.....,40                         PersonName = teacher.J....,41                         PersonEmail = teacher.E....,42                     };43                     persons.Add(person);44                 }45             }46             else47             {48                 throw new WorkFlowAuditPersonNotFoundException("沒有找到審核對象!");49             }50             return persons;51         }
View Code

最后分享服務類中兩個核心的方法

新建流程:

 1         /// <summary> 2         /// 根據(jù)流程Id建立新的流程 3         /// </summary> 4         /// <param name="workflowAddStepParameter"></param> 5
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 尼玛县| 武宣县| 海伦市| 东阿县| 麟游县| 定南县| 延长县| 莱芜市| 黎川县| 宜良县| 石嘴山市| 鱼台县| 措勤县| 靖边县| 出国| 叶城县| 广安市| 南城县| 北票市| 吴旗县| 枣强县| 平邑县| 天峨县| 图片| 调兵山市| 湘潭县| 拉孜县| 曲松县| 平乐县| 宁河县| 辽阳县| 二连浩特市| 泌阳县| 开远市| 中牟县| 广西| 西乌珠穆沁旗| 仲巴县| 阳西县| 深州市| 金山区|