亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

.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
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91大神在线播放精品| 成人性生交大片免费看视频直播| 久久视频在线看| 国产精品美女免费| 久久九九免费视频| 成人久久18免费网站图片| 欧美—级高清免费播放| 亚洲色图综合久久| 69国产精品成人在线播放| 欧美高清视频免费观看| 午夜精品福利在线观看| 91在线色戒在线| 日韩久久免费视频| 韩国国内大量揄拍精品视频| 国产精品美女av| 亚洲片av在线| 国产精品久久久久久久久久| 久久琪琪电影院| 亚洲午夜久久久久久久| 亚洲福利视频专区| 欧美精品激情blacked18| 日日骚久久av| 中文字幕v亚洲ⅴv天堂| 亚洲最新在线视频| 中文字幕日韩专区| 久久精品视频网站| 国产一区二区三区网站| 庆余年2免费日韩剧观看大牛| 国产精品欧美在线| 日韩成人av网址| 欧美黑人xxxx| 国产精品久久999| 欧美激情久久久久| 日韩精品极品视频免费观看| 亚洲午夜精品久久久久久久久久久久| 久久av红桃一区二区小说| 国语自产精品视频在线看一大j8| 久久久精品国产网站| 欧美性高潮床叫视频| 日韩性生活视频| 国产精品高潮呻吟久久av野狼| 久久国产精品久久久久久久久久| 在线免费看av不卡| 欧美大尺度激情区在线播放| 一区二区欧美久久| 欧美日韩美女视频| 国产一区二区三区在线播放免费观看| 伊人伊成久久人综合网站| 成人免费看吃奶视频网站| 国产一区在线播放| 精品国产自在精品国产浪潮| 亚洲男人天堂2024| 国产欧美久久久久久| 久久精品国产精品亚洲| 亚洲香蕉成视频在线观看| 456国产精品| 久久久久久午夜| 亚洲天堂av在线播放| 成人精品网站在线观看| 国产一区二区三区久久精品| 欧美在线一区二区三区四| 亚洲аv电影天堂网| 亚洲天堂一区二区三区| 国产成人精品在线播放| 欧美日韩国产影院| 欧美色欧美亚洲高清在线视频| 国产日韩在线精品av| 成人有码在线播放| 久久青草福利网站| 国产精品丝袜高跟| 日韩在线视频中文字幕| 精品久久国产精品| 久久影视电视剧免费网站清宫辞电视| 午夜精品久久久99热福利| 中文字幕日韩精品有码视频| 亚洲天堂第一页| 精品电影在线观看| 国产精品丝袜高跟| 国产激情视频一区| 亚洲永久免费观看| 欧美一级免费看| 在线播放国产精品| 中文字幕亚洲欧美日韩在线不卡| 久久影院资源网| 亚洲无线码在线一区观看| 成人网在线观看| 欧美日韩国产成人在线| 欧美激情网友自拍| 国产精品毛片a∨一区二区三区|国| 欧美亚洲一区在线| 亚洲性无码av在线| 欧美激情视频网| 国产精品一区二区三区免费视频| 26uuu另类亚洲欧美日本老年| 欧美日韩国产色| 日韩欧美一区二区三区| 精品欧美国产一区二区三区| 亚洲国产精品久久久久| 国语自产精品视频在免费| 国产精品久久久久久久久久久久| 最新国产成人av网站网址麻豆| 亚洲电影免费观看高清完整版在线观看| 国产精品18久久久久久麻辣| 在线丨暗呦小u女国产精品| 国产精品电影在线观看| 精品亚洲精品福利线在观看| 欧美精品在线第一页| 欧美日韩国产色| 日韩av片永久免费网站| 国产精品手机播放| 亚洲第一中文字幕在线观看| 久久精品国产视频| 精品国内产的精品视频在线观看| 自拍亚洲一区欧美另类| 国内精品一区二区三区| 国产xxx69麻豆国语对白| 欧美成人激情图片网| 欧美成人午夜激情在线| 欧美激情一区二区三区成人| 91精品国产91久久久| 亚洲国产高清高潮精品美女| 色综合天天综合网国产成人网| 欧美韩国理论所午夜片917电影| 欧美色欧美亚洲高清在线视频| 国产精品久久久久久av| 日韩av在线直播| 亚洲欧美日韩精品久久| 欧美日产国产成人免费图片| 中文字幕在线看视频国产欧美在线看完整| 国产噜噜噜噜久久久久久久久| 国产精品91久久久久久| 狠狠躁夜夜躁人人躁婷婷91| 欧美专区在线视频| 精品久久久久久久久久久久久| 国产精品久久久久999| 成人激情视频小说免费下载| 欧美极品少妇xxxxⅹ喷水| 国产成人免费av电影| 欧美在线一级va免费观看| 久久国产一区二区三区| 国产精品精品久久久久久| 97人人爽人人喊人人模波多| 一本一本久久a久久精品综合小说| 久久免费视频网| 国产狼人综合免费视频| 国产亚洲精品综合一区91| 亚洲欧美日韩直播| 久热国产精品视频| 国产精品美女主播在线观看纯欲| 国产精品久久久久久久久久久久久| 亚洲午夜国产成人av电影男同| 国产精品视频地址| 亚洲成人av中文字幕| 日韩电影中文字幕一区| 色多多国产成人永久免费网站| 亚洲成人国产精品| 538国产精品视频一区二区| 日韩成人久久久| 国产99视频在线观看| 91美女片黄在线观看游戏| 国产啪精品视频网站| 2020欧美日韩在线视频| 中文字幕v亚洲ⅴv天堂| 欧美性受xxxx白人性爽|