<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

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

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

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

       

        參考文章:

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

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

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

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

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

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

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

        一、請假流程業務說明

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

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

        二、請假申請流程定義

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

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

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

        

        表定義好了,現在我們就要進行業務表單的開發了,業務表單是指在流程中使用的表單,表單文件的界面一般分2種類型:編輯界面和查詢界面,編輯界面是指新建和修改信息的界面;查詢界面是指查詢表單數據的界面,二者的區別是前者有輸入區后者沒有輸入區。二者也可以在同一個表單中實現,通過設置表單的狀態(查看、修改、新建)來控制頁面的可編輯性。表單的樣式、設計可以根據自己的偏好進行設置,沒有特殊要求。只要與其他模塊協調一至即可。

        打開VS,開發請假申請表單(說明一下,開發的方式有很多種,這兒只是為了方便說明,做得簡單一些,可以自己擴展),如下圖所示:

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

      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();
                  }
              }
      
              /// <summary>
              /// 表單數據展現,考慮表單退回重新處理和保存草稿的情況
              /// 
              /// </summary>
              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)//判斷是否有數據,有數據讀取數據庫中的值
                  {
                      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//如果沒有數據,初始化默認值
                  {
                      lbUserId.Text = UserId;
                      lbUserName.Text = UserName;
                      lbDutyCaption.Text = DutyCaption;
                      lbArchCaption.Text = ArchCaption;
                      tbxStartTime.Value = DateTime.Now.ToShortDateString();
                      tbxEndTime.Value = DateTime.Now.ToShortDateString();
                  }
              }
      
              /// <summary>
              /// 表單數據提交,避免重復提交
              /// </summary>
              public override void SaveUserControl(bool IsDraft)
              {
                  base.SaveUserControl(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", 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();
              }
          }
      }
      

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

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

       

        具體各項的說明可以參考RDIFramework.NET工作流部分的介紹文檔。

        也可以在Web的業務平臺中的“用戶表單管理”模塊進行設置,如下圖所示:

        在上圖中,我已經定義好了“表假單”子表單,我們點擊“修改子表單”,看下設置,如下圖所示:

        在“修改子表單”界面的“位置:”設置,就是我們開發的業務表單發布到IIS下的相對地址,按這樣設置后,框架就可以自動加載進來了。

        有時我們的業務可能會比較復雜,會涉及不至一個業務表單,我們的工作流組件充分的考慮到了這種情況。因此我們是以主表單(可包含多個子表單)來與各任務節點進行關聯的。比如:我們在發起請假申請時,會需要填寫請假單表單,還會上傳一些附件(附件表單我們可以做成公用表單),這時配置如下所示:

       

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

         五、請假申請演示

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

       

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

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

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

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

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

        在“處理任務”主界面,我們可以做很多的操作,具體可以參考RDIFramework.NET工作流組件的相關說明,這兒就不一一闡述了。

        填寫好審批意見后,單擊“提交”按鈕,即可根據流程定義(當前請假天數大于3天)提交到“分公司總經理”處審批。下面我們以分公司總經理“chenp”的用戶登錄系統,可以看到請假申請已經提交到了分公司總經理處。如下圖所示:

       

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

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

        同樣,我們可以查看流程的處理記錄,如下圖所示。

        在我參與的任務界面可以查看我所參與的所有任務的情況,如下圖所示:

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

      posted @ 2015-03-18 11:15  .NET快速開發框架  閱讀(2538)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产999精品2卡3卡4卡| 在线aⅴ亚洲中文字幕| 国产一区二区三区在线观| 烟台市| 日韩熟女熟妇久久精品综合| 国产精品久久国产精麻豆99网站| 人妻中文字幕亚洲精品| 人妻加勒比系列无码专区| 国产精品亚洲二区在线看| 蜜臀精品国产高清在线观看| 亚洲精品乱码久久久久久蜜桃图片| 亚洲另类激情专区小说图片| 成人性能视频在线| 成人国产亚洲精品天堂av| 国产午夜福利视频在线| 乌鲁木齐市| 精品国产片一区二区三区| 九九在线精品国产| 26uuu另类亚洲欧美日本| 精品少妇无码一区二区三批| 九九热视频在线播放| 五月天丁香婷婷亚洲欧洲国产| 在线亚洲+欧美+日本专区| 国产精品一区二区三区四| 亚洲色一色噜一噜噜噜| 成在线人视频免费视频| 亚洲精品不卡av在线播放| 国产午夜视频在线观看| 天堂网www在线资源网| 国产999久久高清免费观看| 亚洲精品电影院| 免费网站看av片| 国产中文字幕在线一区| 亚洲国产精品男人的天堂| 熟女少妇精品一区二区| 成人区人妻精品一区二蜜臀| 亚洲 制服 丝袜 无码| 国产一卡2卡三卡4卡免费网站 | 国产在线午夜不卡精品影院| 沂南县| 国产成人综合色视频精品|