




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、一個簡單一個簡單C #工作流的實現(xiàn)最近一直在做一個小項目,這個項目是高等學校崗位聘用審核系統(tǒng),該系統(tǒng) 涉及到多個部門審批,同時還要求管理員能對審核部門進行管理,編輯、添加和 刪除等。在了解到這些系統(tǒng)需要后,我首先想到利用微軟sharepoint2007來開發(fā), 畢竟微軟的工作流引擎已經(jīng)非常成熟了,而且讓人有種站在巨人肩膀的感覺(HoHo)。經(jīng)過一段時間對 sharepoint2007 的學習,這套系統(tǒng)實在是太大了,而早幾個月前這套系統(tǒng)在國內(nèi)幾乎沒有一本成形 的開發(fā)書籍,只有系統(tǒng)管理類書籍,常因為一個問題而耽誤好幾天,整個開發(fā)就這樣停滯了, 后來仔細想想其實我所開發(fā)的系統(tǒng)需要的工作流只是最簡單工
2、作流應用,因此也就有了自己 設計一個小型工作流的想法,成就了本文,希望對大家有幫助。我設計的這個小型工作流只具有“運行先后”這個概念,沒有其它判斷條件, 前一批工作流活動完成,后一批工作流活動開始。因為工作流類(Workflow)的結 構非常簡單:classWorkflow()Private int _id; /工作流活動 IDPrivate string _name; /工作流活動名稱Private string _url; /工作流活動相應的網(wǎng)頁Private int _seq; 運行順序Private int _statusBit; /狀態(tài)位工作流活動ID不用解釋了,工作流活動名稱可是任
3、何字符,這樣是為了更 好區(qū)分工作流活動。url的設計是由INFOPATH聯(lián)想到的,微軟sharepoint2007可 以通過為每個工作流活動指定相應的編輯表單,可以是網(wǎng)頁也可以infopath設 計的表單,這樣的好處是讓工作流的不同活動具有不同的用戶界面, sharepoint2007可以在feature.xml里設置,而我這就使用url字段記錄一個網(wǎng)頁 鏈接,不同工作流活動對應不同的網(wǎng)頁。seq是每個工作流運行的順序,從零開 始,依次為0、1、2、3.,這個字段正是為了設置工作流的運行順序,并行的 工作流活動可以設置成相同的運行順序??赡苡腥藭栐趺礃俗R工作流活動已經(jīng) 完成呢,這個標識正是由
4、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), 等等。我這么做的好處是考慮到可能會有多個工作流活動只需完成其中一個活動 就情況,就像邏輯判斷中的“或”一樣,在這種情況我們只需將多個工作流活動 狀態(tài)位設置成一樣就可以達到目的了。光說而沒有實例可能有些朋友不太明白,下面我以項目中工作
5、流流程為例: 本系統(tǒng)的流程是這樣的(不好意思,linux下畫的圖效果沒visio好): 由流程圖得出各工作流實例如下:ID NAME URL SEQ STATUSBIT1申請人提交申請表user_main.aspx 0 1各部門審查 depart_check.aspx 1 2科技處審查 check_main.aspx 2 3教務處審查 check_main.aspx 2 45研究生院審查check_main.aspx 2 56 人事科審查 check_main.aspx 2 67人事處審查recheck.aspx 3 78 專家評議 expert_main.aspx 4 89完成聘用null
6、5 9想必由以上實例應該很容易看出流程圖了,看到這應該明白了吧下面是我的工作流類的c#實現(xiàn):Using System;Using System.Web;Using System.Web.Services;Using System.Web.Services.Protocols;Using System.ComponentModel;Using System.Data;Using System.Data.SqlClient;Using System.Collections.Generic;/工作流類/Public class WorkflowPrivate int _id;/工作流編號/Publi
7、c int Idgetreturn _id; set_id=value; Private string _name;/工作流名字/Public string Namegetreturn _name; set_name=value; Private string _url;/工作流使用網(wǎng)頁/Public string Urlgetreturn _url; set_url=value; Private int _seq;/工作流運行序號/Public int Seqgetreturn _seq; set_seq=value; Private int_statusBit;/狀態(tài)位/Public in
8、t 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;this.Url=url;this.Seq=seq;this.StatusBit=statusBit;Public Workflow (SqlDataReader dr)this.Id=Convert.ToInt32(drid);this.Name=drname.ToSt
9、ring();this.Url=drurl.ToString();this.Seq=Convert.ToInt32(drseq);this.StatusBit=Convert.ToInt32(drstatusBit);Public int Add()stringprocName=pr_AddWorkflow;SqlParameterprams=newSqlParameter(name,SqlDbType.NVarChar,50), newSqlParameter(url,SqlDbType.NVarChar,500),newSqlParameter(seq,SqlDbType.Int),new
10、SqlParameter(statusbit,SqlDbType.Int);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=newSqlParameter(id,SqlDbType.BigInt);prams0.Value=Id;return Database.runE
11、xecute(procName,prams);Public int Update()String procName=pr_UpdateWorkflow;SqlParameterprams=newSqlParameter(id,SqlDbType.BigInt), newSqlParameter(name,SqlDbType.NVarChar,50), newSqlParameter(url,SqlDbType.NVarChar,500), newSqlParameter(seq,SqlDbType.Int), newSqlParameter(statusbit,SqlDbType.Int);p
12、rams0.Value=Id;prams1.Value=Name;prams2.Value=Url;prams3.Value=Seq;prams4.Value=StatusBit;return Database.runExecute(procName,prams);/根據(jù)工作流編號獲得工作流信息/ 工作流編號/X 作流信息 Public static Workflow GetWorkflowById(int id)Workflow wl=new Workflow();String procName=pr_GetWorkflowById;SqlParameter prams=newSqlPara
13、meter(Id,SqlDbType.BigInt);prams0.Value=id;SqlDataReaderdr=Database.runProcGetReader(procName, prams);while(dr.Read()wl=new Workflow(dr);dr.Close();return wl;/根據(jù)工作流編號獲得工作流網(wǎng)頁地址/ 工作流編號 /X 作流網(wǎng)頁地址 Public staticstringGetWorkflowUrlById(intworkflowId)stringprocName=pr_GetWorkflowUrlById;SqlParameterprams=
14、newSqlParameter(workflowId,SqlDbType.BigInt), newSqlParameter(url,SqlDbType.NVarChar,500);prams0.Value=workflowId;prams1.Direction=ParameterDirection.Output;Database.runExecute(procName,prams);returnprams1.Value.ToString();/返回工作流個數(shù)/X 作流個數(shù) Public staticint GetWorkflowNum()String procName=pr_GetWorkfl
15、owNum;SqlParameter prams=newSqlParameter(num,SqlDbType.Int);prams0.Direction=ParameterDirection.Output;Database.runExecute(procName,prams);Return Convert.ToInt32(prams0.Value);/設置申請表的工作流完成狀態(tài)/ 申請表編號/ 工作流編號/ 完成狀態(tài) /Public static int SetActivityStatus(intreportId,intworkflowId, boolstatus)String procNam
16、e=pr_SetActivityStatus;SqlParameter prams=newSqlParameter(reportId,SqlDbType.BigInt), newSqlParameter(workflowId,SqlDbType.BigInt), newSqlParameter(status,SqlDbType.Bit);prams0.Value=reportId;prams1.Value=workflowId;prams2.Value=status;returnDatabase.runExecute(procName,prams);/獲得申請表的工作流完成狀態(tài)/ 申請表編號/
17、 工作流編號/完 成狀態(tài) publicstaticboolGetActivityStatus(intreportId,intworkflowId)String procName=pr_GetActivityStatus;SqlParameterprams=newSqlParameter(reportId,SqlDbType.BigInt), newSqlParameter(workflowId,SqlDbType.BigInt), newSqlParameter(status,SqlDbType.Bit);prams0.Value=reportId;prams1.Value=workflowI
18、d;prams2.Direction=ParameterDirection.Output;Database.runExecute(procName,prams);Return Convert.ToBoolean(prams2.Value);/獲得工作流中當前活動的下一批運行活動/ 當前活動編號 /T 一批運行活動 Public staticList GetNextWorkflow(int workflowId) Listworkflows=newList();String procName=pr_GetNextWorkflow;SqlParameterprams=newSqlParameter
19、(workflowId,SqlDbType.BigInt);prams0.Value=workflowId;SqlDataReaderdr=Database.runProcGetReader(procName, prams);while(dr.Read()Workflowwf=newWorkflow(dr);workflows.Add(wf);returnworkflows;/獲得工作流中當前活動的上一批運行活動/ 當前活動編號 / 上一批運行活動 Public staticList GetPreviousWorkflow(int workflowId) Listworkflows=newLi
20、st();stringprocName=pr_GetPreviousWorkflow;SqlParameterprams=newSqlParameter(workflowId,SqlDbType.BigInt);prams0.Value=workflowId;SqlDataReaderdr=Database.runProcGetReader(procName, prams);while(dr.Read()Workflowwf=newWorkflow(dr);workflows.Add(wf);returnworkflows;/判斷申請表進行的上一批工作流是否完成/ /publicstaticb
21、oolIsPreviousWorkflowFinished(intworkflowId,intreportId)boolflag=true;Listworkflows=newList();workflows=GetPreviousWorkflow(workflowId);foreach(Workflowwfinworkflows)stringstatus=Reports.GetCurrentStatusById(reportId);if(status.Substring(wf.StatusBit-1,1)=0)flag=false;break;returnflag;/判斷申請表進行的下一批工作
22、流是否開始/publicstaticboolIsNextWorkflowStarted(intworkflowId,int reportId)boolflag=false;Listworkflows=newList();workflows=GetNextWorkflow(workflowId);foreach(Workflowwfinworkflows)stringstatus=Reports.GetCurrentStatusById(reportId);if(status.Substring(wf.StatusBit-1,1)=1)flag=true;break;returnflag;/獲得工作流中第一個活動/M 一個活動publicstaticWorkflowGe
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國水性中光亮光劑數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國套巾數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國光纜終端分線箱數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國1,1,1-三氯乙烷數(shù)據(jù)監(jiān)測研究報告
- 2025年中國超級恒溫槽市場調(diào)查研究報告
- 2025年中國數(shù)字激光功率計市場調(diào)查研究報告
- 砌筑井的施工方案
- 2025年中國中班真皮椅市場調(diào)查研究報告
- 小學信息技術一年級上冊第 10課 《單擊移動物體》教學設計
- 2024-2025學年新教材高中數(shù)學第三章函數(shù)3.3函數(shù)的應用一學案新人教B版必修第一冊
- 八年級物理下冊《實驗題》專項練習題及答案(人教版)
- 停車場管理外包服務合同
- 5.0Mt-a煉焦煤選煤廠初步設計-畢業(yè)論文
- 2023智聯(lián)招聘行測題庫
- 中國工筆花鳥畫
- T型廣告牌預算表
- 醫(yī)療健康-泌尿生殖系統(tǒng)外科疾病主要癥狀醫(yī)學課件
- 紅樓夢英文版(楊憲益譯)
- 中國節(jié)能協(xié)會團體標準草案模板
- 招投標現(xiàn)場項目經(jīng)理答辯(完整版)資料
- 初三開學第一課家長會優(yōu)秀課件兩篇
評論
0/150
提交評論