BP框架开发指南

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

BP框架开发指南
济南驰骋信息技术有限公司
2014年4月
状态:修订中
BP目录
第1章: 总体说明....................................................................................错误!未定义书签。

1.0 致BP框架的使用者..................................................................错误!未定义书签。

1.1: BP框架的基类继承图...............................................................错误!未定义书签。

1.2: BP框架命名规范 ......................................................................错误!未定义书签。

1.3: BP的通用类库 ..........................................................................错误!未定义书签。

1.4: BP的前台web工程目录..........................................................错误!未定义书签。

1.5: Chichengsoft产品架构图..........................................................错误!未定义书签。

1.5.1: ccflow架构图 ....................................................................错误!未定义书签。

1.5.2: ccoa驰骋OA .....................................................................错误!未定义书签。

1.5.3: ccgpm驰骋权限管理 ........................................................错误!未定义书签。

第2章: BP.En30类库的基本使用..........................................................错误!未定义书签。

2.1: Web.config配置信息 ................................................................错误!未定义书签。

2.1.1: 通用配置部分....................................................................错误!未定义书签。

2.1.2: CCFlow配置部分...............................................................错误!未定义书签。

2.2: Log系统日志 .............................................................................错误!未定义书签。

2.3: 用户的登录登出与信息访问....................................................错误!未定义书签。

2.4: DBAccess与数据库交互 ...........................................................错误!未定义书签。

2.5: BP框架的数据表 ......................................................................错误!未定义书签。

2.5.1: 如何查看BP框架的表结构? ............................................错误!未定义书签。

2.5.2: BP的组织结构表...............................................................错误!未定义书签。

2.5.3: BP框架表 ..........................................................................错误!未定义书签。

2.5.4: 自定义表单表....................................................................错误!未定义书签。

2.6: 基类与实体类............................................................................错误!未定义书签。

2.6.1: 概述....................................................................................错误!未定义书签。

2.6.2: Map的作用、编写方法与内容 .......................................错误!未定义书签。

2.6.3: 实体类BP.En.Entity ............................................................错误!未定义书签。

2.6.4: BP.En.EntityNo ....................................................................错误!未定义书签。

2.6.5: BP.En.EntityNoName ..........................................................错误!未定义书签。

2.6.6: BP.En.EntityOID ..................................................................错误!未定义书签。

2.6.7: BP.En.EntityMyPK ...............................................................错误!未定义书签。

2.6.8: BP.En.EntityTree..................................................................错误!未定义书签。

2.6.9: BP.En.EntityMM ..................................................................错误!未定义书签。

2.6.10: Map属性的高级应用 .......................................................错误!未定义书签。

第3章: 基于BP框架的功能组件..........................................................错误!未定义书签。

3.1: 通用组件权限控制方法............................................................错误!未定义书签。

3.1.1: 对单个操作员的用户名控制............................................错误!未定义书签。

3.1.2: 对岗位权限的控制............................................................错误!未定义书签。

3.1.3: 对部门权限的控制............................................................错误!未定义书签。

3.1.4: 使用GPM对权限的控制方法..........................................错误!未定义书签。

3.2: 通用查询组件( /Comm/Search.htm) ........................................错误!未定义书签。

3.3: 通用分析组件( /Comm/Group.htm) .........................................错误!未定义书签。

3.4: 通用增\删\改\查\组件(/Comm/UIEn.htm) ..............................错误!未定义书签。

3.4.1: 展示效果............................................................................错误!未定义书签。

3.4.2: 使用map构造卡片上的帮助信息...................................错误!未定义书签。

3.5: 通用对比分析组件(/Comm/Contrast.htm) ..............................错误!未定义书签。

3.6: 通用维度分析组件....................................................................错误!未定义书签。

第4章: 应用场景与实现规范................................................................错误!未定义书签。

4.1: 使用JQ实现实体的增删改......................................................错误!未定义书签。

4.1.1: 说明....................................................................................错误!未定义书签。

4.1.2: 用到的通用方法................................................................错误!未定义书签。

4.1.3: 实现步骤............................................................................错误!未定义书签。

4.2: 单个实体数据采集....................................................................错误!未定义书签。

4.2.1: 使用pub控件 ...................................................................错误!未定义书签。

4.2.2: 使用自由格式控件............................................................错误!未定义书签。

4.3: 多个实体数据采集....................................................................错误!未定义书签。

4.3.1: 2D数据采集 ......................................................................错误!未定义书签。

4.3.2: 3D数据采集左部 ..............................................................错误!未定义书签。

4.3.3: 3D数据采集头部 ..............................................................错误!未定义书签。

4.4: 数据矩阵输出(N宫格输出) ......................................................错误!未定义书签。

4.4.1: 前台呈现............................................................................错误!未定义书签。

4.4.2: 后台代码............................................................................错误!未定义书签。

4.5: 不分页输出规范........................................................................错误!未定义书签。

4.5.1: 展示效果............................................................................错误!未定义书签。

4.5.2: 代码实现............................................................................错误!未定义书签。

4.6: 分页输出开发规范....................................................................错误!未定义书签。

4.6.1: 前台呈现............................................................................错误!未定义书签。

4.6.2: 后台呈现代码....................................................................错误!未定义书签。

第5章: 功能模块与流程结合实现规范................................................错误!未定义书签。

5.1: 功能模块的划分........................................................................错误!未定义书签。

5.2: 独立运行的功能模块开发规范................................................错误!未定义书签。

5.3: 流程支持的功能模块开发规范................................................错误!未定义书签。

5.4: 实体的增加、删除、更新、查看权限控制开发规范 ............错误!未定义书签。

5.4.1: 与GPM结合控制方案......................................................错误!未定义书签。

5.4.2: 不于GPM结合控制方案..................................................错误!未定义书签。

第1章:总体说明
在本章中介绍了BP框架的基础信息、设计思想、编写规范、使用案例模版。

1.0概要介绍
驰骋技术架构,简称BP框架。

BP框架形成于2002年,历经了众多项目的产品的考验稳定、高效、快速、成熟、可靠。

BP框架采用面向对象的思想、架构的灵魂是ORM,采用代码优先的策略,所有的应用都围绕ORM映射开展,比如对实体表的增删改查。

BP框架有一套丰富开发demo对于一个初级开发者使用2-3天就可以顺利掌握该框架的使用,架构浅显易懂、例子很多,容易上手。

BP框架是一个强制约定、具有较高的限定性、强约束的框架,只要您遵守开发规范,就可以编写符合BP架构的系统,而这个系统都可以被任何使用BP架构的程序员解读您的代码逻辑,真正的做到代码编写,千人一个风格,而非千人一个风格。

努力提高项目、产品的可持续性可维护性,可读性。

对于整体系统采用代码优先的策略,数据表自动创建,新增加的字段自动更新,字段长度变化,自动更新。

极大的减轻了数据库的维护压力。

使用BP框架可以方便的、优雅的书写您的业务逻辑,让您的代码更容易实现业务逻辑而无需编写SQL,还可以提高您对面向对象思想的理解与认知。

BP框架提供了丰富的功能组件,让系统的实现用户的页面功能简单,风格统一、直观,比较常用的几个组件如下:
查询组件:可以实现实体的增删改查,可以实现,多条件查询,数据导入导出。

分析组件:可以实现一个实体内的所有外键、枚举字段的分组,可以分析所有的数值类型的字段进行求和、求平均、求最大最小的分析。

在前端UI开发技术发展迅速的今天,BP架构与时俱进,可以支持全栈开发,极大的节省工作量。

2.0致BP框架的使用者
稳定成熟的开发架构是产品或者项目走向成功的保障。

任何一个软件公司在长期的项目研发,产品研发的过程中,都会积累一些可重用性的代码,目的是为了解决重复性的劳动,我们称为开发框架。

同样chichengsoft也是如此,我们的框架历经了多个项目的历练,稳定性、可靠性、灵活性都有保障。

Ccflow, ccoa, ccgpm , ccsso都是基于bp框架开发。

对于驰骋公司的任何员工,可以修改、扩展、提出改进意见但不能不遵守BP的开发规范。

1.1:BP框架的基类继承图
我会在以后的章节里详细介绍这个图.
1.2:BP框架命名规范
BP框架的命名规范,包括了类库的命名规范、类、字段。

1,类库的名称格式必须是以BP+”.”+”类库名称”,比如:BP.OA , BP.GPM ,编译后生成BP.OA.dll, BP.GPM.dll,否则不会被BP框架所反射、所解析。

2,类的命名空间必须是BP + 模块名称,比如BP.OA 存放OA的类库,BP.Port存放组织3,结构类库。

4,类的命名首字母必须大写,类的名称对于常见的可以简写,比如Dept, Emp,Station。

完整的类名为BP.Port.Dept, BP.Port.Emp, BP.Port.Station.对于是多个单词组成的实体每个单词需要首字母大写,比如:BP.Port.EmpStation人员与岗位的对应。

5,类属性的命名必须是首字母大写,比如:Tel, Email,Addr, PC。

如果是外键基本上需要FK_ 开头,比如:FK_Emp, FK_Dept, FK_Station。

如果是枚举,则建议使用Is开头比如:IsPass, IsEnable。

6,数据表的命名:该对应类的命名空间+“_”类名,比如:Port_Dept, Port_Emp,Sys_Enum。

字段的命名与该表对应的类的属性命名一致。

1.3:BP的通用类库
1.4:BP的前台web工程目录
用户数据存储目录:DataUser
系统配置目录:Data
通用组件目录:Comm
配置文件Web.config
1.5:Chichengsoft产品架构图
所有的产品都是基于基类库BP.En30开发的,它位于最底层。

1.5.1:ccflow架构图
1.5.2:ccoa驰骋OA
1.5.3:ccgpm驰骋权限管理
第2章:B P.En30类库的基本使用2.1:Web.config配置信息
2.1.1:通用配置部分
Ccflow配置部分
2.1.2:CCFlow配置部分
2.2:Log系统日志
2.3:用户的登录登出与信息访问
2.4:DBAccess与数据库交互
2.5:BP框架的数据表
BP在运行时候需要一些数据表支持,比如产生唯一的自动增长的int类型的数值OID, WorkID,需要保存用户的查询状态,选择的列等等,这些表都是以sys_开头的,我们称为BP框架的系统表,支持BP框架运行的组织结构表以Port_开头。

2.5.1:如何查看BP框架的表结构?
在BP看来,一个表对应一个或者多个实体类,每个实体类都是直接或者间接的从BP.Entity 中集成下来的。

BP框架根据反射自动的把所有的类反射到一个集合里然后用表格的方式输出出来,如果查看该类的详细信息,就可以看到该表的详细字段。

该功能的地址:http://localhost:1106/WF/Comm/Sys/SystemClass.htm或者
http://localhost:1106/Comm/Sys/SystemClass.htm
用户Port_Emp的描述:
我们以节点属性打开字段:
其实如果你打开数据表属性,就可以清晰的看到每个字段的中文说明:
2.5.2:BP的组织结构表
2.5.3:BP框架表
2.5.4:自定义表单表
2.6:基类与实体类2.6.1:概述
2.6.1.1:基类继承图首先我们看看继承图
解释:
1, BP所有的表,对应一个或者多个实体类,每个实体类都是间接或者直接的从BP.En.Entity 下继承的。

2, 以上的类的继承图是所有的基类图,也叫抽象类图,我们的设计人员在设计一个表时,都需要考虑该表的主键是OID, No, MyPK的哪一种,然后选择一个基类把它集成下来。

3, 下面的章节就要把每个基类的作用详细的介绍。

2.6.1.2:以一个实例来说明Entity使用方法.
请参考图片:
2.6.1.3:实体类的组成部分
实体类的定义:从BP框架基类继承图上继承下来的子类并重写父类的方法的子类称为实体类。

我们以BP框架的demo中的学生实体类BP.Demo.Student来讲述实体类的组成部分,与编写方法。

实体类由3部分组成的,实体属性列表、实体、实体集合。

2.6.1.
3.1:学生实体属性列表类
它仅仅是定义一个静态的字段列表,目的是为了防止在实体类,对字段或者属性拼写错误,定义他没有实际的运算意义。

2.6.1.
3.2:学生实体类
说明:该实体从BP.En.EtntiyNoName继承下来的。

一个实体类有三部分构成属性,构造,与重写基类的方法,请参考解决方案的类的源代码。

2.6.1.
3.2.1:属性的编写
我们把属性或者说字段分为三种类型普通、枚举、外键。

普通类:
比如:学号、姓名、地址、电话、邮件,用于标识实体一个数值、文字表达的出来的数据类字段,成为普通字段。

枚举类:性别:0= 女,1=男,状态:0未完成、1进行中、2已完成。

外键类:班级、科目、岗位、部门字段,用一个编号或者ID用来标识一个实体属性。

BP框架对以上字段的三种划分,我们定义为F3规则。

2.6.1.
3.2.1.1普通类字段的属性书写规则:
2.6.1.
3.2.1.2枚举类属性书写规则:
2.6.1.
3.2.1.3外键属性书写规则:
2.6.1.
3.2.2:构造方法
创建一个实例的方法:
第一个是构造一个空的实例,第二个是重写基类构造数据实体实例。

2.6.1.
3.2.3:重写属性与方法
重写的方法有:插入之前、插入之后、删除之前、删除之后、更新之前、更新之后。

重写的属性是Map,我们在下一个章节中重点讲解map。

2.6.1.
3.3:学生实体集合类
2.6.2:Map的作用、编写方法与内容
Map 英文名称为地图,可以理解为映射。

映射的思想是BP框架的灵魂。

我们通过上面map的实例来说明映射内容。

2.6.2.1:类与表的关系
类的属性,对应表的字段
2.6.2.2:基础信息的映射类对应的表,类的中文描述….
2.6.2.3:字段的映射
2.6.2.4:控件展现的映射
如上图:一个字段显示所使用的控件TextBox简写成TB,dropdownlistbox简写成DDL. 在表达上已经做了处理。

组件解析的map呈现的画面。

2.6.2.5:字段关系的映射
如上,一个字段是普通类型的字段,外键,还是枚举,都可以表达出来了。

2.6.2.6:查询条件的映射
查询条件对于实体列表来说的,设置丰富的查询条件对于用户的使用有较好的体验。

我们把查询条件分为多种。

2.6.2.6.1:外键查询条件:
组件的表现:
2.6.2.6.2:日期查询条件: 表达方式:
展示效果:
部门查询条件(树形结构实体)展示效果:
2.6.2.6.3:关键字的查询条件
第1个所示:
2.6.2.6.4:数值范围的查询条件
第2个圆圈:
2.6.2.6.5:隐藏的查询条件
2.6.2.6.6:查询条件的换行
对于外键的查询条件如果宽度大于1000系统就会自动换行,如下图所示:
展示实例
2.6.2.7:多对多的映射书写规则:
组件表现:
2.6.2.8:明细表的映射2.6.2.8.1:表达方式:
2.6.2.9:带有参数方法映射2.6.2.9.1:表达方式
2.6.2.10:不带参数的方法映射2.6.2.10.1:表达方式
点击功能执行后:
2.6.2.11:相关功能
2.6.2.11.1:打开url的一个demo
如果一个业务逻辑处理比较复杂,在BP框架上实现不了,需要单独的功能界面才能完成,BP框架给我们的开发增加了次功能。

比如在ccflow流程设计器中的=》节点属性=》抄送规则=》类BP.WF.Template.NodeExt
执行的方法返回一个Url,这个Url就是要打开的功能连接.
抄送规则的展现方式:
2.6.2.11.2:相关功能执行说明:
相关功能有如下几种执行类型:
枚举类型的如下:
总体说明:
1,默认为Func功能执行。

2,任何方法的执行都是要返回string。

3,对于功能类型的执行如果reutrn null 就不提示信息,否则就提示信息。

4,对于url模式的执行如果return null 就不显示该功能。

2.6.2.11.3:如何设置一个url类型的功能隐藏?
对于一个实体的url相关功能比较多,如果要隐藏一个Url的相关功能就return null就可以了。

方法内容:
2.6.3:实体类BP.En.Entity
该类是一个基类,他被其他的实体基类所集成,该类的提供了对一个实体的增加删除修改查询的。

2.6.4:BP.En.EntityNo
直接从该类集成的较少,但是从该类集成的基类EntityNoName较多,大概在80%以上,本文不做讲述,该基类的使用方法。

2.6.5:BP.En.EntityNoName
2.6.6:BP.En.EntityOID
2.6.7:BP.En.EntityMyPK
2.6.8:BP.En.EntityTree
2.6.9:BP.En.EntityMM
2.6.10:Map属性的高级应用
2.6.10.1:大块文本属性
在一些场合下,一个字段需要大块文本存储,超出8000个字符,比如备注,这样的字段,在数据库上有两种存储方式,第一种是2进制文件的方式存储,另外是字符集的存储。

为了适应更多第1中方式包含第2中方式。

为了适应多种场景,BP架构采取了第1中方式。

下面的demo演示了如何读取一个文件。

2.6.10.1.1:应用场景
2.6.10.1.2:实现方式
2.6.10.2:获得实时的map.
有的map数据是需要实时的生成出来而非需要从缓存里获取。

2.6.10.3:参数属性
2.6.10.
3.1:应用场景
以上我们介绍了一个属性对应一个字段,在实际开发中我们发现,需要把多个属性存储到一个字段里面去,这个字段用特定的字符隔开,比如:@IsEnable=1@IsReale=2@xxx=cccccc 我们把这样的属性叫做参数属性,下面我们以附件属性来介绍
这个附件属性有很多很多的字段控制点,如果每个属性都设置一个列的话,就会导致
Sys_FrmAttachment表
无限制的字段增长,所以这里引入了参数属性的一个概念。

首先在map里面增加一个参数属性。

2.6.10.
3.2:在类里表达规则
2.6.10.
3.3:在数据库体现
第3章:基于BP框架的功能组件
对于一个miss系统来说,BP框架的组件提供的功能就可以满足80%+的需要,所以系统分析人员在分析一个功能界面时,首先要考虑的BP的框架是否可以满足?如果不能满足,扩展BP框架是否可以满足?如果仍然不能,就要考虑个性化功能界面。

对于个性化的应用场景就需要从第4章中找。

BP框架给我们提供如下5中通用的组件,这些组件都是经历了很多项目的锤炼,如果用户对个性化的要求不高,我们尽量的使用组件完成实现用户的功能。

3.1:通用组件权限控制方法
每个实体基类都需要有一个属性UAC(User Access Contral),重写它,请参考下图。

对于这个实体的操作可以在这里进行控制。

3.1.1:对单个操作员的用户名控制
如上图:就表示只有admin用户可以进行增加删除修改的操作,其他用户只能查询.
3.1.2:对岗位权限的控制
3.1.3:对部门权限的控制
3.1.4:使用GPM对权限的控制方法
3.1.
4.1:第一步:定义该权限在GPM系统中。

首先需要在GPM里面做一个权限配置项目,并且获得它的标记。

上面的记录里,是我增加了一个功能控制点(注意这里不是目录或者功能界面), 然后他的标记是:IsCanAddNotice ,
3.1.
4.2:第二步:设置权限为该功能.
接下来就是为这个功能按照用户、岗位、部门、或者权限组定义权限。

3.1.
4.3:第四步写入代码控制
其次按照如下方法把权限控制编写到UAC里面。

3.2:通用查询组件( /Comm/Search.htm) 显示界面1:
显示界面2:
3.2.1:调用方法:
调用方法:
http://localhost:1106/WF/Comm/Search.htm?EnsName=BP.Port.Emps 或者:
http://localhost:1106/Comm/Search.htm?EnsName=BP.Port.Emps
把一个类名传给Search.htm 组件。

3.2.2:设置内容
3.2.3:数据导入设置
有的应用场景,需要数据导入到数据表里。

相关文档
最新文档