MES开发与应用 课件 模块3 车间配送管理模块_第1页
MES开发与应用 课件 模块3 车间配送管理模块_第2页
MES开发与应用 课件 模块3 车间配送管理模块_第3页
MES开发与应用 课件 模块3 车间配送管理模块_第4页
MES开发与应用 课件 模块3 车间配送管理模块_第5页
已阅读5页,还剩326页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.1单表功能开发深圳市信息职业技术学院需求说明及效果01目

录单表UML建模02单表功能开发实现步骤03数据库表生成及菜单配置04效果展示及功能验证05知识回顾业务端工程项目的搭建;网页端工程项目的搭建;桌面端工程项目的搭建;项目工程目录结构及规范;项目运行原理。学习目标通过本节学习可以:掌握单表功能的UML建模;掌握单表功能的开发实现,能独立完成单表功能的开发;掌握单表功能的菜单配置;掌握单表的数据库表和字段是如何生成的;能够根据需求对完成的功能进行测试;能够修复测试过程中的BUG。01需求说明及效果单表功能开发需求说明需求说明单表的功能开发,以读者分类功能的开发为例。功能逻辑列属性:类别号,类别名称,可借书数量,可借书天数,修改人和修改时间操作命令:查询、添加、复制添加、修改、删除、保存、导出查询条件:类别号和类别名称编辑模式:行内编辑类别号非空非重复,且修改时只读类别名称非空类别号和类别名称最大可输入长度为40可借书数量最小值为1本,且不允许输入小数和负数可借书天数最大值为180天,且不允许输入小数和负数修改人和修改时间列宽设置为200;效果效果02单表UML的建模思考题单表UML建模使用的建模工具是?UML建模UML建模1、双击打开ModelFirst工具,右边的项目总管的命名层级与项目工程一致,在中间设计部分“右键--新建--类”。UML建模2、根据需求说明,进行UML建模如下:UML建模UML建模3、建好的模型如下,完成后保存建模。UML建模UML建模4、建好的模型如下,完成后保存建模(注意要保存到一个有读写权限的文件夹下)。UML建模生成代码5、选中“类”右键“生成代码”。生成代码生成代码6、选中2018下面的模板(Entity.mft和WebViewConfig.mft),点击“Generate”生成代码。生成代码03单表功能开发实现步骤思考题单表功能开发的查询面板和查询条件是如何进行开发实现的?拷贝生成文件到项目中1、在“生成文件列表”中,选择ReaderCat这行数据,右键“打开所在文件夹”(如左图),连同文件夹一起复制粘贴到对应的服务端工程中(如右图)。拷贝文件到服务端工程拷贝生成文件到项目中2、点击ReaderCat类,添加名称空间的使用,生成不报错。处理报错和查询面板配置拷贝生成文件到项目中3、在“生成文件列表”中,选择ReaderCatViewConfig这行数据,右键“打开所在文件夹”(如左图),连同文件夹一起复制粘贴到对应的客户端工程中(如右图)。拷贝文件到Web端工程拷贝生成文件到项目中4、生成代码不报错,重写查询方法配置查询条件。处理报错和查询条件配置类别号修改只读设置5、类别号修改时只读,描述和实现如下。修改只读实现说明:后台获取或者设置实体的操作状态都可以用PersistenceStatus进行操作,这个属性在后台会频繁用到。隐藏创建人和创建时间6、列属性配置:类别号,类别名称,可借书数量,可借书天数,修改人和修改时间。列属性配置说明:列表默认是将创建人、创建时间、修改人和修改时间显示的,如果要隐藏需要手动设置设置修改人和修改时间列宽7、修改人和修改时间列宽设置为200。列宽设置界面验证设置8、类别号非空非重复,类别名称非空;类别号和类别名称最大可输入长度为40。界面验证设置界面验证设置9、可借书数量最小值为1本,且不允许输入小数和负数;可借书天数最大值为180天,且不允许输入小数和负数。界面验证设置界面验证设置设置完成后,需要在实体元数据中“更新”或者“选择更新”,生成对应规则为启用才会生效,这一步可以配置菜单后再一起操作。界面验证设置注意:实体元数据生成的规则,即使代码把相应规则删掉了,这里的规则也不会自动删除,界面的验证还会生效,如果要移除需要手动进行删除或者是在规则中禁用。知识扩展对生成的实体进行一个简单的说明是为了后续如果不通过实体建模通过代码实现,知道怎么去定义一个实体进行功能开发实现,或者是实体出现了问题,知道从哪些地方去排查。实体配置说明知识扩展ViewConfig界面配置说明。界面配置说明知识扩展列属性配置。界面配置说明初始菜单配置11、在Web端工程(SIE.Web.LibMan)的LibModule中配置初始菜单。初始菜单配置04数据库表生成及菜单配置思考题通过程序的升级数据库功能,除了生成表还会生成?生成数据库表1、运行项目,在“实体元数据”中升级数据库表和序列,生成完成后会在数据库中新建一张表和两个序列如右图。生成表更新元数据2、更新实体元数据:我们在ReaderCat实体中加了验证,如果不进行更新操作,添加的验证不会生效。更新规则配置菜单3、配置菜单。配置菜单05效果展示及功能验证效果预览点击功能地图中刚刚配置的菜单,效果如下。效果预览效果预览验证通过的数据可以正常保存数据,验证不通过会有对应的提示信息,这样一个单表功能就开发完成了。效果预览练习1、以下关于ModelFirst实体建模,类的属性说法正确的是()A:同一个类的属性可以重名;

B:类属性的备注不添加,不会有任何影响;C:类的属性名可以是Id;

D:类的属性名不能为CreateBy。2、

SMOM开发界面视图配置方法中,首先执行的是哪个视图配置方法()A:ConfigView; B:ConfigListView;C:ConfigDetailsView; D:ConfigQueryView。DA本章小结本章主要讲解了工业管理软件单表功能的开发,包括:根据需求进行UML建模;根据UML选择模型生成代码;将生成的代码拷贝到项目中根据业务需求修改完善代码;配置初始菜单;运行项目生成数据库表、更新元数据和配置菜单;根据业务需求对完成的功能进行测试和问题修复。单表功能在工业管理软件开发中较基础也较重要,学员必须掌握,为接下来的学习打下基础。THANKYOU深圳市信息职业技术学院3.2带关系单表功能开发深圳市信息职业技术学院需求说明及效果01目

录带关系单表UML建模02带关系单表功能开发实现步骤03数据库表生成及菜单配置04效果展示及功能验证05知识回顾根据需求进行单表功能UML建模;单表功能的开发实现步骤;初始菜单配置;数据库表和序列的生成;实体元数据的更新生成规则;配置菜单及功能验证学习目标通过本节学习可以:掌握带关系单表功能的UML建模;掌握带关系单表功能的开发实现,能独立完成带关系单表功能的开发;掌握带关系单表功能的菜单配置;掌握带关系单表的数据库表和字段是如何生成的;能够根据需求对完成的功能进行测试;能够修复测试过程中的BUG。01需求说明及效果带关系单表功能开发需求说明需求说明开发一个读者管理功能,读者管理的类别号关联到读者分类的类别号,具体业务描述如下:功能逻辑列属性:读者编号、姓名、类别号(下拉选择实现,取的是读者分类的类别号)、类别名称(类别名称根据选择的类别号自动带出,只读)、单位、手机号、微信、已借书数量、创建人、创建时间、修改人和修改时间操作命令:查询、添加、修改、删除、复制新增、保存、导出查询条件:读者编号、姓名、类别号、修改时间(默认当前周)编辑模式:行内编辑读者编号非空,姓名非空,类别号非空,单位非空读者编号和姓名最大可输入长度为20效果效果02带关系单表的UML建模思考题数据库外键关系在UML建模中是如何实现的?UML建模UML建模1、将业务需求转化为UML建模,实现如下,类别号通过关联关系实现,类别名称不在模型中体现。UML建模UML建模2、类属性的类型和验证如下。UML建模3、“类别号”通过“关联”关系去关联了读者分类的实体。UML建模UML建模4、建好模型后,保存UML模型,选择读者管理的类,右键-生成代码。UML建模生成代码5、选中2018下面的模板(Entity.mft和WebViewConfig.mft),点击“Generate”生成代码。生成代码03带关系单表功能开发实现步骤思考题类别号的下拉列表要正常显示和操作,需要做哪些开发实现?拷贝生成文件到项目中1、在“生成文件列表”中,选择ReaderMan这行数据,右键“打开所在文件夹”,连同文件夹一起复制粘贴到对应的服务端工程中。拷贝文件到服务端工程拷贝生成文件到项目中2、点击ReaderMan类,添加名称空间的使用,生成不报错。处理报错和查询面板配置拷贝生成文件到项目中3、同样的在“生成文件列表”中,选择ReaderManViewConfig这行数据,右键“打开所在文件夹”,连同文件夹一起复制粘贴到对应的客户端工程中。拷贝文件到客户端工程拷贝生成文件到项目中4、添加名称空间的使用,生成代码不报错,重写查询方法配置查询条件。处理报错和查询条件配置下拉选择配置5、实体引用属性说明:通过类图关联关系生成的实体引用属性不会生成label,需要在实体中手动添加Label。下拉选择配置下拉选择配置6、关联关系会生成两个属性名,一个是id,一个是关联的实体,说明如下。下拉选择配置下拉选择配置7、引用属性界面配置说明:通过类图生成的ViewConfig的引用属性是用的实体属性,会造成N+1的问题,需要调整为Id去处理。下拉选择配置调整为:下拉选择配置8、下拉表格列和数据显示不出来,需要在关联的实体对应的界面中去配置选择视图的列属性;如类别号关联的是读者分类,则在读者分类的界面去配置选择视图的属性,如下。下拉选择配置下拉选择配置9、配置前后对比。下拉选择配置下拉显示配置10、下拉表格配置好后,发现选择的数据在界面无法显示,应该如何配置。下拉显示配置下拉显示配置11、通过在关联实体上标记特性显示成员DisplayMember进行配置。下拉显示配置下拉查询条件配置12、下拉弹出列表查询条件的配置,默认是以显示名称作为模糊查询条件,如果还要配置其他的查询条件,可以在实体中配置QueryMembers。下拉查询条件配置下拉联动设置13、类别名称因为是只读显示,这里我们使用视图属性实现,视图属性属于界面操作属性,不映射数据库字段。下拉联动设置注意:视图属性依赖于引用属性,如果实体中没有引用属性,无法使用视图属性。下拉联动设置14、联动显示在界面中配置,通过框架默认下拉编辑器UsePagingLookUpEditor的DicLinkField进行配置。下拉联动设置注意:dic字典的value值,只能贪婪加载一层(也就是只支持“实体.引用属性.属性名”,不支持“实体.引用属性.引用属性.属性名”)。下拉联动设置15、选择或者是切换“类别号”,“类别名称”的内容会自动变更对应选择“类别号”关联的“类别名称”。下拉联动设置注意:1.如果界面的查询方法重写了,重写的查询方法一定要加贪婪加载,否则默认查询带出的类别名称是空白的;2.该功能是使用的框架自带的查询,框架默认做了贪婪加载,不需要额外处理。初始菜单配置在Web端工程(SIE.Web.LibMan)的LibModule中配置初始菜单。初始菜单配置04数据库表生成及菜单配置生成数据库表1、运行项目,在“实体元数据”中升级数据库表和序列,生成完成后会在数据库中新建一张表和两个序列如右图。生成表更新元数据2、更新实体元数据:我们在ReaderMan实体中加了验证,如果不进行更新操作,添加的验证不会生效。更新规则配置菜单3、配置菜单。配置菜单05效果展示及功能验证效果预览点击功能地图中刚刚配置的菜单,效果如下。效果预览效果预览验证通过的数据可以正常保存数据,验证不通过会有对应的提示信息,这样一个带关系单表功能就开发完成了。效果预览练习1、在实体类中任何情况下都可以使用视图属性()2、设置下拉列表选择之后的显示名称是在实体上标记DisplayMember特性,该特性关系的属性可以是引用实体或者是视图属性()3、本地代码调试中,SMOM开发中配置的菜单显示不出来,可能的原因()A:WebClient调试工程可能没有添加对应菜单的工程引用;B:功能对应的客户端工程选择的目标框架不符合要求;C:功能对应的客户端工程的初始化类有没有添加模块标记特性,如果添加了,可能添加的不对;D:没有在菜单功能中进行模块初始化操作;错错ABCD本章小结本章主要讲解了工业管理软件带关系单表功能的开发,包括:根据需求进行UML建模;根据UML选择模型生成代码;带关系单表功能的开发步骤;配置初始菜单;运行项目生成数据库表、更新元数据和配置菜单;根据业务需求对完成的功能进行测试和问题修复;能够理解和区分单表和带关系单表开发的异同点。带关系单表功能开发需要在单表的基础上进行学习,这部分的内容在工业管理软件开发中较基础也较重要,学员必须掌握。THANKYOU深圳市信息职业技术学院3.3主从表功能开发深圳市信息职业技术学院需求说明及效果01目

录主从表UML建模02主从表功能开发实现步骤03数据库表生成及菜单配置04效果展示及功能验证05知识回顾根据需求进行带关系单表功能UML建模;带关系单表功能的开发实现步骤;下拉选择列表、显示名称、查询条件的开发配置;初始菜单配置;数据库表和序列的生成;实体元数据的更新生成规则;配置菜单及功能验证学习目标通过本节学习可以:掌握主从表功能的UML建模;掌握主从表功能的开发实现,能独立完成主从表功能的开发;掌握主从表功能的菜单配置;掌握主从表的数据库表和字段是如何生成的;能够根据需求对完成的功能进行测试;能够修复测试过程中的BUG;通过主从表的开发能够延伸出多个从、主从孙结构的开发实现;01需求说明及效果带关系单表功能开发需求说明需求说明以图书分类功能的开发为例,功能描述如下:功能逻辑主列表属性:分类编码、分类名称、图书状态(枚举,包括在馆和不在馆)、备注、创建人、创建时间、修改人和修改时间主列表操作命令:查询、添加、修改、删除、导出查询条件:分类编码、分类名称、图书状态明细列表属性:小类编码、小类名称、备注、创建人、创建时间、修改人和修改时间明细列表操作命令:添加、修改、删除、复制添加、保存和导出主和明细布局4:6显示主编辑模式:表单编辑;明细编辑模式:行内编辑主表添加修改命令两列显示,备注占三行两列分类编码和分类名称非空,分类编码和分类名称非重复,分类编码最大输入长度为15,类别名称最大输入长度为50明细添加修改验证小类编码和小类名称非空,分类编码最大输入长度为15,类别名称最大输入长度为50效果效果02主从表的UML建模思考题主从结构的关系在UML建模中是如何实现的?UML建模UML建模1、图书大类的建模:建模只建业务相关属性,注意业务属性不要跟框架的属性冲突。UML建模UML建模1、图书状态的枚举类。UML建模UML建模3、图书小类的建模:建模只建业务相关属性,注意业务属性不要跟框架的属性冲突。UML建模UML建模4、图书大类和图书小类的关系。UML建模5、组合关系说明。UML建模注意:框架的关联关系、枚举、组合关系,一定是通过关系进行处理(默认关系的名称为空白,会根据类名去生成,如果要更改关系的名称,注意不要跟类中添加的属性名称冲突),不要在类中去建模属性。生成代码6、建好模型后,保存UML模型,选择图书分类的类,右键-生成代码。生成代码生成代码7、选中2018下面的模板Entity.mft,点击“Generate”生成代码。生成代码生成代码8、选择图书分类的类,右键-生成代码。生成代码生成代码9、选中2018下面的模板WebViewConfig.mft,点击“Generate”生成代码。生成代码03主从表功能开发实现步骤思考题子属性在ViewConfig是如何配置实现的?拷贝生成文件到项目中1、在“生成文件列表”中,将Entity.mft模型生成的文件连同文件夹一起复制粘贴到对应的服务端工程中。拷贝文件到服务端工程处理报错和配置查询面板2、添加名称空间的使用,生成不报错,并将图书大类的[CriteriaQuery]取消注释。处理报错和查询面板配置拷贝生成文件到项目中3、同样的在“生成文件列表”中,将WebViewConfig.mft模型生成的文件连同文件夹一起复制粘贴到对应的客户端工程中。拷贝文件到客户端工程处理报错4、通过ModelFirst生成的主界面的子属性是异常的,生成的代码如下。处理报错子属性修改如下:查询条件配置5、在主实体对应的界面配置查询条件,子实体不配置(主实体配置了查询面板,子实体不要配置)。查询条件配置界面配置修改6、主列表设置父子显示比例、启用表单编辑模式、移除复制新增按钮

。界面配置修改界面配置修改7、主界面添加修改界面配置。界面配置修改初始菜单配置在Web端工程的初始化类中配置初始菜单。初始菜单配置04数据库表生成及菜单配置生成数据库表1、运行项目,在“实体元数据”中升级数据库表和序列,生成表和序列如右图。生成表更新元数据2、更新实体元数据:我们在图书大类和图书小类实体中加了验证,如果不进行更新操作,添加的验证不会生效。更新规则配置菜单3、配置菜单:先更新功能模块,更新完成后配置菜单配置菜单05效果展示及功能验证效果预览点击功能地图中刚刚配置的菜单,效果如下。效果预览效果预览添加修改命令界面效果。效果预览思考题主从结构开发,编辑界面打不开,出现js报错。总结1、实体建模的命名要规范,文件的层级与项目工程的层级保持一致,避免出现不规范引发的异常;2、实体建模组合关系生成出来的是单向的,需要手动将箭头去掉;3、如果使用代码段建组合关系,子和组的引用关系要指向父;4、实体属性标记的验证规则需要进行实体元数据的更新才会生效;5、创建的属性不要跟框架的属性冲突;6、通过SQL语句创建的表,除了创建表还得创建表对应的序列,否则操作数据会出现异常;7、子实体不要进行菜单配置,配置菜单只配置根实体;总结练习1、主从表功能开发,使用标准查询配置界面的查询条件是在哪里配置?()A:主实体对应的ViewConfig的ConfigQueryView方法中配置;B:子实体对应的ViewConfig的ConfigQueryView方法中配置;C:主实体上标记特性[CriteriaQuery];D:子实体上标记特性[CriteriaQuery]。2、主从表配置菜单需要把主实体和子实体都配置菜单。()A错本章小结本章主要讲解了工业管理软件主从表功能的开发,包括:根据需求进行UML建模;根据UML选择模型生成代码;主从表的开发实现步骤;配置初始菜单;运行项目生成数据库表、更新元数据和配置菜单;根据业务需求对完成的功能进行测试和问题修复;能够对功能进行扩展,完成一主多从、主从孙关系的功能开发实现。主从表功能开发的内容在工业管理软件开发中较基础也较重要,学员必须掌握。THANKYOU深圳市信息职业技术学院3.4平台通用配置深圳市信息职业技术学院——验证规则配置实现目

录验证规则开发实现示例01框架验证规则实现逻辑介绍02框架验证规则实现03经验总结04知识回顾根据需求进行主从表功能UML建模;主从表功能的开发实现步骤;初始菜单配置;运行项目生成数据库表、序列、更新元数据和配置菜单;能够独立进行主从表功能的问题修复;能够对功能进行扩展,完成一主多从、主从孙关系的功能开发实现学习目标通过本节学习可以:掌握框架验证规则包括哪几种实现方式,不同的实现方式有什么差异?掌握不同验证规则的开发实现步骤;能够修复验证规则开发过程中的bug。01验证规则开发实现示例思考题通过前面课程的学习,我们知道框架验证可以在哪里进行配置实现?可以在实体属性中标记规则特性,然后进行实体元数据的更新。业务描述业务描述读者分类增加验证:

读者分类被读者管理引用后,不允许删除读者管理增加验证:1、读者编号、姓名联合验证唯一2、手机号验证输入格式3、已借书数量不能大于读者分类中维护的可借书数量开发实现-读者分类被读者管理引用后不允许删除实现逻辑:可以用框架的规则去实现,引用后不允许删除使用框架的引用规则,需要自己在服务端建一个规则类,以Rule进行结尾,继承NoReferencedRule进行实现,如下图实现:开发实现开发实现-读者管理中读者编号、姓名联合验证唯一实现逻辑:该验证的实现可以使用非重复验证来实现,这里以规则类的方式开发实现:开发实现开发实现-读者管理中手机号输入格式验证实现逻辑:该验证的实现可以使用实体规则进行验证,也是需要建一个规则类进行实现:开发实现开发实现-已借书数量不能大于读者分类中维护的可借书数量实现逻辑:该验证的实现也可以通过实体规则进行验证。开发实现注意:以上所有的规则实现都要进行实体元数据的更新才会生效,修改了对应的规则需要重新进行实体元数据的更新。思考题前面示例验证规则的实现中,继承的父类包括哪些?02框架验证规则实现逻辑介绍框架验证规则实现逻辑介绍通过前面单表、主从表的开发和刚刚的验证规则示例中可以看出,我们的规则可以在实体属性中标记特性进行实现,也可以在服务端定义规则类进行实现,之间有什么差异呢?从实现可以看出,在实体中标记的特性只能是对该属性的简单验证;对于复杂验证或者是属性之间的联合验证无法在实体中标记特性,就需要引入规则类进行实现。两者的相同点就是:实现完成后都需要进行实体元数据的更新才会生效。框架验证规则实现逻辑框架验证规则实现逻辑介绍框架验证规则逻辑的实现:框架针对单个属性的简单验证是在实体属性中标记特性进行实现的(这些也可以在验证方法中进行实现),框架在生成表格或者表单的时候,将属性的这些特性和属性对应Ext控件一起生成返回到前端,然后前端解析将可以转换为Ext控件的验证规则转换为控件规则,在操作控件时,在对应控件中有红色框框显示(这种是做了前后端双重验证);不能转换的,保存数据时给出具体的异常提示(只做了后台验证)。对于复杂的验证,如规则类中实现的规则,是无法解析为对应控件的验证,则是在后台进行数据的验证处理,即通过RF.Save()保存数据前,去调用实体对应的验证,验证不通过给出具体的异常提示(走的后台验证)。框架验证规则实现逻辑03框架验证规则的实现思考题框架验证规则的实现方式包括几种?分别是?框架验证规则实现方式框架通用的验证方式,框架提供了三种实现方式,分别为运行时规则、标准规则和预编译规则。1、运行时规则:1)通过在实体元数据模块进行运行时配置的规则,如字段长度、非空等验证。如果是部署的服务,添加或者修改了配置规则,需要重启服务。2)在实体属性中标记特性,只能标记非空,非重复,最大长度,最小长度,最大值和最小值,标记的特性是针对单个属性的验证,标记完成后需要对实体元数据进行更新操作,验证才会生效。说明:该种方式实现的规则如果在实体元数据规则类中把对应规则禁用了,即使在代码中标记了对应的规则,也不会生效;规则删除后,实体元数据的规则不能自动删除,需要手动把对应的规则删除或者是禁用。验证规则的实现方式框架验证规则实现方式2、标准规则:在实体配置中重写AddValidations()方法实现规则验证,编写代码运行项目后立即生效,不可配置。3、预编译规则:通过C#代码的方式实现验证规则,然后在实体元数据功能进行更新并配置启用。包含的规则父类:实体规则(继承EntityRule<T>)、非重复规则(继承NotDuplicateRule<T>)、删除被引用规则(继承NoReferencedRule<T>)说明:预编译规则也需要在实体元数据中进行更新才会生效,如果规则的类名修改了,原来类名生成的规则不会自动删除,会根据新的类名重新生成一条规则。验证规则的实现方式运行时规则实现1、在“实体元数据(数据字典)”菜单的“实体规则”页签中,维护规则,做基础的验证。运行时规则实现说明:在项目开发阶段不建议在该界面直接维护规则。运行时规则实现2、在实体属性中配置验证规则,包含的验证:

非空验证:[Required]

非重复验证:[NotDuplicate]

最大长度验证:[MaxLength(40)]

最小长度验证:[MinLength(2)]

最大值验证:[MaxValue(9999)]

最小值验证:[MinValue(1)]

示例:运行时规则验证示例,如读者分类中类别号的验证:运行时规则实现运行时规则实现注意事项:1、验证要生效,必须进行实体元数据的更新,且规则状态是启用状态才会生效;2、实体属性配置的规则删除,元数据生成的规则不会自动删除,需要手动删除或者禁用,否则规则还会生效;3、引用属性的非空验证是通过属性的类型进行验证的,不要在引用属性中标记非空特性[Required],否则非空验证的提示会提示两次。运行时规则实现标准规则实现标准规则是在实体配置中重写添加验证方法AddValidations进行实现:标准规则实现1、标准规则中可以实现运行时规则和预编译规则中实现的所有规则(虽然可以实现,但是被引用删除规则建议还是使用预编译中删除被引用的规则实现,减少开发的代码量);2、标准规则与运行时和预编译规则的差异:标准规则不可配置,运行时和预编译规则可配置。标准规则实现标准规则中可以实现的验证:1、非空验证;rules.AddRule(属性名,newRequiredRule());2、非重复验证,单个和多个属性的非重复验证;

单个属性非重复验证:rules.AddRule(属性名,newNotDuplicateRule());

多个属性非重复验证

rules.AddRule(newNotDuplicateRule()

{Properties=

{

属性名1,

属性名2

},MessageBuilder=(e)=>

{return“验证不通过的提示信息".L10N();

}

});标准规则实现标准规则实现3、长度验证,包括最小和最大长度的设置;

rules.AddRule(属性名,newStringLengthRangeRule(){Min=2,Max=40});4、最大最小值验证;rules.AddRule(属性名,newNumberRangeRule(){Min=1,Max=100});5、正则表达式验证;

rules.AddRule(属性名,newRegexMatchRule(){Regex=newRegex(@"^((\d{3}-\d{8}|\d{4}-\d{7,8})|(0?(13|14|15|17|18|19)[0-9]{9}))$"),MessageBuilder=(o)=>{ return"电话号码不正确";}});标准规则实现标准规则实现6、实体验证

rules.AddRule(newHandlerRule(){Handler=(o,e)=>{

//这里可以进行查数据库进行操作,当前实体的数据不能满足验证判断要求时可查数据库判断varreader=o.CastTo<实体类>();if(判断的条件)

e.BrokenDescription=“具体的验证提示信息".L10nFormat(reader.Name);}});标准规则实现标准规则实现示例读者管理中通过标准规则验证实现如下验证:读者编号非空,姓名非空,单位非空读者编号,姓名联合验证唯一读者编号和姓名最大可输入长度为20手机号需要验证格式已借书数量不能大于可借书数量标准规则实现示例预编译规则实现预编译规则也是需要对实体元数据进行更新,编写的规则才会生效;1、非重复规则:继承NotDuplicateRule<T>,在构造函数中实现非重复逻辑预编译规则实现[System.ComponentModel.DisplayName(“规则名称信息")][System.ComponentModel.Description(“规则描述信息")]

public

class

XXXRule:NotDuplicateRule<T>

{

public

XXXRule()

{Scope=EntityStatusScopes.Update|EntityStatusScopes.Add;Properties.Add(属性1);Properties.Add(属性2);MessageBuilder=(e)=>

{

vart=easT;//e为对应的实体

return

“验证不通过的提示信息[{0}]”.L10nFormat(t.A);//{0}为参数设置

};

}

}规则作用域,用Scope进行设置,默认为Add和Update。非重复验证的属性,只能设置数据库存在的字段属性,且不能是复杂属性提示信息,可不设置,非重复框架有默认的提示。预编译规则实现2、被引用不允许删除:继承NoReferencedRule<T>,在构造函数中实现被引用不能删除的逻辑。预编译规则实现[System.ComponentModel.DisplayName(“规则名称信息")][System.ComponentModel.Description(“规则描述信息")]

public

class

XXXRule:NoReferencedRule<T>

{

public

XXXRule()

{Scope=EntityStatusScopes.Delete;Properties.Add(被引用的属性名);MessageBuilder=(e,c)=>

{

varcat=easT;

return

“被引用删除的提示信息{0}”.L10nFormat(c);

};

}

}规则作用域,用Scope进行设置,默认为删除,通常不用设置。只能是引用Id属性,通过其他实体.引用Id属性名加载出来。验证不通过的提示信息,引用不允许删除框架有默认提示信息,如果想修改框架的提示信息可通过此属性添加,其中e为实体,c为被引用的次数。预编译规则实现3、实体规则:继承EntityRule<T>,在这个规则中可以实现所有规则。预编译规则实现[System.ComponentModel.DisplayName("规则名称信息")][System.ComponentModel.Description("规则描述信息")]

public

class

XXXRule:EntityRule<T>

{

public

XXXRule()//构造函数

{Scope=EntityStatusScopes.Add|EntityStatusScopes.Update;//规则作用域默认为新增和修改,如果是只在添加操作生效,可以对该属性进行规则设置ConnectToDataSource=false;

}

protected

override

voidValidate(IEntityentity,RuleArgse)//验证方法

{ //这里可以调用控制器方法对数据库进行操作

vart=entityasT;//entity为当前验证的实体

if(验证的条件)e.BrokenDescription=“验证不通过的提示信息{0}".L10nFormat(t.A);

}

}是否连接数据仓库,默认为false,如果在验证方法中有对数据库进行操作,该属性要设置为true。思考题标准规则的实体验证和预编译规则的标准规则,都能实现所有的验证,有什么区别?04经验总结经验总结标准验证AddValidations和预编译验证(在服务端编写验证规则类)是两种不一样的实现方式,同一逻辑用两种方式验证的效果是一样的,只是其中一种是代码所见即所得,一种是可配置;在项目上对应的验证逻辑,根据实际需要选择其中一种方式实现即可;非重复验证尽量使用框架非重复的子类进行验证,不要在实体规则中进行验证,原因是写的逻辑比较多,还有可能写漏,用框架的非重复验证会简单很多,也避免一些不必要的bug出现;被引用不允许删除尽量使用框架的,原因与非重复验证一致;String类型的长度验证,框架默认配置的长度是20,如果有些字段需要设置为其他的长度限制,需要自己手动设置,如果框架string类型的长度限制都需要调整,可以在配置文件中配置DefaultFieldMaximumLength。框架的这些验证都是在调用RF.Save()保存数据库前进行校验的,使用DB操作数据库验证不会生效。经验总结思考题在部署好的服务中,为什么增加或者修改实体元数据对应功能的规则不生效?使用db或者sql语句执行数据库保存操作,验证规则未生效?修改实体元数据的规则要重启服务后才能生效。框架的实体规则是要在通过实体仓库保存数据前才会执行,通过db和sql直接操作数据库不会执行。练习1、框架验证规则是什么时候执行的()A:数据添加时; B:数据修改时;C:数据保存前; D:数据删除时。2、被引用不允许删除规则的作用域是新增和修改。()3、标准规则需要进行实体元数据的初始化才会生效。()C错错本章小结本章主要讲解了工业管理软件验证规则的实现,包括:框架验证规则的实现逻辑;运行时验证规则的开发实现步骤与配置;标准规则的开发实现;预编译规则的开发实现;框架验证规则是在什么情况下执行的。验证规则在整个工业管理软件开发中比较重要,学员要能够根据不同的业务需求选择合适的验证规则去实现对应的业务验证逻辑,并且遇到问题能够定位和修复。THANKYOU深圳市信息职业技术学院3.4平台通用配置深圳市信息职业技术学院——提交事件目

录提交事件课题导入01提交前事件02提交后事件03经验总结04知识回顾框架验证规则的实现逻辑;运行时验证规则的开发实现步骤与配置;标准规则的开发实现步骤;预编译规则的开发实现步骤;验证规则使用的注意事项;学习目标通过本节学习可以:掌握提交前事件的开发实现步骤;掌握提交后事件的开发实现步骤;掌握使用提交事件应该注意哪些问题;了解框架提交事件的应用场景。01提交事件课题导入课题导入在做功能开发时,对于一些功能或者是框架通用的逻辑,我们常规的开发思路是写一个通用的方法,需要用到这个方法时去调用该方法,这种方式是需要开发人员自己写代码去调用;提交事件是针对上述这种通用逻辑引入的,将功能的一些通用逻辑写到提交事件的方法中,由框架统一去执行,不需要自己额外去调用。提交事件介绍提交事件介绍提交事件:分为提交前和提交后事件。提交前事件:针对某个实体,保存之前的通用逻辑处理,可以使用提交前事件处理;程序在调用RF.Save()保存实体数据之前框架会自动去调用提交前事件的方法执行对应的逻辑。提交后事件:针对某个实体,保存之后的通用逻辑处理,可以使用提交后事件处理;程序在调用RF.Save()保存实体数据之后框架会自动去调用提交后事件的方法执行对应的逻辑。02提交前事件提交前事件开发示例实现步骤业务描述:读者管理功能数据保存前,如果读者管理的操作为新增时,将读者管理关联的读者分类的更新时间设置为当前操作时间。该业务实现使用提交前事件来处理,实现步骤如下:1、在服务端新建一个类,以Submitting结尾,继承OnSubmitting,关联实体为读者管理的实体类提交前事件开发步骤提交前事件开发示例实现步骤2、鼠标点击报错的地方,实现抽象类。提交前事件开发步骤提交前事件开发示例实现步骤3、给提交前事件类增加名称DisplayName和描述Description信息。提交前事件开发步骤提交前事件开发示例实现步骤4、实现业务逻辑:读者管理的操作为新增时,将读者管理关联的读者分类的更新时间设置为当前操作时间。提交前事件开发步骤提交前事件开发示例实现步骤5、运行项目,进行实体元数据的更新,会在读者管理的提交前事件的子页签生成一笔对应的数据,如下:提交前事件开发步骤提交前事件开发示例实现步骤6、可以在Invoke方法中设置断点,在读者管理中插入一笔数据点击保存,在读者分类中查看效果,可以看到修改时间更新了。提交前事件开发步骤思考题提交前事件的命名规范?该类是添加在服务端工程还是客户端工程?提交前事件继承的父类是?03提交后事件提交后事件开发示例实现步骤业务描述:读者管理功能数据保存后,如果读者管理的操作状态为修改时,且管理的读者分类为学生时,更新对应读者分类的可借书天数,可借书天数在原来的基础上加1,当可借书天数>=90时,不执行更新操作;该业务实现使用提交前事件来处理,实现步骤如下:1、在服务端新建一个类,以Submitted结尾,继承OnSubmitted,关联实体为读者管理的实体类提交后事件开发步骤提交后事件开发示例实现步骤2、鼠标点击报错的地方,实现Invoke抽象类。提交后事件开发步骤提交后事件开发示例实现步骤3、给类增加名称DisplayName和描述Description信息提交后事件开发步骤提交后事件开发示例实现步骤4、实现业务逻辑。提交后事件开发步骤提交后事件开发示例实现步骤5、运行项目,进行实体元数据的更新,会在读者管理的提交后事件的子页签生成一笔对应的数据,如下:提交后事件开发步骤提交后事件开发示例实现步骤6、可以在Invoke方法中设置断点,在读者管理中修改一笔读者分类为学生的数据,在读者分类中查看效果。提交后事件开发步骤思考题提交后事件与提交前事件的区别?04经验总结经验总结1、提交前、提交后事件使用要生效,必须进行实体元数据更新,状态为可用;2、每次修改了提交前或者提交后事件,也必须进行实体元数据的更新;3、提交事件后台代码删除,在实体元数据对应提交事件子列表的数据不会删除,需要手动去提交事件子页签将对应数据禁用,或者是在后台数据库将数据删除。

提交事件的表为:MDA_ENTITY_SUBMIT_EVENT,通过DISCRIMINATOR区分为提交前后事件;DISCRIMINATOR=‘A’,为提交前事件;DISCRIMINATOR=‘B’,为提交后事件;经验总结经验总结4、提交事件后台的类名修改了,修改之前通过“更新”生成的提交事件对应的数据程序不会删除,会重新再生成一笔数据;也就是提交事件在“更新”之后修改了类名,需要把修改类名之前的数据禁用或者从数据库中删除。5、提交事件只有通过RF.Save()进行实体保存时才会执行,如果是通过DB操作的数据,或者是其他批量保存,不会执行对应的提交逻辑。6、编写提交事件要避免出现死循环,当Invoke方法中有通过RF.Save保存提交事件关联的实体就会出现死循环。经验总结思考题使用DB或者sql语句保存数据,提交事件为什么没执行进去?提交事件只有使用RF.Save()保存数据才会执行。练习1、框架验证规则是什么时候执行的()A:数据添加时; B:数据修改时;C:数据保存前; D:数据删除时。2、被引用不允许删除规则的作用域是新增和修改。()3、标准规则需要进行实体元数据的初始化才会生效。()C错错本章小结本章主要讲解了工业管理软件的提交事件,包括:提交事件的使用场景;提交前事件的开发实现步骤;提交后事件的开发实现步骤;提交事件的经验总结。学员要了解提交事件的使用场景,选择更切合业务场景的方式进行提交事件的开发实现,过程中遇到问题,能够进行调试定位问题并修复。THANKYOU深圳市信息职业技术学院3.4平台通用配置深圳市信息职业技术学院——控制器与界面分组介绍目

录控制器实现介绍01框架分组介绍及自定义分组的实现方式02自定义分组的实现示例03自定义分组的注意事项04知识回顾提交事件的使用场景介绍;提交前事件的开发实现步骤;提交后事件的开发实现步骤;提交事件的经验总结;学习目标通过本节学习可以:掌握控制器的使用;掌握自定义分组的开发实现;掌握自定义分组可能引发的异常并能对其进行修复;了解框架分组的实现逻辑。01控制器实现介绍控制器类介绍控制器类介绍控制器:主要用于处理业务的后端数据库操作的逻辑实现,通常一个实体对应一个控制器,如实体名为Item,则控制器的名称为ItemController,对Item进行增删改查方法的实现在ItemController中进行实现。控制器命名规范:XXXController,即以Controller结尾。控制器类实现:

控制器类:必须建在服务端工程中

访问修饰符:public

继承:DomainController

方法:非私有方法必须是虚方法virtual,且功能逻辑相似的方法尽量放到一起,方法的编写与C#基础的方法编写规范一致。控制器类方法的调用:RT.Service.Resolve<控制器类名>().方法名(方法参数);思考题本地代码启用代理调试,客户端调用控制器的方法执行不了报错的原因?调用的控制器方法未标记为virtual。02框架分组介绍及自定义分组的实现方式框架分组介绍框架ViewConfig的默认分组包括:ListView、DetailsView、SelectionView、QueryView、ImportView。框架默认的分组原理:界面首先进入到ConfigView方法中,在该方法中通过对ViewGroup进行分组判断,如果分组ViewGroup为ListView则进入到ConfigListView方法中,进行列表界面呈现的配置;如果分组ViewGroup为DetailsView则进入到ConfigDetailsView方法中,进行添加修改命令界面呈现配置;如果分组ViewGroup为SelectionView则进入到ConfigSelectionView方法中,进行下拉选择列表的界面配置;如果分组ViewGroup为QueryView则进入到ConfigQueryView方法中,进行查询条件的界面配置;如果分组ViewGroup为ImportView则进入到ConfigImportView方法中,进行下载Excel模板的列头配置。框架分组介绍自定义分组的实现方式在很多场景下,使用框架默认的列表和表单分组方法是无法满足项目需求的,比如框架从菜单进入页面默认是列表界面,如果想点击菜单就打开为表单;又比如我们希望在表单操作时,新增和修改的操作界面不一样等等之类的需求,框架提供的默认分组是无法满足这种个性化的需求,这个时候就需要引入自定义分组来解决这种需求。从前面的框架默认分组原理能够看出,要使用自定义分组其实就是更改ViewGroup的值,不进入到框架的视图配置方法中,自己定义视图配置方法去实现项目需求。框架自定义分组的实现方式包括三种:主界面自定义分组的实现、子列表或者子表单自定义分组的实现、命令自定义分组的实现。自定义分组的实现方式思考题ConfigDetailsView方法默认什么情况下会执行进来?设置编辑模式为表单编辑,点击添加或者修改按钮会执行进来。03自定义分组的实现示例思考题点击菜单,进入菜单主界面,展示为表单形式,应该如何实现?主界面自定义分组的使用

功能描述:在读者分类中点击菜单进入到界面功能,不进入配置列表视图,而是进入到我们自定义的视图配置方法中。实现步骤:1、在读者分类中定义一个分组的常量(这里不直接用字符串是字符串出了问题难定位问题)主界面自定义分组的使用主界面自定义分组的使用

2、在配置菜单中使用分组,分组名为上面定义的常量名。主界面自定义分组的使用主界面自定义分组的使用

3、在读者分类中自定义一个视图配置方法。主界面自定义分组的使用主界面自定义分组的使用

4、在读者分类的配置视图ConfigView方法中添加分组的判断,分组为我们自定义的分组名时,调用步骤3的方法。主界面自定义分组的使用主界面自定义分组的使用

5、效果。主界面自定义分组的使用思考题主从结构,主表为表单编辑,从表为行内编辑,主界面从表的展示与主表添加修改按钮从表的展示不一致,如何实现?子列表自定义分组的使用步骤

功能描述:图书分类添加修改命令中图书小类使用自定义分组实现。需求描述子列表自定义分组的使用步骤

1、在读书小类视图配置中定义一个分组常量。子列表自定义分组的使用子列表自定义分组的使用步骤

2、在图书大类的明细视图ConfigDetailsView的图书小类的子列表属性中使用分组。子列表自定义分组的使用子列表自定义分组的使用步骤

3、在图书小类中添加自定义视图配置方法。子列表自定义分组的使用子列表自定义分组的使用步骤

4、在图书小类的配置视图ConfigView方法中添加分组的判断,分组为我们自定义的分组名,调用步骤3的方法。子列表自定义分组的使用子列表自定义分组的使用步骤

5、效果。子列表自定义分组的使用说明:附加子列表和附加子表单的自定义分组的实现步骤与子列表自定义分组实现步骤一致。思考题表单编辑模式,添加和修改按钮的界面配置不一致,应该如何实现?命令自定义分组的使用步骤

命令的自定义分组主要是指表单编辑模式下的自定义分组,列表编辑模式(行内编辑模式)的操作命令都是在表格内操作,没有分组的设置。功能描述:这里以图书分类的添加命令为例,点击添加命令进入到自定义分组视图配置的实现,如下图描述。业务需求命令自定义分组的使用步骤

1、在读书大类中添加自定义视图配置方法。业务需求命令自定义分组的使用步骤

2、在读书大类的ConfigView方法中调用自定义视图配置方法。业务需求命令自定义分组的使用步骤

3、重写添加命令(js文件需要嵌入到资源),更改框架默认的ViewGroup(与步骤2的分组名一致),这里只需要掌握命令分组的更改,添加命令的具体使用在添加命令中再详细介绍。业务需求命令自定义分组的使用步骤

4、在读书大类的ConfigListView方法中替换添加命令。业务需求命令自定义分组的使用步骤

5、效果。业务需求04自定义分组的注意事项自定义分组注意事项1、自定义分组的分组名尽量不要使用字符串,容易出错;2、自定义分组一定要记得进行额外授权,否则普通权限会存在问题;

通过View.DeclareExtendViewGroup(分组名)进行授权。3、自定义视图配置方法使用默认命令组合不生效(即View.UseDefaultCommands()失效),必须通过View.UseCommands(WebCommandNames.Add)一个个将命令加上;4、自定义视图配置方法的属性后面必须加show(),否则属性显示不出来,如下必须将show配置上

View.Property(p=>p.Code).Show();5、自定义视图配置方法要使用using(View.OrderProperties())对列显示顺序进行排序,否则列显示顺序会乱。注意事项思考题自定义分组普通账号界面权限异常的排查思路?1、检查分配权限的用户是否为普通账号对应的库存组织的管理员;2、有没有在菜单中进行“更新功能模块”或“更新选定模块”;3、自定义的分组名有没有使用View.DeclareExtendViewGroup()加到额外的视图中。练习1、自定义分组的列要按顺序显示,需要在自定义视图方法中使用()指定列显示顺序。2、自定义分组方法中,列要能正常显示,需要在属性列配置后面加()。3、自定义分组普通账号权限正常,需要在界面配置ConfigView方法中配置()。4、自定义分组方法中可以使用View.UseDefaultCommands()配置界面命令。()View.OrderProperties()View.DeclareExtendViewGroup(自定义分组名);错Show()本章小结本章主要讲解了工业管理软件的控制器与界面分组介绍,包括:控制器的使用;框架分组的实现逻辑;自定义分组的实现方式;自定义分组的开发实现示例;自定义分组开发过程中的注意事项。控制器和分组的使用在工业管理软件开发中比较重要,使用频率较高,学员要掌握控制器方法的编写和调用,以及自定义分组的开发实现,并了解什么情况下选择使用自定义分组实现业务需求。THANKYOU深圳市信息职业技术学院3.4平台通用配置深圳市信息职业技术学院——实体和界面配置Api实体属性实体属性特性实体特性实体配置实体介绍视图介绍视图配置视图属性配置知识扩展知识回顾控制器实现介绍;框架分组介绍;自定义分组的实现方式,三种入口的实现方式;自定义分组三种实现方式的实现示例;自定义分组的注意事项;学习目标通过本节学习可以:掌握实体包含的特性、实体属性、属性标签;掌握实体的配置;掌握界面的方法及使用;掌握界面方法的属性配置、命令配置、界面呈现配置;了解实体的组成;了解界面的组成。01实体介绍思考题平台框架定义的实体通用属性包括哪些?实体介绍实体介绍1、实体通常会映射数据库,所有新建实体类要建在服务端工程;2、实体类必须包含在对应文件夹下;文件夹以“实体名+S”进行命名;3、实体一定要包含命名空间,且命名空间要规范,一般为“对应工程名+文件夹名”;4、实体一般定义为部分类,直接或间接继承DataEntity;5、实体类继承的父实体尽量不要包含子列表属性,如果包含,子实体又没有用new关键字覆盖父实体属性,BS生成界面会报错;6、实体类中尽量只包含对应的属性,尽量不要去写与业务逻辑相关的代码;实体介绍实体介绍7、实体属性包含一般属性、引用属性、列表属性、只读属性和视图属性;默认情况下一般属性和引用属性会映射生成数据库表字段,其他的属性不会。8、创建实体的属性,我们只建业务相关的属性,业务属性不要和框架属性命名冲突,框架定义的属性包括:Id,CreateBy,CreateDate,InvOrgId,IsPhantom,SyncId,UpdateBy,UpdateDate;框架属性对应数据库表字段如下:9、实体类中的实体配置以“类名+Config”进行命名;02实体属性一般属性实体属性:实体属性是通过托管属性进行注册的,托管属性通过P<T>.Register()方法进行注册,T为所注册的托管属性的实体所有者(Owner)。一般属性:普通类型的属性#region

分类编码Code///

<summary>///分类编码///

</summary>[Label("分类编码")]public

static

readonlyProperty<string>CodeProperty=P<BigBookCat>.Register(e=>e.Code);///

<summary>///分类编码///

</summary>public

stringCode{get{returnGetProperty(CodeProperty);}set{SetProperty(CodeProperty,value);}}#endregion一般属性一般属性支持的属性类型:stringbool、bool?int、int?,long,long?double、double?DateTime、DateTime?枚举类型、Nullable<枚举类型>Byte[]引用属性引用属性:引用类型的属性,包括引用ID和引用实体两个属性,必须在同一实体中成对定义,属性类型为double。引用属性需指定引用类型ReferenceType,一般引用为Normal,子实体引用父实体为Parent。#region

读者管理与读者分类的关系ReaderCat[Label("类别号")]public

static

readonlyIRefIdPropertyReaderCatIdProperty=P<ReaderMan>.RegisterRefId(e=>e.ReaderCatId,ReferenceType.Normal);///

<summary>///读者管理与读者分类的关系Id///

</summary>public

doubleReaderCatId{get{return(double)GetRefId(ReaderCatIdProperty);}set{SetRefId(ReaderCatIdProperty,value);}}///

<summary>///读者管理与读者分类的关系///

</summary>public

static

readonlyRefEntityProperty<ReaderCat>ReaderCatProperty=P<ReaderMan>.RegisterRef(e=>e.ReaderCat,ReaderCatIdProperty);///

<summary>///读者管理与读者分类的关系///

</summary>publicReaderCatReaderCat{get{returnGetRefEntity(ReaderCatProperty);}set{SetRefEntity(ReaderCatProperty,value);}}#endregion引用属性引用Id引用实体引用类型,一般外键为Normal列表属性列表属性:子列表的属性,一对多关系中,父实体包含子实体的列表。#region

图书大类与小类的关系SmallBookCatList///

<summary>///图书大类与小类的关系///

</summary>public

static

readonlyListProperty<EntityList<SmallBookCat>>SmallBookCatListProperty=P<BigBookCat>.RegisterList(e=>e.SmallBookCatList);///

<summary>///图书大类与小类的关系///

</summary>publicEntityList<SmallBookCat>SmallBookCatList{get{return

this.GetLazyList(SmallBookCatListProperty);}}#endregion列表属性只读属性只读属性:只读属性用于表示实体中的一个只读的数据。只读属性主要为界面展现层设计。#region

全名FullName///

<summary>///全名///

</summary>[Label("全名")]public

static

readonlyProperty<string>FullNameProperty=P<BigBookCat>.RegisterReadOnly(e=>e.FullName,e=>e.GetFullName(),CodeProperty,NameProperty);///

<summary>///全名///

</summary>public

stringFullName{ get{return

this.GetProperty(FullNameProperty);}}private

stringGetFullName(){ return

this.Code+"("+this.Name+")";}#endregion只读属性视图属性视图属性:视图属性是通过引用属性懒加载的数据,主要为界面展现层设计。如果实体和继承的父实体中没有引用属性,则不能使用视图属性。#region

类别名称CatName

///

<summary>

///类别名称

///

</summary>[Label("类别名称")]

public

static

readonlyProperty<string>CatNameProperty=P<ReaderMan>.RegisterView(e=>e.CatName,p=>p.ReaderCat.CatName);

///

<summary>

///类别名称

///

</summary>

public

stringCatName

{

get{return

this.GetProperty(CatNameProperty);}

}

#endregion视图属性通过引用实体.属性名加载出来视图属性的内容思考题实体的一般属性支持哪些类型?03实体属性特性实体属性特性属性名称标签(Label):用于在实体属性上声明属性的显示名称。必填标签(Required):声明实体属性不能为空,字符串类型属性会标记该特性。非重复标签(NotDuplicate):声明实体属性不能重复。最大长度标签(MaxLength):声明实体属性的最大长度,字符串类型的属性会标记该特性。最小长度标签(MinLength):声明实体属性的最小长度,字符串类型的属性会标记该特性。最大值标签(MaxValue):声明实体属性的最大值,数值类型的属性会标记该特性。最小值标签(MinValue):声明实体属性的最小值,数值类型的属性会标记该特性。属性默认值(DefaultValue):属性默认值设置,作用域为当前实体。实体属性特性04实体特性实体特性实体类型特性(RootEntity,ChildEntity,QueryEntity):用于在实体上声明实体的类型。实体

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论