資源描述:
《net中的報(bào)銷多級(jí)審批工作流》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、asp.net中的報(bào)銷多級(jí)審批工作流最近正在學(xué)習(xí)工作流,正好從網(wǎng)上搜索到一個(gè)Asp.net工作流(WWF+LINQ)的例子,之前學(xué)習(xí)MOSS時(shí)接觸過(guò)工作流,不過(guò)那是針對(duì)MOSS的工作流,我一直從事B/S架構(gòu)開(kāi)發(fā),知道工作流可用于很多環(huán)境,其中就包含asp.net,這讓我非常想做一個(gè)這樣的實(shí)例??戳怂脑创a,大部分都覺(jué)的非常不錯(cuò),不過(guò)也有些個(gè)人認(rèn)為不太滿意的地方,這可能是因?yàn)樽髡呖紤]到只是一個(gè)簡(jiǎn)單的demo,沒(méi)有必要注意一些非技術(shù)方面的細(xì)節(jié)問(wèn)題。項(xiàng)目介紹:一個(gè)報(bào)銷二級(jí)審批工作流,數(shù)據(jù)層操作采用LINQTOSQL,雖然MS不再發(fā)展示它。第一級(jí):?jiǎn)T工提交報(bào)銷表給PM(經(jīng)理),如果數(shù)目大于100
2、0RMB,經(jīng)理如果選擇通過(guò)審批,工作流會(huì)到副總的二級(jí)審批,同時(shí)經(jīng)理可以直接選擇拒絕。第二級(jí):PV(副總),副總收到PM的審批后,可以選擇通過(guò)或者是拒絕,如果通過(guò),工作流會(huì)提交到財(cái)務(wù)。由財(cái)務(wù)最后結(jié)束工作流。流程圖如下:我創(chuàng)建的工作流與原作者的源碼有以下幾點(diǎn)不同:1:原文的工作流采用的是狀態(tài)機(jī)工作流,而這里我采用順序工作流。2:把數(shù)據(jù)操作部分和業(yè)務(wù)邏輯以及頁(yè)面層功能完全分開(kāi),即,只要是和數(shù)據(jù)訪問(wèn),操作相關(guān)的代碼只允許出現(xiàn)在數(shù)據(jù)處理層中,而業(yè)務(wù)邏輯層以及頁(yè)面層均不允許,頁(yè)面層只和業(yè)務(wù)邏輯層溝通,不允許直接訪問(wèn)數(shù)據(jù)處理層。3:工程的命名上有改動(dòng),例如:解決方案名稱:ApproveWorkFlow
3、,頁(yè)面層叫ApproveWorkFlow.Web。4:對(duì)相關(guān)的方法做了適當(dāng)?shù)母倪M(jìn)。5:增加方法以及文檔注釋。項(xiàng)目結(jié)構(gòu)圖如下:項(xiàng)目結(jié)構(gòu)說(shuō)明:1:ApproveWorkFlow.BLL:業(yè)務(wù)邏輯層。2:ApproveWorkFlow.Common,可以放些常用的方法,就是常說(shuō)的工具類。3:ApproveWorkFlow.DAL,數(shù)據(jù)處理層,數(shù)據(jù)的增刪改查。4:ApproveWorkFlow.Data,數(shù)據(jù)庫(kù)的連接類,這里我放了一個(gè)dbml文件。5:ApproveWorkFlow.Model,實(shí)體類。6:ApproveWorkFlow.MyInterface,接口層。7:ApproveWork
4、Flow.MyWorkFlow,工作流。8:ApproveWorkFlow.Web,頁(yè)面層。WF中的持久化服務(wù):SqlWorkflowPersistenceService是WF框架中的一個(gè)SQL持久性服務(wù)(支持SQLServer2005)。在安裝DotNet時(shí)并不會(huì)自動(dòng)安裝此類所需要的數(shù)據(jù)庫(kù)。要正確使用此類必需執(zhí)行以下步驟:1:打開(kāi)SqlServerManagementStuio。2:新建一個(gè)數(shù)據(jù)庫(kù)SqlPersistenceService,這個(gè)名字可以更改。3:執(zhí)行相關(guān)數(shù)據(jù)庫(kù)腳本:1:%WINDOWS%"Microsoft.NET"Framework"v3.0"WindowsWorkf
5、lowFoundation"SQL"EN"SqlPersistenceService_Schema.sql。2:%WINDOWS%"Microsoft.NET"Framework"v3.0"WindowsWorkflowFoundation"SQL"EN"SqlPersistenceService_Logic.sql。創(chuàng)建報(bào)銷審批工作流:1:在設(shè)計(jì)面板中拉一個(gè)WhileActivity;2:在代碼中加入一個(gè)屬性,標(biāo)記while的執(zhí)行條件:!this.IsCompleted//////工作流的while條件///privateBooleanisComp
6、leted=false;publicBooleanIsCompleted{get{returnisCompleted;}set{isCompleted=value;}}復(fù)制代碼3:拉一個(gè)SequenceActivity。4:再放一個(gè)ListenActivity,也叫單線觸發(fā)容器,使用EventDrivenActivity作為分支容器,當(dāng)某條分支中的結(jié)點(diǎn)執(zhí)行完成后,該ListenActivity結(jié)點(diǎn)就結(jié)束,繼續(xù)向下執(zhí)行,其他分支內(nèi)的結(jié)點(diǎn)就不執(zhí)行了,它不能應(yīng)用于狀態(tài)機(jī)工作流。5:加入所有的EventDrivenActivity。6:創(chuàng)建一個(gè)供EventDrivenActivity用的接口IA
7、pprove//////這個(gè)接口標(biāo)示為"ExternalDataExchange",目的是供工作流調(diào)用///[ExternalDataExchange]publicinterfaceIApprove{//////員工提交報(bào)銷記錄事件///eventEventHandlerOnStaffSubmit;///