摘要:該文采用數據庫存儲數據方式以實現工作流。并將工作流設計方法運用于NET三層框架。并對其中技術進行了較為詳細的介紹。
關鍵詞:計算機軟件;三層框架;工作流
中圖分類號:TP311.1文獻標識碼:A文章編號: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
在企業信息化系統開發中,工作流開發技術使用比較普通,工作流設計是企業信息系統開發中的一個重點和難點。目前有全球性的軟件公司專門設計有工作流引擎,如微軟的Workflow,學會了設計自定義工作流,也能加深對軟件公司設計的工作流引擎的理解與運用。
1 典型業務分析
在企業管理系統中,如購物申請與審批、員工加薪申請與審批、加班申請與審批等等,都屬于工作流開發的范疇。如何自定義工作流,要在數據庫中自定義審批的級別。我們假定以學院員工請假流程進行分析。教師請假要經過教研室主任、系主任、副院長、院長、董事長逐級審批。教研室主任為5級主管,系主任為4級主管,副院長為3級主管,院長為2級主官,董事長為1級主管,將各級主管的審批級別用數據表中一列進行存儲。當從5級主管審批轉換為4級主管時,對表執行更新操作,可以將審批記錄存入表中,工作流程圖如圖1。
2 模塊設計
2.1 UML圖設計
界面類FrmMain,主要功能執行請假審批操作。請假審批操作調用事件btnAgree_Click,將數據信息傳入DataAccass類,經其處理后,再將數據信息傳入類SqlHelper中去,執行請假審批操作。如圖2所示。
界面類FrmInsertLeave主要功能實現請假信息插入操作。請假信息插入操作調用事件btnInsertLR_Click,將數據信息傳DataAccass類,經其處理后,再將數據信息傳入類SqlHelper中去,執行請假信息插入操作。如圖3所示。
我們按照三層結構思想進行設計。分別分為數據層、業務層、界面UI層。
2.2 三層框架設計
2.2.1 界面UI設計
2.2.1.1 請假審批界面
當管理人員登陸后,進行如下圖的審批界面,如果有你要審批的請假消息時,便在請假編號列表框中顯示出來,點擊列表框中某一編號,便將相應的信息顯示在對應的文本框中。選擇是否同意準假下拉框,點擊“同意申請”按鈕時,便將相關信息存入數據庫中。同時刷新頁面,請假員工編號數量減去1個。
2.2.1.2 錄入員工請假信息界面
當點擊圖1的按鈕錄入員工請假信息按鈕后,即彈出如圖5所示的對話框。選擇員工姓名、請假類型、請假開始時間和結束時間,單擊插入請假消息按鈕,便能將員工的請假消息插入到后臺的數據庫中去。
2.2.2 數據層設計
在進行企業信息系統的開發中,可以用存儲過程封裝復雜的業務。由三個存儲過程實現了審批工作流的主要功能。
2.2.2.1 確定審批等級
根據請假的天數確定由哪一級別審批。可以創建一個存儲過程,輸入要請假的天數,經過存儲過程計算,獲取由哪一級審批。存儲過程代碼如下:
create proc selConfigLeave
(
@inputDay int--輸入要請假的天數
)
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
--根據輸入的天數@addval獲取批的級別Flows_Level
select Flows_Level from dbo.LEAVE_FLOWS_CONFIG where Flows_Days=@addval
end
2.2.2.2 定義請假審批工作流程
假定每次對審批等級進行遞增,由5級主管審批完成后傳遞到4級主管,由4級主管審批完成后傳遞--到3級主管,以此類推。存儲過程updateLC是實現代碼。如下所示:
create proc updateLC
(
--傳入要審批的記錄
@leaveid int,
--能否繼續審批,如果為2,則終止審批
@check_type int
)
AS
begin
--聲明要審批的等級
declare @employee_level int
--給聲明的審批等級賦值
select @employee_level=check_employee_level from dbo.LEAVE_CHECK where leave_bill_id=@leaveid
--如果員工的審批等級不為空值
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 處理的批假事宜
員工登陸后,進行權限分配。如果是管理員,可以處理要請假的員工。以下存儲過程的功能是傳入員工編號@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
限于篇幅,其余存儲過程略
2.2.3 業務層設計
2.2.3.1 建立數據庫共用類SqlHelper
建立一個共公類SqlHelper,其主要功能是實現與數據庫交互時方法的重構與封裝,實現對數據庫進行增加、刪除、修改操作。
方法一. ExecuteNonQuery。在不使用事務時對數據庫進行增加、修改、刪除操作,其中,connectionStringg表示連接字符串;cmdType表示命令類型,主要為存儲過程或文本類型;cmdText為T-SQL語句或存儲過程名稱; commandParameters為參數數組。其方法代碼如下:
public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters){}
方法二. ExecuteNonQuery。與方法一同名,使用ADO.NET事務對數據庫進行增加、修改、刪除操作,其余上一個方法相同。其方法代碼如下:
public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters){}
方法三. PrepareCommand。繼續實現方法一與方法二沒有完成的操作。方法參數的含義與上一方法相同。其方法代碼如下:
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) { }
方法四. ExecuteScalar。返回數據庫表中的首行首列,connectionString表示連接字符串, cmdType表示命令類型,取值可能為存儲過程StoredProcedure或文本Text, cmdText表示T-SQL語句或存儲過程名稱,commandParameters表示參數數組。代碼如下:
public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {}
方法五. ExecuteReader。返回一個閱讀類的對象。方法中的參數connectionString表示連接字符串, cmdType表示命令類型,取值可能為存儲過程StoredProcedure或文本Text,cmdText表示T-SQL語句或存儲過程名稱,commandParameters表示參數數組。代碼如下:
public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters){}
2.2.3.2 建立數據庫操作類DataAccass
類DataAccass功能主要負責向數據庫共用類SqlHelper傳送參數,然后再向數據庫傳遞信息,實現對數據庫的增、刪、改、查操作。
3 結束語
該文提供了用數據庫存取數據的方法,實現了工作流,并把這種設計方法運用于NET三層框。文中的業務層對數據庫的增刪改查功能進行了封裝,以便于開發人員對信息系統進行重用和性能拓展。
參考文獻:
[1] 吳平貴.VC#.NET數據庫應用程序設計[M].大連:大連理工大學出版社,2009.
[2] 布科威茨.WF高級程序設計[M].柴曉偉,譯.北京:人民郵電出版社,2009.
[3] 蔡中民,方黨生.SQL SERVER實用教程[M].4版.北京:電子工業出版社,2005.