系统总框架设计思想
申明:仅针对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无关
|
|