基於Extjs的web表單設計器 第七節——取數公式設計之取數公式定義


基於Extjs的web表單設計器

基於Extjs的web表單設計器 第一節

基於Extjs的web表單設計器 第二節——表單控件設計 

基於Extjs的web表單設計器 第三節——控件拖放 

基於Extjs的web表單設計器 第四節——控件拖放 

基於Extjs的web表單設計器 第五節——數據庫設計

基於Extjs的web表單設計器 第六節——界面框架設計

基於Extjs的web表單設計器 第七節——取數公式設計之取數公式定義

基於Extjs的web表單設計器 第八節——表單引擎設計 


  本節我們介紹表單設計器的取數公式設計。對於一個系統來說,我們除了最基本的業務之外,可能針對不同的企業用戶或者不同的生成環境的用戶會動態的增加一些不同於現有業務類型的數據,這也就會導致實際的生產環境要求我們的表單控件支持不同的數據來源取數。在這里我先拋幾個問題出來供大家思考一下:

  1. 一個比較復雜的表單的單控件一般有幾種類型?
  2. 不同類型的控件數據來源形式有哪些?
  3. 針對這些不同形式的數據來源,我們能不能把它們抽象一下下,用一種比較統一的方式或者方法來集中對它們進行處理?

  我們仔細考慮一下這幾個問題之后,會發現針對問題1表單的控件分類如下圖一

  通過上面的圖我們可以看出表單的控件基本上可以抽象的分為簡單類型和復雜類型兩類控件。

  對於問題2我們通過分析這些控件可以發現這幾種不同控件的數據來源無非如下圖二所示的幾種方式。(PS:請注意Sad表情的幾處地方,為什么我要用Sad表情,因為這幾個地方通常是我們覺得灰常不好搞的地方)

 

  至此問題1、問題2都解決了,那么問題3呢?答案是肯定的。我們當然可以使用一種比較抽象的方式來針對不同方式的數據來源定義不同的取值方式。

  取數公式的設計我們可以分為兩個部分進行分開設計(如下圖三所示),一個是取數公式的定義部分,另一個是取數公式的解析部分。很明顯我們除了要定義一套取數的公式之外,更重要的是能夠解析這些取數公式,這樣才能夠在表單中靈活的使用它們來為我們工作。

  •  取數公式的定義

開始講解取數公式的定義之前,先對幾個概念做個解釋,不然看不懂下面的圖四。

系統資源:比如員工、組織結構等基礎數據,也可以是系統涉及的業務類型、外部單位等等。總之我們可以把系統中使用的任何數據都當成一種資源。這些系統資源在系統中的存儲除了它本身所具有的屬性字段外,一般都還包含這些資源的Key、Value值。我們在具體業務中一般存儲這些資源的Key,而在具體的單據中顯示這些業務數據的時候,數據庫會根據這些key去順帶出它對應的Value值。(總不能顯示一串Id字符串吧,誰看得懂。)

靜態資源:一般就是根據某種資源的Key直接獲取該類型資源的所有數據,比如根據員工類型的Key獲取系統的所有員工,靜態資源一般可以設置默認值,和范圍值。

動態資源:動態資源其實是相當於靜態資源而言,它除了需要資源的Key之外,可能還需要其它參數來獲取特定范圍的該種資源,比如獲取某個組織結構下的員工,而這個組織機構是根據表單上的另外一個控件來取值的。

  理清了這幾個概念之后,我們正式進入取數公式的設計。我們認為一個設計得比較好的取數公式應該具有以下屬性:公式名稱、公式支持的控件類型、公式的輸入參數(0個或者多個)、公式解析路徑URL、資源類型Key、公式的描述。其中公式名稱和公式支持的控件類型是每個公式的必帶屬性,其它是可選屬性(參見圖三所示。)這樣定義的一個取數公式對用戶來說是比較好識別的,通過公式名稱和公式的描述屬性可以很好的知道該公式是干嘛的,而其它幾個屬性則很好的描述的公式的適用控件類型、資源類型以及公式的輸入參數和解析公式的URL。

  為了方便清晰的描述每一個取數公式,我們把所有的取數公式存放到一個XML文件中,通過XML的屬性來描述每一個取數公式。這里舉兩個例子:

  例一 每個表單基本上都會具有一個單據編號,而這個單據編號一般都是系統后台根據一定規則動態生成的,我們這里可能定義的一個簡單的“單據編號”的取數公式就是如下的形式:

<Formula Name="單據編號" ControlType="TextField"/>它只包含公式的兩個必要屬性名稱和控件類型,ControlType="TextField"表明了TextField類型(文本類型)的控件可以選擇“單據編號”這個取數公式。

  例二 比如表單上有兩個控件一個是“部門”的下拉樹控件(A表示),一個是“部門員工”的下拉樹控件(B表示),B的數據來源是根據A所選擇的的部門來動態從數據庫中獲取的,那么可能我們需要為B定義一個“部門員工”的取數公式就是下面這個樣子:

<Formula Name="部門員工" ControlType="NetDropDown"  Url="/CommonForm/GetDepartEmployee"  ResourceTypeID="DepartEmployee" Description="獲取某個部門下的">

    <Parameters>

      <Parameter Name="部門">departId</Parameter>

    </Parameters>

  </Formula>

  該公式包含了公式的所有屬性,其中ControlType="NetDropDown"說明了我們的NetDropDown類型的控件(下拉樹類型控件)可以使用這個公式,Url說明我們的公式解析路的路徑是CommonFormController下面的GetDepartEmployee方法(這里關於MVC的路由映射我不做具體的解釋,相信熟悉MVC的同學都知道。不知道的請自學MVC相關知識。)

  看到這里也許有些同學會問,例二“部門員工”有對應的URL去解析公式,而例一“單據編號”卻沒有URL,那么這個公式是如何解析的呢?其實細心的同學也許會注意到我們在定義公式的模型的時候”公式解析路徑URL”是非必選項。對於這種缺省URL路徑的公式我們當然會定義一個統一的方法去解析,這樣就省的每一個公式都去定義自己的方法解析。這里對於系統的靜態資源的獲取我們肯定是可以統一的歸納一個方法去解析他們的。只有少量的、特殊的需求我們才需要寫自己的方法去解析的。

      至此,我們就定義出了公式的基本模型。本節內容就先到這里,下一步我們就需要歸納出系統中常用的統一的取數公式。然后就是在我們表單設計中設計表單的時候針對某個控件屬性的取數進行公式設置、校驗、保存。具體請看下一節“基於Extjs的web表單設計器 第七節——取數公式設計之取數公式的使用“。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM