實例演示使用RDIFramework.NET 框架的工作流組件
創(chuàng)新互聯(lián)公司擁有十年成都網(wǎng)站建設(shè)工作經(jīng)驗,為各大企業(yè)提供成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)服務(wù),對于網(wǎng)頁設(shè)計、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、重慶App定制開發(fā)、wap網(wǎng)站建設(shè)(手機版網(wǎng)站建設(shè))、程序開發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、域名注冊等,憑借多年來在互聯(lián)網(wǎng)的打拼,我們在互聯(lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)絡(luò)營銷經(jīng)驗,集策劃、開發(fā)、設(shè)計、營銷、管理等網(wǎng)站化運作于一體,具備承接各種規(guī)模類型的網(wǎng)站建設(shè)項目的能力。
進行業(yè)務(wù)流程的定義—請假申請流程-Web
參考文章:
RDIFramework.NET — 基于.NET的快速信息化系統(tǒng)開發(fā)框架 — 系列目錄
RDIFramework.NET ━ .NET快速信息化系統(tǒng)開發(fā)框架 ━ 工作流程組件介紹
RDIFramework.NET ━ .NET快速信息化系統(tǒng)開發(fā)框架 ━ 工作流程組件Web業(yè)務(wù)平臺
RDIFramework.NET ━ .NET快速信息化系統(tǒng)開發(fā)框架 ━ 工作流程組件WinForm業(yè)務(wù)平臺
實例演示使用RDIFramework.NET 框架的工作流組件進行業(yè)務(wù)流程的定義-請假申請流程-WinForm
RDIFramework.NET工作流程組件是以RDIFramework.NET框架為支撐,根據(jù)我們多年的項目經(jīng)驗和項目實踐,結(jié)合國內(nèi)各大工作流產(chǎn)品的特點研發(fā)的一套流程管理組件。該組件不僅考慮到從零搭建業(yè)務(wù)系統(tǒng),也考慮到與現(xiàn)有業(yè)務(wù)系統(tǒng)的整合。從零搭建系統(tǒng)我們可以使用RDIFramework.NET框架以基礎(chǔ),來快速搭建業(yè)務(wù)系統(tǒng)。與現(xiàn)有系統(tǒng)的整合,我們的流程引擎提供了豐富的功能接口,供三方業(yè)務(wù)系統(tǒng)調(diào)用,并提供組件的全部源碼方便用戶進行整合。RDIFramework.NET工作流程組件采用SOA架構(gòu)模式,流程引擎支持WCF方式訪問。支持B/S、C/S系統(tǒng),同時支持SQLServer、ORACLE等主流數(shù)據(jù)庫。
RDIFramework.NET━工作流組件主要涵蓋工作流的設(shè)計與定義、流程實例的發(fā)起與運行、業(yè)務(wù)流程的監(jiān)控與管理、工作流組件與業(yè)務(wù)系統(tǒng)的集成與協(xié)作等內(nèi)容。
員工請假流程在企業(yè)各大信息化系統(tǒng)中基本都會涉及到,本文我將向大家展示使用RDIFramework.NET工作流組件來自定義員工請假流程。目前的請假業(yè)務(wù)流程要求是這樣的:
員工請假首先要提交至請假人所在部門的“部分經(jīng)理”審批,如果請假天數(shù)小于等于3天則“部門經(jīng)理”有權(quán)直接審批,否則需要提交至“分公司總經(jīng)理”審批。
請假申請業(yè)務(wù)流程我們已經(jīng)清晰,現(xiàn)在我們使用RDIFramework.NET框架進行請假申請的定義。最終提供的請假流程如下圖所示:
現(xiàn)在請假申請的整個流程的定義我們算完成了,下面我們就開始開發(fā)請假表單,表單開發(fā)非常簡單,我們可以按常規(guī)的開發(fā)表單的方式進行開發(fā),再加載到框架下即可。開發(fā)表單前我們需要在數(shù)據(jù)庫中建立請假單這個數(shù)據(jù)表。同時表中需要包含以下四個字段:WorkFlowId(工作流主鍵)、WorkFlowInsId(工作流實例主鍵)、WorkTaskId(工作任務(wù)主鍵)、WorkTaskInsId(工作任務(wù)實例主鍵)。如下圖所示:
表定義好了,現(xiàn)在我們就要進行業(yè)務(wù)表單的開發(fā)了,業(yè)務(wù)表單是指在流程中使用的表單,表單文件的界面一般分2種類型:編輯界面和查詢界面,編輯界面是指新建和修改信息的界面;查詢界面是指查詢表單數(shù)據(jù)的界面,二者的區(qū)別是前者有輸入?yún)^(qū)后者沒有輸入?yún)^(qū)。二者也可以在同一個表單中實現(xiàn),通過設(shè)置表單的狀態(tài)(查看、修改、新建)來控制頁面的可編輯性。表單的樣式、設(shè)計可以根據(jù)自己的偏好進行設(shè)置,沒有特殊要求。只要與其他模塊協(xié)調(diào)一至即可。
打開VS,開發(fā)請假申請表單(說明一下,開發(fā)的方式有很多種,這兒只是為了方便說明,做得簡單一些,可以自己擴展),如下圖所示:
再編寫表單代碼,在代碼中可以自由實現(xiàn)表單的業(yè)務(wù)邏輯,非常的靈活。同時流程的業(yè)務(wù)表單只需要繼承自我們已經(jīng)實現(xiàn)的基類(BaseUserControl)即可,再重載相應(yīng)的方法。下面給了整個請假申請的業(yè)務(wù)表單實現(xiàn)代碼以供參考,如下所示:
using System; using System.Data; namespace RDIFramework.WebApp.BizModules { using RDIFramework.BizLogic; using RDIFramework.Utilities; public partial class UCQingJia : BaseUserControl { protected void Page_Load(object sender, EventArgs e) { base.Page_Load(); if (!IsPostBack) { InitData(); } } ////// 表單數(shù)據(jù)展現(xiàn),考慮表單退回重新處理和保存草稿的情況 /// /// private void InitData() { string sql = "select * from testQingjia where workflowinsId=@workflowinsId"; var sqlBuilder = new SQLBuilder(this.WorkFlowDbProvider); sqlBuilder.BeginSelect("testQingjia"); sqlBuilder.SetWhere("workflowinsId", WorkFlowInsId); DataTable dt = sqlBuilder.EndSelect(); if (dt != null && dt.Rows.Count > 0)//判斷是否有數(shù)據(jù),有數(shù)據(jù)讀取數(shù)據(jù)庫中的值 { lbUserId.Text = dt.Rows[0]["userid"].ToString(); lbUserName.Text = dt.Rows[0]["userName"].ToString(); lbDutyCaption.Text = dt.Rows[0]["dutyCaption"].ToString(); lbArchCaption.Text = dt.Rows[0]["archCaption"].ToString(); tbxStartTime.Value = dt.Rows[0]["beginTime"].ToString(); tbxEndTime.Value = dt.Rows[0]["endTime"].ToString(); tbxDays.Text = dt.Rows[0]["Days"].ToString(); tbxQingjia.Text = dt.Rows[0]["QingJia"].ToString(); dplType.Text = dt.Rows[0]["QingJiaType"].ToString(); } else//如果沒有數(shù)據(jù),初始化默認值 { lbUserId.Text = UserId; lbUserName.Text = UserName; lbDutyCaption.Text = DutyCaption; lbArchCaption.Text = ArchCaption; tbxStartTime.Value = DateTime.Now.ToShortDateString(); tbxEndTime.Value = DateTime.Now.ToShortDateString(); } } ////// 表單數(shù)據(jù)提交,避免重復(fù)提交 /// public override void SaveUserControl(bool IsDraft) { base.SaveUserControl(IsDraft); var sqlBuilder = new SQLBuilder(this.WorkFlowDbProvider); string sql = "DELETE TESTQINGJIA WHERE WORKFLOWINSID=@WORKFLOWINSID";//先刪除原有數(shù)據(jù) sqlBuilder.BeginDelete("testQingjia"); sqlBuilder.SetWhere("WORKFLOWINSID", WorkFlowInsId); sqlBuilder.EndDelete(); sqlBuilder.BeginInsert("testQingjia"); sqlBuilder.SetValue("WorkFlowId", WorkFlowId); sqlBuilder.SetValue("WorkTaskId", WorkTaskId); sqlBuilder.SetValue("WorkFlowInsId", WorkFlowInsId); sqlBuilder.SetValue("WorkTaskInsId", WorkTaskInsId); sqlBuilder.SetValue("ID", BusinessLogic.NewGuid()); sqlBuilder.SetValue("userId", lbUserId.Text); sqlBuilder.SetValue("userName", lbUserName.Text); sqlBuilder.SetValue("dutyCaption", lbDutyCaption.Text); sqlBuilder.SetValue("archCaption", lbArchCaption.Text); if (this.WorkFlowDbProvider.CurrentDbType == CurrentDbType.Oracle) { sqlBuilder.SetValue("BeginTime", !string.IsNullOrEmpty(tbxStartTime.Value) ? BusinessLogic.GetOracleDateFormat(DateTimeHelper.ToDate(tbxStartTime.Value)) : BusinessLogic.ConvertToDateToString(tbxStartTime.Value)); sqlBuilder.SetValue("EndTime", !string.IsNullOrEmpty(tbxEndTime.Value) ? BusinessLogic.GetOracleDateFormat(DateTimeHelper.ToDate(tbxEndTime.Value)) : BusinessLogic.ConvertToDateToString(tbxEndTime.Value)); } else { sqlBuilder.SetValue("BeginTime", BusinessLogic.ConvertToDateToString(tbxStartTime.Value)); sqlBuilder.SetValue("EndTime", BusinessLogic.ConvertToDateToString(tbxEndTime.Value)); } sqlBuilder.SetValue("Days", tbxDays.Text); sqlBuilder.SetValue("QingJiaType", BusinessLogic.ConvertToString(dplType.SelectedItem.Text)); sqlBuilder.SetValue("QingJia", tbxQingjia.Text); sqlBuilder.EndInsert(); } } }
表單開發(fā)完成后,我們需要在RDIFramework.NET框架中對表單進行綁定,如下圖所示:
具體各項的說明可以參考RDIFramework.NET工作流部分的介紹文檔。
也可以在Web的業(yè)務(wù)平臺中的“用戶表單管理”模塊進行設(shè)置,如下圖所示:
在上圖中,我已經(jīng)定義好了“表假單”子表單,我們點擊“修改子表單”,看下設(shè)置,如下圖所示:
在“修改子表單”界面的“位置:”設(shè)置,就是我們開發(fā)的業(yè)務(wù)表單發(fā)布到IIS下的相對地址,按這樣設(shè)置后,框架就可以自動加載進來了。
有時我們的業(yè)務(wù)可能會比較復(fù)雜,會涉及不至一個業(yè)務(wù)表單,我們的工作流組件充分的考慮到了這種情況。因此我們是以主表單(可包含多個子表單)來與各任務(wù)節(jié)點進行關(guān)聯(lián)的。比如:我們在發(fā)起請假申請時,會需要填寫請假單表單,還會上傳一些附件(附件表單我們可以做成公用表單),這時配置如下所示:
表單在框架中定義好后,我們再在請假申請各任務(wù)節(jié)點對表單進行綁定,需要說明的是,我們是以主表單以基礎(chǔ)進行綁定的,這就代表一個任務(wù)節(jié)點可以擁有多個表單,這對復(fù)雜的業(yè)務(wù)非常有用。下面看下請假流程中部門經(jīng)理對表單的綁定如下圖所示,在“表單名”后面的按鈕“...”就可以打開選擇我們已經(jīng)定義的主表單,來作為當前任務(wù)節(jié)點的表單列表。
五、請假申請演示
請假申請是每個登錄系統(tǒng)的人都應(yīng)該可以使用的業(yè)務(wù)流程,因此我們把“請假申請”的啟動節(jié)點的處理人指定為“所有人”,這就代表只要能登錄系統(tǒng),就可以使用“請假申請”流程。如下圖所示:
打開“日常業(yè)務(wù)”功能模塊,可以看到當前用戶可以使用的業(yè)務(wù)流程,如下圖所示:
在“可用業(yè)務(wù)”中選擇“行政部”,右側(cè)列出所選節(jié)點當前用戶有權(quán)限啟動的所有業(yè)務(wù)流程,我們選擇“員工請假流程”,單擊“開始任務(wù)”,打開啟動任務(wù)主界面,如下圖所示。假設(shè)請假5天,則應(yīng)由當前用戶所在部門經(jīng)理審批的同時還需要分公司總經(jīng)理審批。
單擊提交后,流程提交到部門經(jīng)理“wikstone”處,以wikstone用戶登錄,在未認領(lǐng)任務(wù)界面,可以看到請假申請已經(jīng)提交給“部門經(jīng)理處了,如下圖所示:
RDIFramework.NET工作流組件約定所有任務(wù)提交后都會進入對方未認領(lǐng)任務(wù)列表,這樣做的好處是:如果當前提交后想反悔,只要對方?jīng)]有認領(lǐng),就可以撤回任務(wù)。選擇“認領(lǐng)任務(wù)”后,進行待辦任務(wù)窗體,如下圖所示:
選擇一條待辦任務(wù)后,我們可以“處理任務(wù)”,放棄對當前任務(wù)的認領(lǐng)、查看當前任務(wù)的執(zhí)行流程圖,當前任務(wù)的“處理記錄”等。我們選擇“處理任務(wù)”按鈕,對當前任務(wù)進行處理,如下圖所示:
在“處理任務(wù)”主界面,我們可以做很多的操作,具體可以參考RDIFramework.NET工作流組件的相關(guān)說明,這兒就不一一闡述了。
填寫好審批意見后,單擊“提交”按鈕,即可根據(jù)流程定義(當前請假天數(shù)大于3天)提交到“分公司總經(jīng)理”處審批。下面我們以分公司總經(jīng)理“chenp”的用戶登錄系統(tǒng),可以看到請假申請已經(jīng)提交到了分公司總經(jīng)理處。如下圖所示:
按同樣方式進行任務(wù)處理,再提交,流程就可以回到流程啟動用戶了。我們以流程啟動者登錄進來看下,查看下審批列表,如下圖所示:
同時我們可以查看流程執(zhí)行情況,如下圖所示:
同樣,我們可以查看流程的處理記錄,如下圖所示。
在我參與的任務(wù)界面可以查看我所參與的所有任務(wù)的情況,如下圖所示:
至此,整個請假申請業(yè)務(wù)流程完成,當前在流程流轉(zhuǎn)的過程中還有很多操作,比如:任務(wù)的回退、授權(quán)、指派、召回等都可以輕易實現(xiàn)。
作者: EricHu
出處:http://www.cnblogs.com/huyong/
Email:406590790@qq.com
QQ交流:406590790
QQ群:237326100
框架博客:http://yonghu.blog.51cto.com/ http://www.cnblogs.com/huyong
RDIFramework.NET,基于.NET的快速信息化系統(tǒng)開發(fā)、整合框架,給用戶和開發(fā)者最佳的.Net框架部署方案。
關(guān)于作者:高級工程師、信息系統(tǒng)項目管理師、DBA。專注于微軟平臺項目架構(gòu)、管理和企業(yè)解決方案,多年項目開發(fā)與管理經(jīng)驗,曾多次組織并開發(fā)多個大型項目,在面向?qū)ο?、面向服?wù)以及數(shù)據(jù)庫領(lǐng)域有一定的造詣?,F(xiàn)主要從事基于 RDIFramework.NET 框架的技術(shù)開發(fā)、咨詢工作,主要服務(wù)于金融、醫(yī)療衛(wèi)生、鐵路、電信、物流、物聯(lián)網(wǎng)、制造、零售等行業(yè)。
如有問題或建議,請多多賜教!
本文版權(quán)歸作者和CNBLOGS博客共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,可以通過郵箱或QQ 聯(lián)系我,非常感謝。