麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

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

2019-11-17 02:01:20
字體:
來源:轉載
供稿:網友

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

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

WorkflowService類的類圖如下:

該類的構造函數:

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

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

 1         /// <summary> 2         /// 程序主調用方法 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("數據庫配置失敗!");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("應用程序實例配置失敗!");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類型,這樣就不用做抽象類,然后各種不同的返回類型來繼承基類了。

調用的方法如下:

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

那GetFlowById是怎么寫的呢?

 1         /// <summary> 2         /// 根據流程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>對象,所以這么做數據接口存在一定的性能問題,如果改成IQueryable<Flow>就能夠返回Linq表達式,實現Lazy-Loaing的模式,但是Oracle不支持Linq查詢,以后換EF看看......

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

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     }

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

在其中一個系統中的實現方法如下:

 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         /// 根據流程Id建立新的流程 3         /// </summary> 4         /// <param name="workflowAddStepParameter"></param> 5
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 噜噜噜影院| 在线a毛片免费视频观看 | 欧美a视频在线观看 | 中文字幕一区在线观看视频 | 黑人三级毛片 | 国产在线精品一区二区 | 成人毛片100部 | 龙床上的呻吟高h | 嗯~啊~弄嗯~啊h高潮视频 | 国产午夜精品视频免费不卡69堂 | 欧美精品一区二区视频 | 91成人一区二区三区 | 久草在线新时代视觉 | 日韩美香港a一级毛片 | 在线亚洲欧美 | 4480午夜| 免费黄色在线电影 | 91精品免费观看 | 国产一区二区在线观看视频 | 九九色网站 | 久久久久久久久久久久久久久伊免 | 欧美成人午夜 | av电影免费观看 | 美女黄色影院 | 国产精品久久久久久模特 | 欧美日日操 | 亚洲精中文字幕二区三区 | 国产欧美亚洲精品 | 国产精品久久久久久久av | 国产精选久久 | 国产人成免费爽爽爽视频 | 精品91av | 日本欧美在线播放 | 一二区电影 | 中文在线观看视频 | 色七七网站 | 久久青草影院 | 精品av在线播放 | 一级大片一级一大片 | 国产一区二区影视 | 国产影院一区 |