![簡單CSharp工作流地實現(xiàn)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/7a87dad0-f80b-42a9-b395-4f05b6459ce3/7a87dad0-f80b-42a9-b395-4f05b6459ce31.gif)
![簡單CSharp工作流地實現(xiàn)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/7a87dad0-f80b-42a9-b395-4f05b6459ce3/7a87dad0-f80b-42a9-b395-4f05b6459ce32.gif)
![簡單CSharp工作流地實現(xiàn)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/22/7a87dad0-f80b-42a9-b395-4f05b6459ce3/7a87dad0-f80b-42a9-b395-4f05b6459ce33.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、一個簡單一個簡單C#工作流的實現(xiàn)最近一直在做一個小項目, 這個項目是高等學校崗位聘用審核系統(tǒng), 該系統(tǒng) 涉及到多個部門審批, 同時還要求管理員能對審核部門進行管理, 編輯、 添加和 刪除等。在了解到這些系統(tǒng)需要后,我首先想到利用微軟 sharepoint2007 來開 發(fā),畢竟微軟的工作流引擎已經(jīng)非常成熟了,而且讓人有種站在巨人肩膀的感覺(H0H6。經(jīng)過一段時間對 sharepoint2007 的學習,這套系統(tǒng)實在是太大了, 而早幾個月前這套系統(tǒng)在國內(nèi)幾乎沒有一本成形 的開發(fā)書籍, 只有系統(tǒng)管理類書籍,常因為一個問題而耽誤好幾天,整個開發(fā)就這樣停滯了, 后來仔細想 想其實我所開發(fā)的系統(tǒng)需要的工
2、作流只是最簡單工作流應用, 因此也就有了自己 設計一個小 型工作流的想法,成就了本文,希望對大家有幫助我設計的這個小型工作流只具有 “運行先后”這個概念,沒有其它判斷條件,前一批工作流活動完成,后一批工作流活動開始因為工作流類 (W0rkfl0w) 的結(jié)構(gòu)非常簡單:classW0rkfl0w()Private int _id; /Private string _name; /Private string _url; /Private int _seq; /Private int _statusBit; / 工作流活動 ID 工作流活動名稱 工作流活動相應的網(wǎng)頁 運行順序狀態(tài)位工作流活動 ID
3、不用解釋了,工作流活動名稱可是任何字符,這樣是為了更 好區(qū)分工作流活動。url的設計是由INFOPATHS想到的,微軟sharepoint2007 可以通過為每個工作流活動指定相應的編輯表單,可以是網(wǎng)頁也可以 inf0path 設計的表單,這樣 的 好處是 讓工作流 的不同活動 具有不 同的用戶界 面, sharepoint2007 可以在 feature.xml 里設置,而我這就使用 url 字段記錄一個 網(wǎng)頁鏈接,不同工作流活動對應不同的網(wǎng)頁。 seq 是每個工作流運行的順序,從零開始,依次為 0、1、2、3 ,這個字段正是為了設置工作流的運行順序, 并行的工作流活動可以設置成相同的運行順
4、序。 可能有人會問怎么標識工作流活 動已經(jīng)完成呢, 這個標識正是由 statusBit 狀態(tài)位來實現(xiàn)的, 每個申請表中都含 有一個 status 字段,這個字段默認為 50 個0'組成的字符串, status 字段是 為了記錄當前申請表哪些工作流活動完成了, 1 為完成 0 為未完成, statusBit 狀態(tài)位正是將工作流活動與申請表中的狀態(tài)聯(lián)系起來, 也許有些朋友會認為讓系 統(tǒng)自動分配好更好, 第一個工作流活動聯(lián)系第一位狀態(tài), 第二個工作流活動聯(lián)系 第二位狀態(tài), 等等。我這么做的好處是考慮到可能會有多個工作流活動只需完成 其中一個活動就情況,就像邏輯判斷中的“或”一樣,在這種情況我
5、們只需將多 個工作流活動狀態(tài)位設置成一樣就可以達到目的了。光說而沒有實例可能有些朋友不太明白,下面我以項目中工作流流程為例: 本系統(tǒng)的流程是這樣的(不好意思, linux 下畫的圖效果沒 visio 好): 由流程圖得出各工作流實例如下 :ID NAME URL SEQ STATUSBIT1 申請人提交申請表 user_main.aspx 0 12 各部門審查 depart_check.aspx 1 23 科技處審查 check_main.aspx 2 34 教務處審查 check_main.aspx 2 45 研究生院審查 check_main.aspx 2 56 人事科審查 check_m
6、ain.aspx 2 67 人事處審查 recheck.aspx 3 78 專家評議 expert_main.aspx 4 89 完成聘用 null 5 9 想必由以上實例應該很容易看出流程圖了,看到這應該明白了吧 下面是我的工作流類的C#實現(xiàn):Using System;Using System.Web;Using System.ComponentModel;Using System.Data;/ 工作流類/</summary>Public class WorkflowPrivate int _id;/<summary>/ 工作流編號/</summary>P
7、ublic int Idgetreturn _id; set_id=value; Private string _name;/<summary>/ 工作流名字/</summary>Public string Namegetreturn _name; set_name=value;Private string _url;/<summary>/ 工作流使用網(wǎng)頁/</summary>Public string Urlgetreturn _url; set_url=value;Private int _seq;/<summary>/ 工作流運
8、行序號/</summary>Public int Seqgetreturn _seq; set_seq=value; Private int_statusBit;/<summary>/ 狀態(tài)位/</summary>Public int StatusBitgetreturn _statusBit; set_statusBit=value;Public Workflow()Public Workflow (int id,string name,string url,int seq,int statusBit)this.Id=id;this.Name=name;t
9、his.Url=url;this.Seq=seq;this.StatusBit=statusBit;Public Workflow (SqlDataReader dr) this.Id=Convert.ToInt32(dr"id"); this.Name=dr"name".ToString(); this.Url=dr"url".ToString();this.Seq=Convert.ToInt32(dr"seq"); this.StatusBit=Convert.ToInt32(dr"statusBit
10、");Public int Add() stringprocName="pr_AddWorkflow" SqlParameterprams=new SqlParameter("name",SqlDbType.NVarChar,50), newSqlParameter("url",SqlDbType.NVarChar,500), newSqlParameter("seq",SqlDbType.Int),newSqlParameter("statusbit",SqlDbType.Int);
11、 prams0.Value=Name;prams1.Value=Url;prams2.Value=Seq;prams3.Value=StatusBit;return Database.runExecute(procName,prams);Public int Delete()String procName="pr_DeleteWorkflow"SqlParameterprams=new SqlParameter("id",SqlDbType.BigInt); prams0.Value=Id;return Database.runExecute(procN
12、ame,prams);Public int Update()String procName="pr_UpdateWorkflow"SqlParameterprams=new SqlParameter("id",SqlDbType.BigInt), newSqlParameter("name",SqlDbType.NVarChar,50), newSqlParameter("url",SqlDbType.NVarChar,500), newSqlParameter("seq",SqlDbType.
13、Int),newSqlParameter("statusbit",SqlDbType.Int); prams0.Value=Id;prams1.Value=Name; prams2.Value=Url;prams3.Value=Seq; prams4.Value=StatusBit;return Database.runExecute(procName,prams);/<summary>/ 根據(jù)工作流編號獲得工作流信息 /</summary>/<paramname="id"> 工作流編號 </param>
14、/<returns> 工作流信息 </returns>Public static Workflow GetWorkflowById(int id)Workflow wl=new Workflow();String procName="pr_GetWorkflowById"SqlParameter prams=new SqlParameter("Id",SqlDbType.BigInt); prams0.Value=id;SqlDataReaderdr=Database.runProcGetReader(procName, pram
15、s);while(dr.Read()wl=new Workflow(dr);dr.Close();return wl;/<summary>/ 根據(jù)工作流編號獲得工作流網(wǎng)頁地址/</summary>/<paramRealName="workflowId"> 工作流編號 </param> /<returns> 工作流網(wǎng)頁地址 </returns>Public staticstringGetWorkflowUrlById(intworkflowId)stringprocName="pr_GetWor
16、kflowUrlById"SqlParameterprams=newSqlParameter("workflowId",SqlDbType.BigInt),newSqlParameter("url",SqlDbType.NVarChar,500); prams0.Value=workflowId;prams1.Direction=ParameterDirection.Output;Database.runExecute(procName,prams);returnprams1.Value.ToString();/<summary>/
17、 返回工作流個數(shù)/</summary>/<returns> 工作流個數(shù) </returns>Public staticint GetWorkflowNum()String procName="pr_GetWorkflowNum"SqlParameter prams=newSqlParameter("num",SqlDbType.Int);prams0.Direction=ParameterDirection.Output;Database.runExecute(procName,prams);Return Conver
18、t.ToInt32(prams0.Value);/<summary>/ 設置申請表的工作流完成狀態(tài)/</summary>/<paramname="reportId"> 申請表編號 </param> /<paramname="workflowId"> 工作流編號 </param> /<paramname="status"> 完成狀態(tài) </param> /<returns></returns>Public static
19、int SetActivityStatus(intreportId,intworkflowId, boolstatus)String procName="pr_SetActivityStatus"SqlParameter prams=newSqlParameter("reportId",SqlDbType.BigInt),newSqlParameter("workflowId",SqlDbType.BigInt),newSqlParameter("status",SqlDbType.Bit); prams0.Val
20、ue=reportId;prams1.Value=workflowId;prams2.Value=status; returnDatabase.runExecute(procName,prams);/<summary>/ 獲得申請表的工作流完成狀態(tài)/</summary>/<paramname="reportId"> 申請表編號 </param> /<paramname="workflowId"> 工作流編號 </param> /<returns> 完成狀態(tài) </re
21、turns> publicstaticboolGetActivityStatus(intreportId,int workflowId)String procName="pr_GetActivityStatus"SqlParameterprams=new SqlParameter("reportId",SqlDbType.BigInt), newSqlParameter("workflowId",SqlDbType.BigInt),newSqlParameter("status",SqlDbType.Bit)
22、; prams0.Value=reportId;prams1.Value=workflowId; prams2.Direction=ParameterDirection.Output; Database.runExecute(procName,prams);Return Convert.ToBoolean(prams2.Value);/<summary>/ 獲得工作流中當前活動的下一批運行活動/</summary>/<paramname="workflowId"> 當前活動編號 </param> /<returns>
23、; 下一批運行活動 </returns>Public staticList<Workflow> GetNextWorkflow(int workflowId) List<Workflow>workflows=newList<Workflow>();String procName="pr_GetNextWorkflow"SqlParameterprams=new SqlParameter("workflowId",SqlDbType.BigInt); prams0.Value=workflowId;SqlDa
24、taReaderdr=Database.runProcGetReader(procName, prams);while(dr.Read()Workflowwf=newWorkflow(dr); workflows.Add(wf);returnworkflows;/<summary>/ 獲得工作流中當前活動的上一批運行活動/</summary>/<paramname="workflowId"> 當前活動編號 </param> /<returns> 上一批運行活動 </returns>Public stat
25、icList<Workflow> GetPreviousWorkflow(int workflowId) List<Workflow>workflows=newList<Workflow>(); stringprocName="pr_GetPreviousWorkflow"SqlParameterprams=new SqlParameter("workflowId",SqlDbType.BigInt);prams0.Value=workflowId;SqlDataReaderdr=Database.runProcGet
26、Reader(procName, prams);while(dr.Read()Workflowwf=newWorkflow(dr); workflows.Add(wf);returnworkflows;/<summary>/ 判斷申請表進行的上一批工作流是否完成/</summary>/<paramname="workflowId"></param> /<paramname="reportId"></param>/<returns></returns> publ
27、icstaticboolIsPreviousWorkflowFinished(intworkflowId, intreportId) boolflag=true;List<Workflow>workflows=newList<Workflow>();workflows=GetPreviousWorkflow(workflowId); foreach(Workflowwfinworkflows) stringstatus=Reports.GetCurrentStatusById(reportId); if(status.Substring(wf.StatusBit-1,1
28、)="0")flag=false;break;returnflag;/<summary>/ 判斷申請表進行的下一批工作流是否開始 /</summary>/<paramname="workflowId"></param> /<paramname="reportId"></param> /<returns></returns> publicstaticboolIsNextWorkflowStarted(intworkflowId,int rep
29、ortId)boolflag=false; List<Workflow>workflows=newList<Workflow>(); workflows=GetNextWorkflow(workflowId); foreach(Workflowwfinworkflows) stringstatus=Reports.GetCurrentStatusById(reportId); if(status.Substring(wf.StatusBit-1,1)="1")flag=true;break;returnflag;/<summary>/ 獲得工作流中第一個活動/</summary>/<returns> 第一個活動 </returns> publicstaticWorkflowGetFirstActivity() Workflowwf=newWorkflow();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 機器人運動控制技術研發(fā)合同(2篇)
- 2025年山東工業(yè)職業(yè)學院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 2025年威海海洋職業(yè)學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年四川商務職業(yè)學院高職單招職業(yè)適應性測試近5年??及鎱⒖碱}庫含答案解析
- 2025至2031年中國水輥保護液行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國新速效感冒片行業(yè)投資前景及策略咨詢研究報告
- 2025至2031年中國四氟密封圈行業(yè)投資前景及策略咨詢研究報告
- 汽車電子電氣架構(gòu)演進-深度研究
- 基于區(qū)塊鏈的身份認證技術研究-第2篇-深度研究
- 2025年度智能調(diào)光裝修吊頂系統(tǒng)合同
- 2025福建新華發(fā)行(集團)限責任公司校園招聘30人高頻重點提升(共500題)附帶答案詳解
- 山東鐵投集團招聘筆試沖刺題2025
- 2025年中考英語總復習:閱讀理解練習題30篇(含答案解析)
- 陜西省英語中考試卷與參考答案(2024年)
- 施工現(xiàn)場揚塵污染治理巡查記錄
- 2024年列車員技能競賽理論考試題庫500題(含答案)
- 《無人機測繪技術》項目3任務2無人機正射影像數(shù)據(jù)處理
- 《ISO 55013-2024 資產(chǎn)管理-數(shù)據(jù)資產(chǎn)管理指南》專業(yè)解讀和應用指導材料(雷澤佳編制-2024B0)-121-240
- 5A+Chapter+2+Turning+over+a+new+leaf 英語精講課件
- 相交線教學課件
- 貝克曼梁測定路基路面回彈彎沉
評論
0/150
提交評論