簡(jiǎn)單 C Sharp工作流的實(shí)現(xiàn)_第1頁(yè)
簡(jiǎn)單 C Sharp工作流的實(shí)現(xiàn)_第2頁(yè)
簡(jiǎn)單 C Sharp工作流的實(shí)現(xiàn)_第3頁(yè)
簡(jiǎn)單 C Sharp工作流的實(shí)現(xiàn)_第4頁(yè)
簡(jiǎn)單 C Sharp工作流的實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一個(gè)簡(jiǎn)單一個(gè)簡(jiǎn)單C #工作流的實(shí)現(xiàn)最近一直在做一個(gè)小項(xiàng)目,這個(gè)項(xiàng)目是高等學(xué)校崗位聘用審核系統(tǒng),該系統(tǒng) 涉及到多個(gè)部門(mén)審批,同時(shí)還要求管理員能對(duì)審核部門(mén)進(jìn)行管理,編輯、添加和 刪除等。在了解到這些系統(tǒng)需要后,我首先想到利用微軟sharepoint2007來(lái)開(kāi)發(fā), 畢竟微軟的工作流引擎已經(jīng)非常成熟了,而且讓人有種站在巨人肩膀的感覺(jué)(HoHo)。經(jīng)過(guò)一段時(shí)間對(duì) sharepoint2007 的學(xué)習(xí),這套系統(tǒng)實(shí)在是太大了,而早幾個(gè)月前這套系統(tǒng)在國(guó)內(nèi)幾乎沒(méi)有一本成形 的開(kāi)發(fā)書(shū)籍,只有系統(tǒng)管理類(lèi)書(shū)籍,常因?yàn)橐粋€(gè)問(wèn)題而耽誤好幾天,整個(gè)開(kāi)發(fā)就這樣停滯了, 后來(lái)仔細(xì)想想其實(shí)我所開(kāi)發(fā)的系統(tǒng)需要的工作流只是最簡(jiǎn)單工

2、作流應(yīng)用,因此也就有了自己 設(shè)計(jì)一個(gè)小型工作流的想法,成就了本文,希望對(duì)大家有幫助。我設(shè)計(jì)的這個(gè)小型工作流只具有“運(yùn)行先后”這個(gè)概念,沒(méi)有其它判斷條件, 前一批工作流活動(dòng)完成,后一批工作流活動(dòng)開(kāi)始。因?yàn)楣ぷ髁黝?lèi)(Workflow)的結(jié) 構(gòu)非常簡(jiǎn)單:classWorkflow()Private int _id; /工作流活動(dòng) IDPrivate string _name; /工作流活動(dòng)名稱(chēng)Private string _url; /工作流活動(dòng)相應(yīng)的網(wǎng)頁(yè)P(yáng)rivate int _seq; 運(yùn)行順序Private int _statusBit; /狀態(tài)位工作流活動(dòng)ID不用解釋了,工作流活動(dòng)名稱(chēng)可是任

3、何字符,這樣是為了更 好區(qū)分工作流活動(dòng)。url的設(shè)計(jì)是由INFOPATH聯(lián)想到的,微軟sharepoint2007可 以通過(guò)為每個(gè)工作流活動(dòng)指定相應(yīng)的編輯表單,可以是網(wǎng)頁(yè)也可以infopath設(shè) 計(jì)的表單,這樣的好處是讓工作流的不同活動(dòng)具有不同的用戶(hù)界面, sharepoint2007可以在feature.xml里設(shè)置,而我這就使用url字段記錄一個(gè)網(wǎng)頁(yè) 鏈接,不同工作流活動(dòng)對(duì)應(yīng)不同的網(wǎng)頁(yè)。seq是每個(gè)工作流運(yùn)行的順序,從零開(kāi) 始,依次為0、1、2、3.,這個(gè)字段正是為了設(shè)置工作流的運(yùn)行順序,并行的 工作流活動(dòng)可以設(shè)置成相同的運(yùn)行順序??赡苡腥藭?huì)問(wèn)怎么標(biāo)識(shí)工作流活動(dòng)已經(jīng) 完成呢,這個(gè)標(biāo)識(shí)正是由

4、statusBit狀態(tài)位來(lái)實(shí)現(xiàn)的,每個(gè)申請(qǐng)表中都含有一個(gè) status字段,這個(gè)字段默認(rèn)為50個(gè)0組成的字符串,status字段是為了記錄 當(dāng)前申請(qǐng)表哪些工作流活動(dòng)完成了,1為完成0為未完成,statusBit狀態(tài)位正是 將工作流活動(dòng)與申請(qǐng)表中的狀態(tài)聯(lián)系起來(lái),也許有些朋友會(huì)認(rèn)為讓系統(tǒng)自動(dòng)分配 好更好,第一個(gè)工作流活動(dòng)聯(lián)系第一位狀態(tài),第二個(gè)工作流活動(dòng)聯(lián)系第二位狀態(tài), 等等。我這么做的好處是考慮到可能會(huì)有多個(gè)工作流活動(dòng)只需完成其中一個(gè)活動(dòng) 就情況,就像邏輯判斷中的“或”一樣,在這種情況我們只需將多個(gè)工作流活動(dòng) 狀態(tài)位設(shè)置成一樣就可以達(dá)到目的了。光說(shuō)而沒(méi)有實(shí)例可能有些朋友不太明白,下面我以項(xiàng)目中工作

5、流流程為例: 本系統(tǒng)的流程是這樣的(不好意思,linux下畫(huà)的圖效果沒(méi)visio好): 由流程圖得出各工作流實(shí)例如下:ID NAME URL SEQ STATUSBIT1申請(qǐng)人提交申請(qǐng)表user_main.aspx 0 1各部門(mén)審查 depart_check.aspx 1 2科技處審查 check_main.aspx 2 3教務(wù)處審查 check_main.aspx 2 45研究生院審查check_main.aspx 2 56 人事科審查 check_main.aspx 2 67人事處審查recheck.aspx 3 78 專(zhuān)家評(píng)議 expert_main.aspx 4 89完成聘用null

6、5 9想必由以上實(shí)例應(yīng)該很容易看出流程圖了,看到這應(yīng)該明白了吧下面是我的工作流類(lèi)的c#實(shí)現(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;/工作流類(lèi)/Public class WorkflowPrivate int _id;/工作流編號(hào)/Publi

7、c int Idgetreturn _id; set_id=value; Private string _name;/工作流名字/Public string Namegetreturn _name; set_name=value; Private string _url;/工作流使用網(wǎng)頁(yè)/Public string Urlgetreturn _url; set_url=value; Private int _seq;/工作流運(yùn)行序號(hào)/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ù)工作流編號(hào)獲得工作流信息/ 工作流編號(hào)/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ù)工作流編號(hào)獲得工作流網(wǎng)頁(yè)地址/ 工作流編號(hào) /X 作流網(wǎng)頁(yè)地址 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();/返回工作流個(gè)數(shù)/X 作流個(gè)數(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);/設(shè)置申請(qǐng)表的工作流完成狀態(tài)/ 申請(qǐng)表編號(hào)/ 工作流編號(hào)/ 完成狀態(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);/獲得申請(qǐng)表的工作流完成狀態(tài)/ 申請(qǐng)表編號(hào)/

17、 工作流編號(hào)/完 成狀態(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);/獲得工作流中當(dāng)前活動(dòng)的下一批運(yùn)行活動(dòng)/ 當(dāng)前活動(dòng)編號(hào) /T 一批運(yùn)行活動(dòng) 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;/獲得工作流中當(dāng)前活動(dòng)的上一批運(yùn)行活動(dòng)/ 當(dāng)前活動(dòng)編號(hào) / 上一批運(yùn)行活動(dòng) 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;/判斷申請(qǐng)表進(jìn)行的上一批工作流是否完成/ /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;/判斷申請(qǐng)表進(jìn)行的下一批工作

22、流是否開(kāi)始/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;/獲得工作流中第一個(gè)活動(dòng)/M 一個(gè)活動(dòng)publicstaticWorkflowGe

溫馨提示

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

評(píng)論

0/150

提交評(píng)論