91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • 編程語言 > 
  • 實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

發布時間:2020-04-06 18:32:18 來源:網絡 閱讀:2107 作者:yonghu86 欄目:編程語言

實例演示如何使用RDIFramework.NET 框架的工作流組件

進行業務流程的定義請假申請流程-WinForm

RDIFramework.NET,基于.NET的快速信息化系統開發、整合框架,給用戶和開發者最佳的.Net框架部署方案。

  參考文章:

RDIFramework.NET — 基于.NET的快速信息化系統開發框架 — 系列目錄

RDIFramework.NET ━ .NET快速信息化系統開發框架 ━ 工作流程組件介紹

RDIFramework.NET ━ .NET快速信息化系統開發框架 ━ 工作流程組件Web業務平臺

RDIFramework.NET ━ .NET快速信息化系統開發框架 ━ 工作流程組件WinForm業務平臺

  RDIFramework.NET工作流程組件是以RDIFramework.NET框架為支撐,根據我們多年的項目經驗和項目實踐,結合國內各大工作流產品的特點研發的一套流程管理組件。該組件不僅考慮到從零搭建業務系統,也考慮到與現有業務系統的整合。從零搭建系統我們可以使用RDIFramework.NET框架以基礎,來快速搭建業務系統。與現有系統的整合,我們的流程引擎提供了豐富的功能接口,供三方業務系統調用,并提供組件的全部源碼方便用戶進行整合。RDIFramework.NET工作流程組件采用SOA架構模式,流程引擎支持WCF方式訪問。支持B/S、C/S系統,同時支持SQLServer、ORACLE等主流數據庫。

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  RDIFramework.NET━工作流組件主要涵蓋工作流的設計與定義、流程實例的發起與運行、業務流程的監控與管理、工作流組件與業務系統的集成與協作等內容。

  一、請假流程業務說明

    員工請假流程在企業各大信息化系統中基本都會涉及到,本文我將向大家展示使用RDIFramework.NET工作流組件來自定義員工請假流程。目前的請假業務流程要求是這樣的:

    員工請假首先要提交至請假人所在部門的“部分經理”審批,如果請假天數小于等于3天則“部門經理”有權直接審批,否則需要提交至“分公司總經理”審批。

  二、請假申請流程定義

  請假申請業務流程我們已經清晰,現在我們使用RDIFramework.NET框架進行請假申請的定義。最終提供的請假流程如下圖所示:

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  三、請假申請業務表單開發

  現在請假申請的整個流程的定義我們算完成了,下面我們就開始開發請假表單,表單開發非常簡單,我們可以按常規的開發表單的方式進行開發,再加載到框架下即可。開發表單前我們需要在數據庫中建立請假單這個數據表。同時表中需要包含以下四個字段:WorkFlowId(工作流主鍵)、WorkFlowInsId(工作流實例主鍵)、WorkTaskId(工作任務主鍵)、WorkTaskInsId(工作任務實例主鍵)。如下圖所示:

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  表定義好了,現在我們就要進行業務表單的開發了,打開VS,開發請假申請表單,如下圖所示:

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  再編寫表單代碼,在代碼中可以自由實現表單的業務邏輯,非常的靈活。同時流程的業務表單只需要繼承自我們已經實現的基類(FrmBaseBizeForm)即可,再重載相應的方法。下面給了整個請假申請的業務表單實現代碼以供參考,如下所示:

using System;
using System.Data;
 
namespace RDIFramework.WorkFlow
{
    using RDIFramework.BizLogic;
    using RDIFramework.Utilities;
    using RDIFramework.WinForm.Utilities;
 
    /// <summary>
    /// 請假申請
    /// </summary>
    public partial class FrmQingJia : FrmBaseBizeForm
    {
        public FrmQingJia()
        {
            InitializeComponent();
        }
 
        private void FrmQingJia_Load(object sender, EventArgs e)
        {
            base.Form_Load();
            this.SetControlState();
            this.ShowEntity();
        }
 
        public override void SetControlState()
        {
            if (!string.IsNullOrEmpty(this.PageState))
            {
                this.pnlTool.Enabled = this.PageState != WorkConst.STATE_VIEW;
            }
             
            if (!string.IsNullOrEmpty(this.CtrlState))
            {
                gbMain.Enabled = btnSave.Enabled = this.CtrlState != "查看";
            }
            else
            {
                gbMain.Enabled = btnSave.Enabled = false;
            }
        }
 
        public override void ShowEntity()
        {
            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)//判斷是否有數據,有數據讀取數據庫中的值
            {
                txtUserId.Text = dt.Rows[0]["userid"].ToString();
                txtUserName.Text = dt.Rows[0]["userName"].ToString();
                txtDuty.Text = dt.Rows[0]["dutyCaption"].ToString();
                txtDepartment.Text = dt.Rows[0]["archCaption"].ToString();
                dtBeginTime.Text = dt.Rows[0]["beginTime"].ToString();
                dtEndTime.Text = dt.Rows[0]["endTime"].ToString();
                txtDays.Text = dt.Rows[0]["Days"].ToString();
                txtQingJia.Text = dt.Rows[0]["QingJia"].ToString();
                cboQingJiaType.Text = dt.Rows[0]["QingJiaType"].ToString();
            }
            else//如果沒有數據,初始化默認值
            {
                txtUserId.Text = UserId;
                txtUserName.Text = UserName;
                txtDuty.Text = DutyCaption;
                txtDepartment.Text = ArchCaption;
                dtBeginTime.Text = DateTime.Now.ToShortDateString();
                dtEndTime.Text = DateTime.Now.ToShortDateString();
            }
        }
 
        public override void SaveFormData(bool isDraft)
        {
            base.SaveFormData(isDraft);
            var sqlBuilder = new SQLBuilder(this.WorkFlowDbProvider);
            string sql = "DELETE TESTQINGJIA WHERE WORKFLOWINSID=@WORKFLOWINSID";//先刪除原有數據
            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", txtUserId.Text);
            sqlBuilder.SetValue("userName", txtUserName.Text);
            sqlBuilder.SetValue("dutyCaption", txtDuty.Text);
            sqlBuilder.SetValue("archCaption", txtDepartment.Text);
            if (this.WorkFlowDbProvider.CurrentDbType == CurrentDbType.Oracle)
            {
                sqlBuilder.SetValue("BeginTime", !string.IsNullOrEmpty(dtBeginTime.Text) ? BusinessLogic.GetOracleDateFormat(DateTimeHelper.ToDate(dtBeginTime.Text)) : BusinessLogic.ConvertToDateToString(dtBeginTime.Text));
                sqlBuilder.SetValue("EndTime", !string.IsNullOrEmpty(dtEndTime.Text) ? BusinessLogic.GetOracleDateFormat(DateTimeHelper.ToDate(dtEndTime.Text)) : BusinessLogic.ConvertToDateToString(dtEndTime.Text));
            }
            else
            {
                sqlBuilder.SetValue("BeginTime", BusinessLogic.ConvertToDateToString(dtBeginTime.Text));
                sqlBuilder.SetValue("EndTime", BusinessLogic.ConvertToDateToString(dtEndTime.Text));
            }
            sqlBuilder.SetValue("Days", txtDays.Text);
            sqlBuilder.SetValue("QingJiaType", BusinessLogic.ConvertToString(cboQingJiaType.SelectedItem));
            sqlBuilder.SetValue("QingJia", txtQingJia.Text);
            sqlBuilder.EndInsert();
        }
 
        private bool CheckInput()
        {
            if (string.IsNullOrEmpty(BusinessLogic.ConvertToString(cboQingJiaType.SelectedItem)))
            {
                MessageBoxHelper.ShowWarningMsg("請選擇請假類型!");
                cboQingJiaType.Focus();
                return false;
            }
 
            if (string.IsNullOrEmpty(txtDays.Text))
            {
                MessageBoxHelper.ShowWarningMsg("請假天數不能為空!");
                txtDays.Focus();
                return false;
            }
 
            if(!MathHelper.IsDecimal(txtDays.Text))
            {
                MessageBoxHelper.ShowWarningMsg("請假天數必須為數值型!");
                txtDays.Focus();
                return false;
            }
 
            if (string.IsNullOrEmpty(txtQingJia.Text))
            {
                MessageBoxHelper.ShowWarningMsg("請假事由不能為空!");
                txtQingJia.Focus();
                return false;
            }
 
            return true;
        }
 
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (!CheckInput())
            {
                return;
            }
 
            this.SaveFormData(false);
            MessageBoxHelper.ShowSuccessMsg("保存成功!");
        }
    }
}

  四、表單與業務流程的綁定

  表單開發完成后,我們需要在RDIFramework.NET框架中對表單進行綁定,如下圖所示:

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  具體各項的說明可以參考RDIFramework.NET工作流部分的介紹文檔。表單在框架中定義好后,我們再在請假申請各任務節點對表單進行綁定,需要說明的是,我們是以主表單以基礎進行綁定的,這就代表一個任務節點可以擁有多個表單,這對復雜的業務非常有用。下面看下請假流程中部門經理對表單的綁定如下圖所示,在“表單名”后面的按鈕“...”就可以打開選擇我們已經定義的主表單,來作為當前任務節點的表單列表。

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  五、請假申請演示

  請假申請是每個登錄系統的人都應該可以使用的業務流程,因此我們把“請假申請”的啟動節點的處理才指定為“所有人”,這就代表只要能登錄系統,就可以使用“請假申請”流程。如下圖所示:

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  打開“日常業務”功能模塊,可以看到當前用戶可以使用的業務流程,如下圖所示:

  實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  在“可用業務”中選擇“行政部”,右側列出所選節點當前用戶有權限啟動的所有業務流程,我們選擇“員工請假流程”,單擊“開始任務”,打開啟動任務主界面,如下圖所示。假設請假4天,則應由當前用戶所在部門經理審批的同時還需要分公司總經理審批。

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  單擊提交后,流程提交到部門經理“wikstone”處,以wikstone用戶登錄,在未認領任務界面,可以看到請假申請已經提交給“部門經理處了,如下圖所示:

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  RDIFramework.NET工作流組件約定所有任務提交后都會進入對方未認領任務列表,這樣做的好處是:如果當前提交后想反悔,只要對方沒有認領,就可以撤回任務。選擇“認領任務”后,進行待辦任務窗體,如下圖所示:

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  選擇一條待辦任務后,我們可以“處理任務”,放棄對當前任務的認領、查看當前任務的執行流程圖,當前任務的“處理記錄”等。我們選擇“處理任務”按鈕,對當前任務進行處理,如下圖所示:

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  在“處理任務”主界面,我們可以做很多的操作,具體可以參考RDIFramework.NET工作流組件的相關說明,這兒就不一一闡述了。填寫好審批意見后,單擊“提交”按鈕,即可根據流程定義(當前請假天數大于3天)提交到“分公司總經理”處審批。下面我們以分公司總經理“lsx”的用戶登錄系統,可以看到請假申請已經提交到了分公司總經理處。如下圖所示:

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

   按同樣方式進行任務處理,再提交,流程就可以回到流程啟動用戶了。我們以流程啟動者登錄進來看下,查看下審批列表,如下圖所示:

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  同時我們可以查看流程執行情況,如下圖所示:

實例演示如何使用RDIFramework.NET 框架的工作流組件進行業務流程的定義—請假申請流程-WinForm

  至此,整個請假申請業務流程完成,當前在流程流轉的過程中還有很多操作,比如:任務的回退、授權、指派、召回等都可以輕易實現。 

作者: 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的快速信息化系統開發、整合框架,給用戶和開發者最佳的.Net框架部署方案。 
關于作者:高級工程師、信息系統項目管理師、DBA。專注于微軟平臺項目架構、管理和企業解決方案,多年項目開發與管理經驗,曾多次組織并開發多個大型項目,在面向對象、面向服務以及數據庫領域有一定的造詣。現主要從事基于 RDIFramework.NET 框架的技術開發、咨詢工作,主要服務于金融、醫療衛生、鐵路、電信、物流、物聯網、制造、零售等行業。 
如有問題或建議,請多多賜教! 
本文版權歸作者和CNBLOGS博客共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,如有問題,可以通過郵箱或QQ 聯系我,非常感謝。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邯郸市| 开平市| 临邑县| 玉林市| 昭通市| 札达县| 县级市| 贵德县| 内江市| 昌乐县| 绥芬河市| 昌宁县| 桦川县| 黔西县| 阿拉善盟| 金川县| 紫云| 齐河县| 岑巩县| 武鸣县| 山丹县| 静海县| 会昌县| 荆门市| 南澳县| 上思县| 遂川县| 慈利县| 揭西县| 治县。| 昆山市| 鸡西市| 交口县| 南投市| 手游| 清水县| 凤山县| 通河县| 建平县| 永登县| 新宁县|