Winform開發框架中工作流模塊之申請單草稿處理

来源:http://www.cnblogs.com/wuhuacong/archive/2017/11/17/7850384.html
-Advertisement-
Play Games

在我們開發工作流模塊的時候,有時候填寫申請單過程中,暫時不想提交審批,那麼可以暫存為草稿,以供下次繼續填寫或者提交處理,那麼這個草稿的功能是比較實用的,否則對於一些填寫內容比較多的申請單,每次要重填寫很多數據,那會被用戶罵的,從用戶的角度上來講,提供草稿保存的功能是比較友好的。本篇隨筆介紹在工作流模... ...


在我們開發工作流模塊的時候,有時候填寫申請單過程中,暫時不想提交審批,那麼可以暫存為草稿,以供下次繼續填寫或者提交處理,那麼這個草稿的功能是比較實用的,否則對於一些填寫內容比較多的申請單,每次要重填寫很多數據,那會被用戶罵的,從用戶的角度上來講,提供草稿保存的功能是比較友好的。本篇隨筆介紹在工作流模塊中使用一種通用的存儲方式來存儲及顯示申請單草稿的信息。

1、申請單填寫

在我們提交申請前,我們一般是需要填寫一些相關的資料,如下界面所示。

這個表單記錄的信息不多,不過提供存為草稿的功能也是要的,我們所有申請單都提供這個標準功能。

或者複雜一點的申請單

以往做過草稿保存,把記錄複製在正式的申請單裡面,設置它為草稿狀態即可,這種方式可以實現,不過不好統一處理,本篇隨筆介紹的是所有草稿存儲在一個表裡面,我們定義一些欄位用來存儲對應信息的JSON數據,然後需要的時候,把它們逐一解析為對應的對象即可,這種我們可以在基類窗體裡面封裝它的【存為草稿】的邏輯處理了。

 

2、草稿功能實現

首先我們定義一個存儲草稿信息,可以對單表,也可以對主從表的數據,我們把它存儲為對應的JSON欄位即可,設計草稿的數據表如下所示。

在申請單填寫的基類窗體裡面,我們定義界面如下所示。

然後我們在基類提供一個通用的業務草稿保存處理函數,供子類進行調用即可。

        /// <summary>
        /// 保存草稿
        /// </summary>
        /// <param name="title">草稿標題</param>
        /// <param name="mainJson">主業務表單數據</param>
        /// <param name="detailJson">從表業務表單數據(如無則為null)</param>
        /// <param name="detailJson2">從表業務表單數據(如無則為null)</param>
        /// <param name="detailJson3">從表業務表單數據(如無則為null)</param>
        /// <returns></returns>
        protected virtual void SaveDraft(string title, string mainJson, string detailJson = null, 
            string detailJson2 = null, string detailJson3 = null)
        {
            var formInfo = BLLFactory<BLL.Form>.Instance.FindByID(this.FormID);
            ArgumentCheck.Begin().NotNull(formInfo, "表單對象");

            var infoDraft = new ApplyDraftInfo();
            if(!string.IsNullOrEmpty(this.DraftId))
            {
                infoDraft.ID = this.DraftId;//如果已有的則更新
            }
            infoDraft.BizDraftJson = mainJson;
            infoDraft.BizDraftJson2 = detailJson;
            infoDraft.BizDraftJson3 = detailJson2;
            infoDraft.BizDraftJson4 = detailJson3;
            infoDraft.Form_ID = this.FormID;
            infoDraft.FormName = formInfo.FormName;
            infoDraft.Category = formInfo.Category;
            infoDraft.Title = title;
            infoDraft.Creator = LoginUserInfo.ID;
            infoDraft.CreateTime = DateTime.Now;
            var flag = BLLFactory<ApplyDraft>.Instance.InsertUpdate(infoDraft, infoDraft.ID);

            MessageDxUtil.ShowTips("保存草稿-" + (flag ? "成功" : "失敗"));
            if (flag)
            {
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
            }
        }

我們可以看到,草稿可以新增或者更新,如果對於已經存在的草稿,我們再次編輯的時候,不會新增另外一條記錄,而是修改原來的記錄。

對於普通單表的申請單處理,如下界面所示。

那麼它的保存草稿的功能代碼是如何實現的?

        /// <summary>
        /// 保存草稿處理
        /// </summary>
        private void btnSaveDraft_Click(object sender, EventArgs e)
        {
            string title = string.Format("{0}的付款申請單【{1}】(草稿)", LoginUserInfo.FullName, DateTime.Now.ToShortDateString());

            var info = tempInfo;//必須使用存在的局部變數,因為部分信息可能被附件使用
            SetInfo(info);
            info.Creator = base.LoginUserInfo.ID;
            info.CreateTime = DateTime.Now;

            //保存草稿:對象信息轉換為JSON進行保存
            SaveDraft(title, info.ToJson());
        }

這裡保存實際上就是獲取對應的表單信息轉換為JSON存儲即可。

 

例如對於費用及費用明細的報銷處理界面,如下所示。

那麼我們的草稿處理有什麼不同呢?

在填寫申請單的子類我們實現按鈕【存為草稿】的單擊事件處理,代碼如下所示。

        /// <summary>
        /// 保存申請單草稿的處理
        /// </summary>
        private void btnSaveDraft_Click(object sender, EventArgs e)
        {
            string title = string.Format("{0}的{1}報銷申請單【{2}】(草稿)", LoginUserInfo.FullName, this.txtCategory.Text, DateTime.Now.ToShortDateString());
            var info = tempInfo;//必須使用存在的局部變數,因為部分信息可能被附件使用
            SetInfo(info);
            info.Creator = base.LoginUserInfo.ID;
            info.CreateTime = DateTime.Now;

            //獲取費用明細
            var list = GetDetailList();

            //保存草稿處理:如果有多個明細,可以增加在後面
            SaveDraft(title, info.ToJson(), list.ToJson());
        }

我們這裡需要把費用信息、明細信息的對象轉換為JSON對象,然後統一調用基類的保存草稿函數即可。

而對於草稿信息載入,還原為實際表單的信息顯示,我們處理代碼就是先解析JSON對象,轉換為實際表單對象,然後進行界面賦值展示即可,如下代碼所示。

完成這些,我們就可以在實際申請單業務中進行草稿的存儲和顯示了。

 

 

3、界面代碼生成 

 以上代碼相對都比較簡單,不過我們為了開發工作流模塊更加高效,統一使用代碼生成工具Database2Sharp進行界面的代碼生成即可,同時保存草稿、附件處理等代碼都一併生成,直接使用即可。

對於主從表表的界面,我們依舊也可以使用代碼生成工具進行快速的工作流界面生成。

  

至於如何使用這個功能,後面在開一篇隨筆詳細進行介紹過程。

WInform開發框架之工作流系列文章:

Winform開發框架之簡易工作流設計

Winform開發框架中工作流模塊的表設計分析

Winform開發框架中工作流模塊的業務表單開發

Winform開發框架中工作流模塊之審批會簽操作

Winform開發框架中工作流模塊之審批會簽操作(2)

參照企業微信審批業務,在Winform開發框架中工作流模塊的實現業務審批

Winform開發框架中工作流模塊之申請單草稿處理

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習:C#綜合揭秘——Entity Framework 併發處理詳解 帖子筆記 ,該帖子使用的是objectContext , 一、併發相關概念 併發的類型: 第一種模式稱為悲觀式併發,即當一個用戶已經在修改某條記錄時,系統將拒絕其他用戶同時修改此記錄。第二種模式稱為樂觀式併發,即系統允許多個用戶同... ...
  • Visual Studio 2017是微軟為了配合.NET戰略推出的IDE開發環境,同時也是目前開發C#程式最新的工具,本節以Visual Studio 2017社區版的安裝為例講解具體的安裝步驟。 說明:Visual Studio 2017 社區版是完全免費的,其下載地址為:https://www ...
  • 一、簡介 Topshelf可用於創建和管理Windows服務。其優勢在於不需要創建windows服務,創建控制台程式就可以。便於調試。 二、官方地址: 1、官網:http://topshelf-project.com/ 2、官方文檔:https://topshelf.readthedocs.io/e ...
  • 關於WCF即可以寄宿於IIS,也可以自我寄宿,本文采用的是自我寄宿方式。之所以採用自我寄宿方式,很大程度上,在一些特殊的場景,例如下載大文件(如幾百MB、1G等)、圖片、文檔等,如果以IIS為宿主,可能會產生記憶體不夠用。所以這裡採用自我寄宿的方式為例子。WCF是由微軟開發的一系列支持數據通信的應用程... ...
  • 問題描述 在發佈項目的時候,有一些文件是json文件,在網頁中進行載入,但是在IIS7發佈的時候,json文件居然是404,無法找到,在URL上輸入地址也一樣。 錯誤原因 IIS內部機制,不支持直接訪問json擴展名文件,沒有mime映射。因此IIS不認Json文件,如需要支持訪問json文件時,需 ...
  • 上一篇文章介紹了使用Authorize特性實現了ASP.NET MVC中針對Controller或者Action的授權功能,實際上這個特性是MVC功能的一部分,被稱為過濾器(Filter),它是一種面向切麵編程(AOP)的實現,本章將從以下幾個方面來介紹ASP.NET MVC中的過濾器。 ● ASP ...
  • 首先出個題: 如圖: 假設對成長速度顯示規定如下: 成長速度為5顯示1個箭頭; 成長速度為10顯示2個箭頭; 成長速度為12顯示3個箭頭; 成長速度為15顯示4個箭頭; 其他都顯示都顯示0各箭頭。 用代碼怎麼實現? 差一點的if,else: Js代碼 var add_level = 0; if(ad ...
  • 背水一戰 Windows 10 之 控制項(控制項基類 - UIElement ): 拖放的基本應用, 手動開啟 UIElement 的拖放操作 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...