簡單CSharp工作流地實現(xiàn)_第1頁
簡單CSharp工作流地實現(xiàn)_第2頁
簡單CSharp工作流地實現(xiàn)_第3頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

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ā)的系

2、統(tǒng)需要的工作流只是最簡單工作流應用, 因此也就有了自己 設計一個小 型工作流的想法,成就了本文,希望對大家有幫助。我設計的這個小型工作流只具有 “運行先后”這個概念,沒有其它判斷條件, 前一批工作流活動完成,后一批工作流活動開始。因為工作流類 (Workflow) 的 結(jié)構(gòu)非常簡單: classWorkflow()Private int _id; / 工作流活動 IDPrivate string _name; / 工作流活動名稱Private string _url; / 工作流活動相應的網(wǎng)頁Private int _seq; / 運行順序Private int _statusBit; / 狀

3、態(tài)位工作流活動 ID 不用解釋了,工作流活動名稱可是任何字符,這樣是為了更 好區(qū)分工作流活動。 url 的設計是由 INFOPATH 聯(lián)想到的,微軟 sharepoint2007 可以通過為每個工作流活動指定相應的編輯表單,可以是網(wǎng)頁也可以 infopath 設計的表單,這樣 的 好處是 讓 工作流 的不同活動 具有不 同的用戶界 面, 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 人事科審查

6、check_main.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;/ 工作流類/Public class Workflow Private int _id; / / 工作流編號 / Public int Idgetreturn _id; set_id=

7、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 int StatusBitgetreturn _sta

8、tusBit;set_statusBit=value;Public Workflow()Public Workflow (int id,string name,string url,int seq,intstatusBit)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.T oString();this.Seq=Convert.T

9、oInt32(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),newSqlParameter(statusbit,SqlDbType.Int);prams0.Value

10、=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.runExecute(procName,prams); Public int Update()String

11、 procName=pr_UpdateWorkflow;SqlParameterprams=new SqlParameter(id,SqlDbType.BigInt), newSqlParameter(name,SqlDbType.NVarChar,50), newSqlParameter(url,SqlDbType.NVarChar,500), newSqlParameter(seq,SqlDbType.Int), newSqlParameter(statusbit,SqlDbType.Int); prams0.Value=Id;prams1.Value=Name;prams2.Value=

12、Url;prams3.Value=Seq;prams4.Value=StatusBit;return Database.runExecute(procName,prams);/ 根據(jù)工作流編號獲得工作流信息/ 工作流編號 / 工作流信息 Public static Workflow GetWorkflowById(intid)Workflow wl=new Workflow();String procName=pr_GetWorkflowById;SqlParameter prams=newSqlParameter(Id,SqlDbType.BigInt); prams0.Value=id;S

13、qlDataReaderdr=Database.runProcGetReader(procName, prams);while(dr.Read()wl=new Workflow(dr);dr.Close();return wl;/ 根據(jù)工作流編號獲得工作流網(wǎng)頁地址/ 工作流編號 / 工作流網(wǎng)頁地址 Public staticstringGetWorkflowUrlById(intworkflowId)stringprocName=pr_GetWorkflowUrlById;SqlParameterprams=newSqlParameter(workflowId,SqlDbType.BigInt

14、),newSqlParameter(url,SqlDbType.NVarChar,500);prams0.Value=workflowId;prams1.Direction=ParameterDirection.Output;Database.runExecute(procName,prams);returnprams1.Value.ToString();/ / 返回工作流個數(shù)/ / 工作流個數(shù) Public staticint GetWorkflowNum()String procName=pr_GetWorkflowNum;SqlParameter prams=newSqlParamete

15、r(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 procName=pr_SetActivityStatus;SqlParameter

16、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)/ 申請表編號 / 工作流編號 / 完成狀態(tài) publicstaticboolGetAct

17、ivityStatus(intreportId,intworkflowId)String procName=pr_GetActivityStatus;SqlParameter(reportId,SqlDbType.BigInt), newSqlParameter(workflowId,SqlDbType.BigInt),newSqlParameter(status,SqlDbType.Bit);prams0.Value=reportId;prams1.Value=workflowId;prams2.Direction=ParameterDirection.Output;Database.run

18、Execute(procName,prams);Return Convert.ToBoolean(prams2.Value);/ 獲得工作流中當前活動的下一批運行活動/ 當前活動編號 / 下一批運行活動 Public staticList GetNextWorkflow(int workflowId)Listworkflows=newList();String procName=pr_GetNextWorkflow;SqlParameter(workflowId,SqlDbType.BigInt);prams0.Value=workflowId;SqlDataReaderdr=Database

19、.runProcGetReader(procName, prams);while(dr.Read()Workflowwf=newWorkflow(dr);workflows.Add(wf);returnworkflows;/ 獲得工作流中當前活動的上一批運行活動/ 當前活動編號 / 上一批運行活動 Public staticList GetPreviousWorkflow(int workflowId) Listworkflows=newList(); stringprocName=pr_GetPreviousWorkflow;SqlParameterprams=newSqlDataReade

20、rdr=Database.runProcGetReader(procName, prams);while(dr.Read()Workflowwf=newWorkflow(dr);workflows.Add(wf);returnworkflows;/ 判斷申請表進行的上一批工作流是否完成/ publicstaticboolIsPreviousWorkflowFinished(intworkflowId, intreportId)boolflag=true;Listworkflows=newList(); workflows=GetPreviousWorkflow(workflowId);stri

21、ngstatus=Reports.GetCurrentStatusById(reportId); if(status.Substring(wf.StatusBit-1,1)=0)flag=false;break;returnflag;/ 判斷申請表進行的下一批工作流是否開始/ / 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;/ 獲得工作流中第一個活動/ 第一個活動 publicstaticWorkflowGetFirstActivity()Wo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論