最近的一個項目,由于客戶的需求等信息不確定,為了降低以后修改的成本及產品的推廣考慮到動態表單技術,之前也一直在考慮到動態表單技術,畢竟在delphi里已經實現過了,由于我們采用的hibernate的執久層的原故,每一個表需要一個VO,這樣,動態生成表后,VO無法生成,當時做罷!在團隊討論這個問題的時候,想到了這樣的一個解決方法,將數據的存儲由橫向變為縱向,通過這種方法我們實現了動態的數據保存!!!下面介紹一下具體的方法。
(1)數據存儲
大家都知道,在傳統的數據存儲過程中,一個表是由N個字段組成的,每個字段有他特殊的含義,數據類型等;如下:
Student(表)
ID(主鍵) int
Name(名稱) varchar(10)
..
..
我們現在采用的方法是將橫向的表進行豎向的存儲方法,首先,通過一個表定義的表(有點繞),描述一下表和數據字段的信息,如下:
定義
TableName??? FieldName FieldNameCN FieldType ..
存儲
’Student‘??? ’name‘? '名稱'?????????????? '字符'
通過數據描述,描述數據表的基本組成,下面介紹一下數據存儲表,如下,與數據定義表類似,加入一個存儲值字段:
定義
TableName??? FieldName FieldNameCN FieldType??FieldValue
存儲
’Student‘??? ’name‘? '名稱'?????????????? '字符'?????? '張三'
這就是基本的動態表單的結構,真實的情況比這要復雜一些,有的需要字典關聯信息(類似于地區等),基本的結構就是這樣,通過這樣的存儲方式,可以實現數據的動態的存儲,實現業務表的動態變化;
(2)數據查詢
通過橫表轉縱表的SQL語句,可以實現縱向存儲的表,橫向顯示(上網找一下,這樣的例子非常多),另一個問題是存儲為字典編號時,需要顯示值,同樣可以通過Sql語句實現。
(3)數據顯示
由于動態表單的動態建立的,通過對表單的顯示傳遞特殊的參數,可以實現數據的列表或是單表(修改樣式)的顯示;
今天先介紹到這里,后續的還有顯示模板的制作,校驗等;