轉(zhuǎn)帖|使用教程|編輯:龔雪|2023-11-17 10:32:55.270|閱讀 93 次
概述:本文將為大家介紹在Winform混合式框架中如何整合外部API接口的調(diào)用,歡迎持續(xù)關(guān)注我們哦~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
在我們開發(fā)工作流模塊的時(shí)候,有時(shí)候填寫申請(qǐng)單過(guò)程中,暫時(shí)不想提交審批,那么可以暫存為草稿,以供下次繼續(xù)填寫或者提交處理,那么這個(gè)草稿的功能是比較實(shí)用的,否則對(duì)于一些填寫內(nèi)容比較多的申請(qǐng)單,每次要重填寫很多數(shù)據(jù),那會(huì)被用戶罵的,從用戶的角度上來(lái)講,提供草稿保存的功能是比較友好的。本文介紹在工作流模塊中使用一種通用的存儲(chǔ)方式來(lái)存儲(chǔ)及顯示申請(qǐng)單草稿的信息。
PS:給大家推薦一個(gè)C#開發(fā)可以用到的界面組件——DevExpress WinForms,它能完美構(gòu)建流暢、美觀且易于使用的應(yīng)用程序,無(wú)論是Office風(fēng)格的界面,還是分析處理大批量的業(yè)務(wù)數(shù)據(jù),它都能輕松勝任!
DevExpress技術(shù)交流群9:909157416 歡迎一起進(jìn)群討論
在我們提交申請(qǐng)前,我們一般是需要填寫一些相關(guān)的資料,如下界面所示。
這個(gè)表單記錄的信息不多,不過(guò)提供存為草稿的功能也是要的,我們所有申請(qǐng)單都提供這個(gè)標(biāo)準(zhǔn)功能。
或者復(fù)雜一點(diǎn)的申請(qǐng)單:
以往做過(guò)草稿保存,把記錄復(fù)制在正式的申請(qǐng)單里面,設(shè)置它為草稿狀態(tài)即可,這種方式可以實(shí)現(xiàn),不過(guò)不好統(tǒng)一處理,本篇隨筆介紹的是所有草稿存儲(chǔ)在一個(gè)表里面,我們定義一些字段用來(lái)存儲(chǔ)對(duì)應(yīng)信息的JSON數(shù)據(jù),然后需要的時(shí)候,把它們逐一解析為對(duì)應(yīng)的對(duì)象即可,這種我們可以在基類窗體里面封裝它的【存為草稿】的邏輯處理了。
首先我們定義一個(gè)存儲(chǔ)草稿信息,可以對(duì)單表,也可以對(duì)主從表的數(shù)據(jù),我們把它存儲(chǔ)為對(duì)應(yīng)的JSON字段即可,設(shè)計(jì)草稿的數(shù)據(jù)表如下所示。
在申請(qǐng)單填寫的基類窗體里面,我們定義界面如下所示。
然后我們?cè)诨愄峁┮粋€(gè)通用的業(yè)務(wù)草稿保存處理函數(shù),供子類進(jìn)行調(diào)用即可。
/// <summary> /// 保存草稿 /// </summary> /// <param name="title">草稿標(biāo)題</param> /// <param name="mainJson">主業(yè)務(wù)表單數(shù)據(jù)</param> /// <param name="detailJson">從表業(yè)務(wù)表單數(shù)據(jù)(如無(wú)則為null)</param> /// <param name="detailJson2">從表業(yè)務(wù)表單數(shù)據(jù)(如無(wú)則為null)</param> /// <param name="detailJson3">從表業(yè)務(wù)表單數(shù)據(jù)(如無(wú)則為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, "表單對(duì)象"); 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; } }
我們可以看到,草稿可以新增或者更新,如果對(duì)于已經(jīng)存在的草稿,我們?cè)俅尉庉?的時(shí)候,不會(huì)新增另外一條記錄,而是修改原來(lái)的記錄。
對(duì)于普通單表的申請(qǐng)單處理,如下界面所示。
那么它的保存草稿的功能代碼是如何實(shí)現(xiàn)的?
/// <summary> /// 保存草稿處理 /// </summary> private void btnSaveDraft_Click(object sender, EventArgs e) { string title = string.Format("{0}的付款申請(qǐng)單【{1}】(草稿)", LoginUserInfo.FullName, DateTime.Now.ToShortDateString()); var info = tempInfo;//必須使用存在的局部變量,因?yàn)椴糠中畔⒖赡鼙桓郊褂?SetInfo(info); info.Creator = base.LoginUserInfo.ID; info.CreateTime = DateTime.Now; //保存草稿:對(duì)象信息轉(zhuǎn)換為JSON進(jìn)行保存 SaveDraft(title, info.ToJson()); }
這里保存實(shí)際上就是獲取對(duì)應(yīng)的表單信息轉(zhuǎn)換為JSON存儲(chǔ)即可。
例如對(duì)于費(fèi)用及費(fèi)用明細(xì)的報(bào)銷處理界面,如下所示。
那么我們的草稿處理有什么不同呢?
在填寫申請(qǐng)單的子類我們實(shí)現(xiàn)按鈕【存為草稿】的單擊事件處理,代碼如下所示。
/// <summary> /// 保存申請(qǐng)單草稿的處理 /// </summary> private void btnSaveDraft_Click(object sender, EventArgs e) { string title = string.Format("{0}的{1}報(bào)銷申請(qǐng)單【{2}】(草稿)", LoginUserInfo.FullName, this.txtCategory.Text, DateTime.Now.ToShortDateString()); var info = tempInfo;//必須使用存在的局部變量,因?yàn)椴糠中畔⒖赡鼙桓郊褂?SetInfo(info); info.Creator = base.LoginUserInfo.ID; info.CreateTime = DateTime.Now; //獲取費(fèi)用明細(xì) var list = GetDetailList(); //保存草稿處理:如果有多個(gè)明細(xì),可以增加在后面 SaveDraft(title, info.ToJson(), list.ToJson()); }
我們這里需要把費(fèi)用信息、明細(xì)信息的對(duì)象轉(zhuǎn)換為JSON對(duì)象,然后統(tǒng)一調(diào)用基類的保存草稿函數(shù)即可。
而對(duì)于草稿信息加載,還原為實(shí)際表單的信息顯示,我們處理代碼就是先解析JSON對(duì)象,轉(zhuǎn)換為實(shí)際表單對(duì)象,然后進(jìn)行界面賦值展示即可,如下代碼所示。
完成這些,我們就可以在實(shí)際申請(qǐng)單業(yè)務(wù)中進(jìn)行草稿的存儲(chǔ)和顯示了。
以上代碼相對(duì)都比較簡(jiǎn)單,不過(guò)我們?yōu)榱碎_發(fā)工作流模塊更加高效,統(tǒng)一使用代碼生成工具Database2Sharp進(jìn)行界面的代碼生成即可,同時(shí)保存草稿、附件處理等代碼都一并生成,直接使用即可。
對(duì)于主從表表的界面,我們依舊也可以使用代碼生成工具進(jìn)行快速的工作流界面生成。
本文轉(zhuǎn)載自:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: