系統總框架設計思想
申明:僅針對chis5.0系統[2001-9-1]或最新的日期版本
本手冊僅限于程序員使用
北京眾邦慧智計算機系統集成公司保留最終解釋權利
未取得所有者許可,任何人或團體不得以任何形式傳播
目錄:
系統基類組成
用戶管理及驗證
報表生成器設計原理
Data層與Logic層的分層思想
系統基類組成:
Unit_global_varrant.pas 系統全局變量
Unit_RootMainForm.pas 系統主窗口基類
Unit_frmMainBase.pas 系統主窗口
ChildForm.pas 系統子窗口基類
ChildPrintForm.pas 系統普通打印子窗口
ChildPrintFormCube.pas 系統交叉表打印子窗口
一 Unit_global_varrant.pas 系統全局變量
functionSelectMessageBox(Text:string;CaptionNum:integer;Flags:integer):Integer
MessageBox的取代
Function _AddAllFields(DestClientDataSet: TClientDataSet):Boolean;
動態把數據集中的所有字段建立成字段對象
procedure ShowLineedt(stgReport:TDsnStage;iRepControlsNum:integer) ;
允許控件可編輯
procedure HideLineedt(stgReport:TDsnStage;iRepControlsNum:integer) ;
不允許控件可編輯
function ConvertDigit(iDigit:Double): String;
把數字串轉換未大寫字符串
function UpperDigit(iDigit:integer):string;
把單個數字轉換為大寫字符串
function DigitDW(iDW:integer):string;
把位數轉換為大寫金額位數
function TrancCurrentNo(iNum: Integer):String;
Function NBGetAdapterAddress(ino:Integer) : String;
獲得第幾張網卡的物理地址
function GetMac:string;
獲得網卡號
二 Unit_RootMainForm.pas 系統主窗口基類
主要是針對運行期動態設計FORM,對業務系統沒有影響。技術涉及到Delphi的RTTI和Windows 流技術,如果了解Delphi的RTTI,這部分很好了解。
三 Unit_frmMainBase.pas 系統主窗口
主要是每一個子系統專門添加代碼用的框架,沒有任何技術與業務含量。
四 ChildForm.pas 系統子窗口基類
最主要的方法是
procedure TfrmChildForm.LoadFormStream;
1 把所有的Dcom置上gv_Appserver
2 把與錄入控件關聯的Dcom.Connected := True
3 如果保存過界面,把界面取出放到ChildStage上,ChileStage是一個可運行期設計的面板
五 ChildPrintForm.pas 系統普通打印子窗口
這里有幾個ClientDataSet承攬報表的恢復和SQL,參數,數據的管理
cdsUpdateSQL, 報表SQL和格式
cdsSQLParams 報表參數
cdsReportDataSet 報表數據
cdsReportStoreProcDataSet 用存儲過程做成的報表的數據
Function GetReport(iReport_code : Integer):boolean; //取報表信息
把報表根據報表號從rt_report_data,rt_reprot_params中取出,放到
cdsUpdateSQL, cdsSQLParams
Function GetData:boolean; //取數據
把數據放到cdsReportDataSet或cdsReportStoreProcDataSet
Function PrintReport:boolean; //打印
打印報表
Function PreviewReport:boolean; //打印預覽
用“大白板”顯示報表
Procedure InitPrintForm;
為了運行期恢復控件,運行期注冊類
procedure AddReportParams;
無用,本來這個函數在unit QRExpbld,QRExpbld只為運行期設計QuickRep表達式
Procedure RepData_SaveAS;
把報表數據保存到txt文件中
六 ChildPrintFormCube.pas 系統交叉表打印子窗口
由于對交叉表沒有使用過,所以無法描述,請經驗豐富者填寫這部分
用戶管理及驗證
由以下數據結構構成了用戶管理的基礎
xt_subsys 子系統表,每個子系統的許可證就放在此
xt_group 哪個子系統有哪些用戶組
xt_func 每個子系統的每個用戶組具有什么功能
xt_user_group 每個子系統的每個用戶組有哪些用戶
xt_user 每個子系統的每一個用戶組的每個用戶的關聯信息,這是整個用戶管理的核心,重點字段有:subsys_id,user_group,user_name,pass_word,user_mi
xt_user_interface 如果某個子系統在運行期設計并保存了某個Form,就在此表有一條記錄
在主程序中專門有一個線程在探測用戶是否在線,用戶是否達到了使用的上限。
報表生成器設計原理
1 生成SQL,與Delphi中寫SQL一樣,參數也是:開頭
2 運行驗證SQL,配置參數類型,初始值,字典編號應該是這個參數所對應的TagSQL
3 拖控件,連接數據源[選cdsReportDataSet],連接數據字段[選cdsReportDataSet中的
字段],或做表達式計算,或用系統信息
4 預覽,保存報表
5 找到報表號,在程序中,通過GetReport(報表號),把報表從數據庫Blob字段中調出,恢復到dsnstage,GetData,獲得數據,打印。
整個系統最關鍵的技術就是DSN,QuickRep,一個用于運行期設計,一個用于打印,打印的技術全部可以參考QuickRep,運行器設計就是充分利用RTTI和windows的拖動消息,這Delphi比較中級的技術,可以參考一書,有詳細介紹,核心思想就是流與類信息。
設計報表的難點就是弄清楚幾個BAND的作用
Data層與Logic層的分層思想
站在層次模型的角度上分為:
業務表示層 多種業務表示方式
業務邏輯層 多種業務組合,流程
實體映射層 對多個異構數據庫的屏蔽和統一
數據服務層 數據視圖,數據操作[增刪改,外鍵,存儲過程,觸發器,備份,復制,恢復]的處理
我們目前欠缺通信安全層
每一層根據抽象和聚合又可細分為多個層次,不可簡單認為兩層或三層或N層,未來軟件是在層次模型基礎上的分布協作式計算的組件環境,高內聚,低耦合,異步連接,對等計算是未來的發展方向
Data 層專門放置實體數據集[entry DataSet],Data層是對數據結構的一個映射,
Logic層專門放置事務數據集[transaction DataSet],Logic層是對業務規則的一個映射,
客戶端Client是站在客戶角度上數據與業務的一個結合表示
Data層專用于表中記錄的增刪改數據查詢,與具體業務規格無關。
Logic層專用于業務流程與業務算法,具體寫表操作交給Data層,這是設計的初衷。
客戶端只管輸入輸出,與Logic無關
|
|