系统框架说明

整体框架结构

系统采用B/S三层架构模式,分为web表示层,EnterpriseOpration业务逻辑层和数据访问层(DataBase和DAL),整体结构如图1所示。

图1系统层次结构

在框架中已经实现了DAL数据数据访问层,具体项目开发时不需要编写此层代码;另外开发了DataBaseCreator,自动实现从数据库中生成Database类库,因此,具体项目开发时也不需要编写此层代码。框架还实现了系统的用户组管理、用户管理、组织机构管理、日志管理、用户权限控制和导航等每个项目都必须具备的基础功能。此外,还封装了Gridview和翻页控件,使常用的表格显示功能的开发大大简化。系统的详细结构如图2所示。

图2 系统详细结构

由图2可看出,具体项目开发时,只需要实现功能模块页面和对应的业务处理类即可。


数据访问层

2.1DataAccess

DataAccess是数据访问层的抽象类,定义了每个访问类必须具有的属性和方法,其类结构如图3所示。


图3DataAccess类结构

其属性如表1所示

表1DataAccess属性列表

属性名

中文说明

可访问性

_connectionStr

数据库连接字符串

protected

_tablename

表名

protected

_viewname

视图名

protected

_columnNames

要查询的列名,默认*表示全部列

protected

_timeOut

连接超时时间,单位秒

protected

_insertSQL

添加行所对应的SQL语句

protected

_updateSQL

更新行所对应的SQL语句,以TableID为标识

protected



其方法如表2所示

表2DataAccess方法列表

操作名

中文说明

可访问性

SetConnection

使用数据库连接字符串connectionStr,强制设置数据库连接

protected

GetDataBySql

使用sql语句查询数据,返回DataTable

protected

GetDataSet

使用sql语句查询数据,返回DataSet

protected

ExecSql

执行sql语句,成功返回0,失败返回-1

protected

ExecSqlWithTrans

使用事务执行sql语句,成功返回0,失败返回-1

protected

GetDataByPage

采用分页方式读取数据,返回DataTable表,一般在GridView显示时调用

public

Insert

添加记录

public

Update

更新记录

public

GetRecordCount

获取符合条件的记录数

public

GetDataFromTable

从表里查询数据

public

GetDataFromView

从视图里查询记录

public

Delete

删除记录

public



2.2SQLDataAccess

继承于DataAccess,实现每个具体函数,添加的熟悉和方法见表3和表4


表3SQLDataAccess属性列表

属性名

中文说明

可访问性

ConnectionString

静态连接字符串,所有对象共用一个,第一次创建对象时初始化内容

Static,protected

_sqlParameter

更新或插入记录时的Parameter参数,与表字段对应,由DBCreator自动生成

protected

表4SQLDataAccess操作列表

操作名

中文说明

可访问性

GetConnetionString()

获取数据库连接字符串

静态函数,ConnectionString为空时从文件读取,否则直接返回

private

2.3DataBase和DataBaseCreator

DataBase类库中的每一个类与某一个数据库表对应,继承于SQLDataAccess,是具体的数据层类,供业务逻辑层调用。目前主要实现构造函数和GetBlankOriginDataTable方法。构造函数对各个属性进行初始化,GetBlankOriginDataTable方法生成空表结构。

DataBaseCreator项目是一个辅助工具,可以自动根据数据库生成DataBase类库中的类,因此DataBase类库中的类不需要人工编写,只要定义好表结构就可以通过自动生成。

逻辑层

3.1EnterpriseBase

主要包含EnterpriseBase类、Screen类,UserRolesEntity类,ModuleRole类

(1)EnterpriseBase类

EnterpriseBase类是逻辑层的抽象类,定义了所有业务逻辑类必须具有的属性和方法,逻辑层的所有类(CommonClasses中的类除外)必须继承于EnterpriseBase类。

目前主要有排序属性OrderString,分页属性pagesize(每页记录数)、currentPage(当前页号)和Total(总记录数)。有一个方法GetGridViewTable(),供Grideview控件调用,要求所有业务类实现本方法。

(2)Screen类

屏幕分辨率类,有宽带和高度2个属性。主要用于页面自动调整大小,系统登录时建立Session[“Screen”]=screen,各个页面通过获取Session可得到客户端屏幕分辨率,并且调整相应控件的宽带、高度和位置。

(3)UserRolesEntity类

UserRolesEntity是用户权限实体类,其中包括了用户组名groupName(以逗号分隔多个用户组,暂时无作用),用户名Username,真实姓名Truename,用户单位编码UnitCode,用户权限列表Modulekeys(以逗号分割),按钮权限列表ButtonFlags(以逗号分割)及用户类型userType(根据需要可以使用,暂时未启用)。具体使用方式看Mypage类和UserRose类。

(4)ModuleRole类

按钮权限集具体使用方式看Mypage类和UserRose类。

3.2CommonClasses

主要包含页面基础类Mypage,权限控制类UserRose,通用方法类CommonMethod。

  1. Mypage类

Mypage类是Web表示层所有需要进行权限控制的页面的父类,主要封装了OnInit,OnLoad,OnPreRender,SetButtonRight和GetIsHasRight等5个方法。其中前3个方法是自动执行,与UserRoles类一起完成页面的权限控制;后2个方法需要开发人员调用执行,完成按钮的权限控制。

OnInit方法负责接收登录时的Session[“ure”],并根据ure初始化_user对象。OnLoad方法负责判断,如果Session[“ure”]为空,自动跳转到出错页面。OnPreRender取页面的_moduleKey,然后判断_user的ModulekeyList中是否包含该编号,若没有则转到出错页面。

前3个方法在页面载入时的执行过程如下

在点击页面按钮回调时的执行过程如下:

(2)UserRose类

UserRose类是实现权限控制的核心类,主要有username、unitcode、ModuleRoleList和ModuleKeyList4个属性。

表5 UserRose类的主要属性


属性名

中文说明

username

用户的登录账号

unitcode

用户所属的单位编码

ModuleRoleList

用户具有的页面权限集合

ModuleKeyList

用户对某个页面具有的按钮权限集合,长度和属性与ModuleRoleList对应


UserRose类主要具有的方法如表6所示:

表6 UserRose类的主要方法


属性名

中文说明

UserRoles(stringuserName)

构造函数,根据用户名初始化

UserRoles(stringuserName,string

构造函数,根据用户名和密码初始化

UserRoles(UserRolesEntityure)

构造函数,根据URE初始化UserRose对象,一般用于Mypage中根据Session[“ure”]初始化_user

GetURE

根据UserRose对象获取URE,用于登录时初始化URE

SetURE

根据URE初始化UserRose对象

getTableByUserName

根据用户名读取数据库中的用户记录

getTableByUP

根据用户名和密码读取数据库中的用户记录

TableConvertToMR

将Table转换成权限集,放到ModulekeyList和ModuleRoleList

一般在构造函数中初始化UserRose对象时调用

MRConvertToTable

将权限集转换成ZC_Roles表Table

本方法在权限控制时不调用,应是在用户组管理保存数据时使用。



(3)CommonMethod类

CommonMethod是规划的一些公共方法的封装,目前里面的方法都是旧的,作用不大。在项目开发过程中,可以根据需要逐步添加公共方法。

3.3SystemEO

这是表示层SystemWeb所对应的逻辑处理类,主要包含Groups类、UnitInfo类、Users类和Logs类,每个类对应一个主题页面(包括列表显示、添加修改页面等)。

4、表示层

4.1MyGrideView和CommonControl

(1)WebControl_GridView是一个自定义的用户控件,它是在微软GridView控件的基础上继续封装而成。添加的最新功能包括选中单条记录、分页、导出数据、按照特定列排序、纵向滚动条(解决当数据量很大时页面被拖得很长,看到数据时无法看到数据标题问题),横向滚动条解决数据列很多时页面无法正常显示所有列的问题。而且在做以上处理的时候,采用Ajax技术,GridView是局部刷新。

使用选中单条记录功能时,应注意在开发的页面里添加一个HiddenField控件用于存储每次选中行数的tableID,其他功能只需订阅相应的事件就可使用。导出、翻页、排序利用同一个事件实现。

选择单条记录后,当前记录变色。使用时需要在页面

(2)CommonControl类继承于.netITemplate,是WebControl_GridView的模版类,和GridView配合使用。Gridview是以表格的形式展现数据,而每一列可以提供不同的功能,可以是纯文本的显示,也可以是具有超链接的文本、按钮、带脚本事件的文本等。CommonControl类就提供了各种不同的列展现方式。

NoramlTemplate纯文本模版类,表格显示绑定列的纯文本。

HrefTemplate超链接模版,表格显示绑定列的文本的超链接的形式。

JSFunctionTemplate也是超链接模版与上面HrefTemplate不同的是JSFunctionTemplate点击后触发的是js函数,而HrefTemplate是一个url。

ValueToTextTemplate状态模版当数据表内每条数据都有一个状态值需要显示时,需要此模板。

JSButtonTemplate在列中以按钮的形式显示,触发的是一个js函数

JSDButtonTemplate

JSTextBoxTemplate在列中以Textbox的形式显示

CheckTemplate一般用于列表的批量选择功能,显示与表格的第一列。

开发中还会需要其他显示格式,待具体开发中实现。

4.3SystemWeb


5、页面创建实例