連載:(二)循序漸進,通過XML配置,實現通用於WinForm(.Net)、WebForm(Asp.Net+JQuery+EasyUI)表單、報表--原理

來源:互聯網
上載者:User

標籤:報表   表單   asp.net   jquery   .net快速開發   

連載:(二)循序漸進,通過XML配置,實現通用於WinForm(.Net)、WebForm(Asp.Net+JQuery+EasyUI)表單、報表--原理

長江支流

 

 

      本原理,適用於Window Form的CS,也適用於ASP.Net的BS。

 

      在描述原理之前,先來看個傳統的ORM寫代碼的例子。

 

實體映射


    現在很多架構實現ORM,去動態產生代碼,實現資料增、刪、改、查的功能。
實體的映射關係,是通過代碼的方式進行映射的,是否可以通過XML檔案,來配置執行個體的映射關係,答案是肯定的。

代碼映射這裡,先看一下主鍵為ID的表test_EntityAccessORM有兩個欄位DM、MC表示代碼、名稱,表欄位與實體的映射代碼實現方式。

(注意:寫代碼不是我們本意,我們將要拋棄代碼,程式員就是為了不寫代碼或少寫代碼!)

using System;using WebMIS.Data.EntityAccess;using WebMIS.Data.EntityAccess.MapAttribute;namespace WebMIS.Data.EntityAccess.Test{/// <summary>/// 實體映射。/// </summary> //描述映射的表名,主鍵(主鍵可多個),如("myTable","ID,NO")或("myTable","ID","NO"),可寫在類申明上,也可寫在無參公有建構函式上,且類上優先。[WebMIS.Data.EntityAccess.MapAttribute.TableMap("test_EntityAccessORM","ID")] public class EntityMapByAuto:WebMIS.Data.EntityAccess.EntityAutoMap{private long _ID;//IDprivate string _Code ;//代碼private string _Name ;//名稱//[WebMIS.Data.EntityAccess.MapAttribute.TableMap("test_EntityAccessORM","ID")] public EntityMapByAuto(){}[WebMIS.Data.EntityAccess.MapAttribute.ColumnMap("ID",System.Data.DbType.UInt32)]public long ID{get{return _ID;}set{_ID = value;}}[WebMIS.Data.EntityAccess.MapAttribute.ColumnMap("dm")]public string Code{get{return _Code;}set{_Code = value;}}[WebMIS.Data.EntityAccess.MapAttribute.ColumnMap("mc")]public string Name{get{return _Name;}set{_Name = value;}}//以下公有欄位或屬性,沒有ColumnMap ,不參預ORMpublic string abc="";public static string ABCD{get{return "ABCD1";}}}}

 

     由此可知,通過屬性類WebMIS.Data.EntityAccess.MapAttribute.TableMap指定表及主鍵,通過WebMIS.Data.EntityAccess.MapAttribute.ColumnMap指定資料庫表欄位與屬性的對應映射關係。大家從VS內建的Entity FrameworkEF中也可以找出類似的實現原理。

XML映射我們這裡要實現的,是通過XML設定檔,配置表欄位與實體的映射關係,不寫代碼的實現方式。這樣的好處時,只需要改設定檔,無需編譯再發布部署程式,靈活方便。

 

這裡,特別要注意的是,XML<Field>節點中<lD>表示WinForm/WebForm中控制項的ID屬性或標準html元素的name屬性,<Name>表示Select中指定的欄位名。

 

而且還要注意:<Field>定義,<lD>要與UI中控制項或元素ID/Name屬性相同(區分大小寫)、<Name>是<Select>元素中寫出的欄位,區分大小寫。

 

<?xml version="1.0" encoding="utf-8"?><WebMisControllerSerializer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  <Controller>    <!--注意,Select中的欄位大小寫,所以Field中的Name節點,要與之一樣-->    <Select>Select ID, DM,MC From test_EntityAccessORM</Select>    <TableName>test_EntityAccessORM</TableName>    <PrimaryKey>ID</PrimaryKey>    <PrimaryKeyValue />    <UpdateWhere />    <DeleteWhere />    <Fields>      <Field>        <!--ID節點表示WinForm/WebForm中控制項的ID屬性或標準html元素的name屬性-->        <ID>ID</ID>        <!--Name節點表示Select中指定的欄位名-->        <Name>ID</Name>        <Type />        <Save>false</Save>        <Visible>false</Visible>      </Field>      <Field>        <ID>Code</ID>        <Name>DM</Name>        <Align>right</Align>        <Width>30</Width>        <Type />        <Save>true</Save>        <Title>代碼</Title>        <FormType />        <Visible>true</Visible>        <Null>false</Null>        <NullTitle>代碼不可為空,請輸入!</NullTitle>        <Sql />        <Value />        <Excel />        <UserInputValue />      </Field>      <Field>        <ID>Name</ID>        <Name>MC</Name>        <Title>名稱</Title>        <NullTitle>名稱不可為空,請輸入!</NullTitle>      </Field>    </Fields>  </Controller></WebMisControllerSerializer>


 

運行原理

    假設,在網格的某一行選擇後點擊編輯按鈕或雙擊網格某一行,彈出一個顯示編輯的UI介面(WinForm或Web網頁,由使用者或UI設計師開發)。解析程式,會根據XML設定檔中的Select節點擷取資料來源,通過傳遞的主鍵值擷取唯一記錄,並將記錄值根據XML配置的欄位對應關係以及與UI中的映射關係,將讀取的資料顯示在UI中。

    如果儲存資料,首先判斷設定的Null為false時表示不允許為空白,根據NullTitle提示使用者輸入;然後判斷如果設定了存在性檢查,就會去執行指定的檢查規則…;最後,擷取欄位值以存入資料庫。值一般是通過UI元素控制項輸入,或可以從Excel單元格擷取,也可以通過SQL擷取,並且優先通過程式配置UserInputValue的鍵值對設定。

   除此之外,系統還會根據一定規則,去讀參數值,例如Asp.Net時取URL參數指定值、Session、Application值。

 

 

  • 控制檔案

   通過XML描述的控制檔案叫控制檔案,它可以描述模型定義、UI表單、互動回呼函數、查詢報表資料來源、查詢過濾條件欄位等。

  • 模板檔案

   使用者自己定義UI介面的頁面模板,叫做模板檔案,用於輸入或顯示XML中指定資料來源的資料。當然,如果不指定模板檔案,可以根據XML控制檔案,自動產生頁面。

  • 解析器

   通過XML描述的控制檔案,由解析程式來處理並控制的,它會根據控制檔案的模型描述,將資料庫中資料顯示在UI視圖中或者將表單資料存放區到資料庫中。

 

   在本串連下一章節,將用C#實現XML設定檔相關類,並給出原始碼。

 

 

聲明:本文著作權為長江支流周方勇所有,如需轉載,請保留完整的內容及出處。 

長江支流 [email protected] :winxin8001234567

連載:(二)循序漸進,通過XML配置,實現通用於WinForm(.Net)、WebForm(Asp.Net+JQuery+EasyUI)表單、報表--原理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.