摘要:該文采用數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)方式以實(shí)現(xiàn)工作流。并將工作流設(shè)計(jì)方法運(yùn)用于NET三層框架。并對(duì)其中技術(shù)進(jìn)行了較為詳細(xì)的介紹。
關(guān)鍵詞:計(jì)算機(jī)軟件;三層框架;工作流
中圖分類號(hào):TP311.1文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)36-10576-03
Based on Three-tier Framework for Workflow Design Method
WU Ping-gui
(Chongqing Zhengda Software Vocational and Technical College, Chongqing 400056, China)
Abstract: In this paper, a database to store to data in order to achieve workflow. And workflow design methods used in the three-tier NET Framework. And in which technology was a more detailed introduction.
Key words: computer software; three-tier framework; workflow
在企業(yè)信息化系統(tǒng)開(kāi)發(fā)中,工作流開(kāi)發(fā)技術(shù)使用比較普通,工作流設(shè)計(jì)是企業(yè)信息系統(tǒng)開(kāi)發(fā)中的一個(gè)重點(diǎn)和難點(diǎn)。目前有全球性的軟件公司專門設(shè)計(jì)有工作流引擎,如微軟的Workflow,學(xué)會(huì)了設(shè)計(jì)自定義工作流,也能加深對(duì)軟件公司設(shè)計(jì)的工作流引擎的理解與運(yùn)用。
1 典型業(yè)務(wù)分析
在企業(yè)管理系統(tǒng)中,如購(gòu)物申請(qǐng)與審批、員工加薪申請(qǐng)與審批、加班申請(qǐng)與審批等等,都屬于工作流開(kāi)發(fā)的范疇。如何自定義工作流,要在數(shù)據(jù)庫(kù)中自定義審批的級(jí)別。我們假定以學(xué)院?jiǎn)T工請(qǐng)假流程進(jìn)行分析。教師請(qǐng)假要經(jīng)過(guò)教研室主任、系主任、副院長(zhǎng)、院長(zhǎng)、董事長(zhǎng)逐級(jí)審批。教研室主任為5級(jí)主管,系主任為4級(jí)主管,副院長(zhǎng)為3級(jí)主管,院長(zhǎng)為2級(jí)主官,董事長(zhǎng)為1級(jí)主管,將各級(jí)主管的審批級(jí)別用數(shù)據(jù)表中一列進(jìn)行存儲(chǔ)。當(dāng)從5級(jí)主管審批轉(zhuǎn)換為4級(jí)主管時(shí),對(duì)表執(zhí)行更新操作,可以將審批記錄存入表中,工作流程圖如圖1。
2 模塊設(shè)計(jì)
2.1 UML圖設(shè)計(jì)
界面類FrmMain,主要功能執(zhí)行請(qǐng)假審批操作。請(qǐng)假審批操作調(diào)用事件btnAgree_Click,將數(shù)據(jù)信息傳入DataAccass類,經(jīng)其處理后,再將數(shù)據(jù)信息傳入類SqlHelper中去,執(zhí)行請(qǐng)假審批操作。如圖2所示。
界面類FrmInsertLeave主要功能實(shí)現(xiàn)請(qǐng)假信息插入操作。請(qǐng)假信息插入操作調(diào)用事件btnInsertLR_Click,將數(shù)據(jù)信息傳DataAccass類,經(jīng)其處理后,再將數(shù)據(jù)信息傳入類SqlHelper中去,執(zhí)行請(qǐng)假信息插入操作。如圖3所示。
我們按照三層結(jié)構(gòu)思想進(jìn)行設(shè)計(jì)。分別分為數(shù)據(jù)層、業(yè)務(wù)層、界面UI層。
2.2 三層框架設(shè)計(jì)
2.2.1 界面UI設(shè)計(jì)
2.2.1.1 請(qǐng)假審批界面
當(dāng)管理人員登陸后,進(jìn)行如下圖的審批界面,如果有你要審批的請(qǐng)假消息時(shí),便在請(qǐng)假編號(hào)列表框中顯示出來(lái),點(diǎn)擊列表框中某一編號(hào),便將相應(yīng)的信息顯示在對(duì)應(yīng)的文本框中。選擇是否同意準(zhǔn)假下拉框,點(diǎn)擊“同意申請(qǐng)”按鈕時(shí),便將相關(guān)信息存入數(shù)據(jù)庫(kù)中。同時(shí)刷新頁(yè)面,請(qǐng)假員工編號(hào)數(shù)量減去1個(gè)。
2.2.1.2 錄入員工請(qǐng)假信息界面
當(dāng)點(diǎn)擊圖1的按鈕錄入員工請(qǐng)假信息按鈕后,即彈出如圖5所示的對(duì)話框。選擇員工姓名、請(qǐng)假類型、請(qǐng)假開(kāi)始時(shí)間和結(jié)束時(shí)間,單擊插入請(qǐng)假消息按鈕,便能將員工的請(qǐng)假消息插入到后臺(tái)的數(shù)據(jù)庫(kù)中去。
2.2.2 數(shù)據(jù)層設(shè)計(jì)
在進(jìn)行企業(yè)信息系統(tǒng)的開(kāi)發(fā)中,可以用存儲(chǔ)過(guò)程封裝復(fù)雜的業(yè)務(wù)。由三個(gè)存儲(chǔ)過(guò)程實(shí)現(xiàn)了審批工作流的主要功能。
2.2.2.1 確定審批等級(jí)
根據(jù)請(qǐng)假的天數(shù)確定由哪一級(jí)別審批??梢詣?chuàng)建一個(gè)存儲(chǔ)過(guò)程,輸入要請(qǐng)假的天數(shù),經(jīng)過(guò)存儲(chǔ)過(guò)程計(jì)算,獲取由哪一級(jí)審批。存儲(chǔ)過(guò)程代碼如下:
create proc selConfigLeave
(
@inputDay int--輸入要請(qǐng)假的天數(shù)
)
as
begin
declare @diff int
declare @addval int
if(@inputDay<=10)
begin
select @diff=min(abs(@inputDay-Flows_Days)) from dbo.LEAVE_FLOWS_CONFIG
set @addval=@inputDay+@diff
end
else
begin
set @addval=10
end
--根據(jù)輸入的天數(shù)@addval獲取批的級(jí)別Flows_Level
select Flows_Level from dbo.LEAVE_FLOWS_CONFIG where Flows_Days=@addval
end
2.2.2.2 定義請(qǐng)假審批工作流程
假定每次對(duì)審批等級(jí)進(jìn)行遞增,由5級(jí)主管審批完成后傳遞到4級(jí)主管,由4級(jí)主管審批完成后傳遞--到3級(jí)主管,以此類推。存儲(chǔ)過(guò)程updateLC是實(shí)現(xiàn)代碼。如下所示:
create proc updateLC
(
--傳入要審批的記錄
@leaveid int,
--能否繼續(xù)審批,如果為2,則終止審批
@check_type int
)
AS
begin
--聲明要審批的等級(jí)
declare @employee_level int
--給聲明的審批等級(jí)賦值
select @employee_level=check_employee_level from dbo.LEAVE_CHECK where leave_bill_id=@leaveid
--如果員工的審批等級(jí)不為空值
if(@employee_level>0)
begin
UPDATE dbo.LEAVE_CHECK set
check_employee_level=check_employee_level-1,check_type=@check_type
where check_type=1 and leave_bill_id=@leaveid
end
end
2.2.2.3 處理的批假事宜
員工登陸后,進(jìn)行權(quán)限分配。如果是管理員,可以處理要請(qǐng)假的員工。以下存儲(chǔ)過(guò)程的功能是傳入員工編號(hào)@empid,顯示自己要處理批假事宜。
create proc GetLeave
(
@empid int
)
as
begin
DECLARE @checkLevel int
select @checkLevel=DutyID from dbo.Employee
where EmpID=@empid
SELECT * FROM dbo.GETLeaveALL WHERE check_employee_level=@checkLevel
end
限于篇幅,其余存儲(chǔ)過(guò)程略
2.2.3 業(yè)務(wù)層設(shè)計(jì)
2.2.3.1 建立數(shù)據(jù)庫(kù)共用類SqlHelper
建立一個(gè)共公類SqlHelper,其主要功能是實(shí)現(xiàn)與數(shù)據(jù)庫(kù)交互時(shí)方法的重構(gòu)與封裝,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)進(jìn)行增加、刪除、修改操作。
方法一. ExecuteNonQuery。在不使用事務(wù)時(shí)對(duì)數(shù)據(jù)庫(kù)進(jìn)行增加、修改、刪除操作,其中,connectionStringg表示連接字符串;cmdType表示命令類型,主要為存儲(chǔ)過(guò)程或文本類型;cmdText為T-SQL語(yǔ)句或存儲(chǔ)過(guò)程名稱; commandParameters為參數(shù)數(shù)組。其方法代碼如下:
public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters){}
方法二. ExecuteNonQuery。與方法一同名,使用ADO.NET事務(wù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行增加、修改、刪除操作,其余上一個(gè)方法相同。其方法代碼如下:
public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters){}
方法三. PrepareCommand。繼續(xù)實(shí)現(xiàn)方法一與方法二沒(méi)有完成的操作。方法參數(shù)的含義與上一方法相同。其方法代碼如下:
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) { }
方法四. ExecuteScalar。返回?cái)?shù)據(jù)庫(kù)表中的首行首列,connectionString表示連接字符串, cmdType表示命令類型,取值可能為存儲(chǔ)過(guò)程StoredProcedure或文本Text, cmdText表示T-SQL語(yǔ)句或存儲(chǔ)過(guò)程名稱,commandParameters表示參數(shù)數(shù)組。代碼如下:
public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {}
方法五. ExecuteReader。返回一個(gè)閱讀類的對(duì)象。方法中的參數(shù)connectionString表示連接字符串, cmdType表示命令類型,取值可能為存儲(chǔ)過(guò)程StoredProcedure或文本Text,cmdText表示T-SQL語(yǔ)句或存儲(chǔ)過(guò)程名稱,commandParameters表示參數(shù)數(shù)組。代碼如下:
public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters){}
2.2.3.2 建立數(shù)據(jù)庫(kù)操作類DataAccass
類DataAccass功能主要負(fù)責(zé)向數(shù)據(jù)庫(kù)共用類SqlHelper傳送參數(shù),然后再向數(shù)據(jù)庫(kù)傳遞信息,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的增、刪、改、查操作。
3 結(jié)束語(yǔ)
該文提供了用數(shù)據(jù)庫(kù)存取數(shù)據(jù)的方法,實(shí)現(xiàn)了工作流,并把這種設(shè)計(jì)方法運(yùn)用于NET三層框。文中的業(yè)務(wù)層對(duì)數(shù)據(jù)庫(kù)的增刪改查功能進(jìn)行了封裝,以便于開(kāi)發(fā)人員對(duì)信息系統(tǒng)進(jìn)行重用和性能拓展。
參考文獻(xiàn):
[1] 吳平貴.VC#.NET數(shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)[M].大連:大連理工大學(xué)出版社,2009.
[2] 布科威茨.WF高級(jí)程序設(shè)計(jì)[M].柴曉偉,譯.北京:人民郵電出版社,2009.
[3] 蔡中民,方黨生.SQL SERVER實(shí)用教程[M].4版.北京:電子工業(yè)出版社,2005.