




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Fego模块开发Fego模块开发目录建立一个Fego模块2介绍Fego模块中的视图2写你的第一个Fego视图2介绍视图的Verb的功能3视图的PortalRememberable属性3模块权限和Cache的使用3核心的功能支持3视图Verb功能使用3视图PortalRememberable使用和扩展3权限和Cache的使用3Fego核心功能类315- 15 -建立一个Fego模块Fego提供了那些新功能?l 动态的生成页面和调整视图位置通过Fego的页面管理工具,可以让管理员动态的创建页面、修改页面CSS定义,为页面选择不同的样式模板和布局,并可以向页面拖拽模块视图和调整模块位置。l 自定义视图属性通过在Property绑定PortalRememberable属性,使管理员具有了动态变动Property值的能力,提高了程序的灵活性。l 使用AOP机制实现了权限验证和Cache功能在业务逻辑层,继承自AspectOrientedObject对象的业务逻辑子类,在每个需要权限判断的方法上添加ModuleAuthenticationCase属性,应用Fego提供的权限判断功能,对当前登录用户进行权限判断;而使用ModuleCacheCase属性时,又方便的应用了Cache的功能。应用Fego建站系统,我们可以动态的创建出页面,定义视图的属性,并且可以更加方便地添加权限判断和Cache功能。在这篇文章中,我们将使用一个简单的Fego模块Fego.Module.Annoucement来对Fego核心功能进行讲解,Annoucement模块实现的功能是添加文本信息和显示文本信息。介绍Fego模块中的视图在Fego表示层中,Fego的视图是最基本的页面元素,一个页面是由多个Fego视图组合而成的。每个视图是一个Fego最小功能集合的元素。每个视图是由两部分组成,前台视图和后台视图映射两部分。前台视图,主要定义了页面显示和显示逻辑,被放置在Skin文件中;后台视图映射,主要定义了Verbs功能和自定义视图属性,被放置在对应Class Library中。写你的第一个Fego视图建立工程打开Fegoject工程(这里假设您已经安装了Fego.AddIn),将自动生成一个全新的Fego工程。通过点击工程文件,右键选择(如图1所示),选择添加,然后选择“New Module”命令,就会出现一个创建工程的对话框(如图2所示),在这里填写模块的属性。例如填写模块名称为Annoucement。这创建一个工程名为Annoucement,而名称空间和Assambley名称为FegoPro1.Module.Annoucement的工程。图 1 添加模块定义图 2填写模块属性创建View视图选择已经添加的工程Announcement,我们需要在里面添加一个新的视图,这个视图的名称为DisplayView。我们首先选中已经创建好的工程Annoucement,右键选择Add,选择“Add View”(如图3所示),通过填写对应的视图名称(如图4所示),就会生成一个CS文件DisplayView,在Web工程中Skins中,我们将看到有个名称为FegoPro1.Module的文件夹中,出现了DisplayView的ascx文件。到此我们第一个视图就建立完成了。图 3创建新的视图图 4填写表单注意:这里我们使用的FegoPro.Addon来创建一个名称为DisplayView的视图。FegoPro.Addon的默认连接字符串的数据库是SQL Express,当我们要进行正式开发的时候,我们需要修改默认的连接字符串。关于Fego.AddIn使用帮助需要查看“Fego 插件使用帮助”介绍视图的Verb的功能视图中的Verb功能,主要是实现了视图在编辑状态下,可以显示命令功能键,通常当要在视图显示实现添加,删除,编辑按钮的时候,使用Verb来实现。要应用Verb功能,需要创建一个继承自Fego核心类PortalViewVerb的子类,并复写Text和Description两个属性。视图的PortalRememberable属性在后台视图映射中定义一种类型的Property,只要在上边加上PortalRememberable属性,就具有了管理员定义视图属性功能。页面每次加载这个视图的时候,会自动加载管理员设置的属性值,这种机制使程序具有更好的灵活性。模块权限和Cache的使用在Fego系统中,已经实现了权限判断和Cache的功能。我们只需要让业务类继承自AspectOrientedObject和添加Attribute:Authentication, ModuleCacheManager,并在需要实现权限判断和Cache的方法(Methods)处,添加对应的Attribute: ModuleCacheCase和ModuleAuthenticationCase。核心的功能支持开发模块常用的功能类:ModuleGlobal和ModulePageHelper。ModuleGlobal主要的功能是:1. 获得用户信息。2. 获得当前Portal的信息,并修改站点属性。3. 获得保存文件地址的信息。ModulePageHelper主要功能是:1. 得到ModulePage的URL。2. 得到NodePage的URL。注:NodePage是指可以使用Fego页面控制条动态添加的页面,而ModulePage是指在数据库中设定的必须显示一个对应View的页面(使用FegoPro.AddIn进行添加的View,就会对应生成一个ModulePage,PageName就是View的名称),而该视图是不可以删除的。这些视图在数据库对应表中都有定义。视图Verb功能使用我们应用Verb功能主要是为了给客户提供更好的用户体验,效果如图5所示:图 5 Verb实现的功能我们要使用Verb功能,首先必须定义两个类,它们分别继承自:PortalViewVerbCollectionBase和PortalViewVerb。继承自PortalViewVerb的子类,它应该具有覆盖两个属性:Text和Description。实现细节见样例代码1。/ / 修改内容动作/ public class EditAnnouncementVerb : PortalViewVerb/ / 动作列表中显示的文字/ / public override string Textgetreturn ModuleResource.GetString(typeof(EditAnnouncementVerb), ModifyContent);/ / 动作列表中选项的描述/ / public override string Descriptiongetreturn ModuleResource.GetString(typeof(EditAnnouncementVerb), ModifyContentDescription);public EditAnnouncementVerb(EventHandler handler): base(EditAnnouncementVerb, handler)代码 1 EditAnnoucement样例代码在代码1中,已经实现了EditAnnoucementVerb的Verb功能类,它主要实现了显示文本信息和定义点击事件。通常情况下,在一个工程中会创建多个PortalViewVerb的子类,但是无论有多少个PortalViewVerb子类,我们只需要创建一个PortalViewVerbCollectionBase子类。PortalViewVerbColletionBase字类,它是Verbs的集合,它主要实现的功能是通过使用权限定义PremissionEnum,来选择不同的Verbs集合。实现细节见代码2public class AnnouncementVerbCollection : PortalViewVerbCollectionBase/ / 模块页面的帮助类实例/ private ModulePageHelper m_ModulePageHelper = new ModulePageHelper(); public AnnouncementVerbCollection(PortalView dpsPart, Enum permissionSet) : base(dpsPart, permissionSet) public override void AddVerb(Enum permission)PortalViewVerb verb = null;if (permission.Equals(PremissionEnum.EditAnnouncement)verb = new EditAnnouncementVerb(new EventHandler(EditAnnouncementVerbHandler);if (verb != null)InnerList.Add(verb);#region 事件接受函数private void EditAnnouncementVerbHandler(Object s, EventArgs e)string moudlePageUrl;moudlePageUrl = m_ModulePageHelper.GetModulePageFullPathByModuleID(PortalView.ModuleID, ModulePageEnum.Edit.ToString();HttpContext.Current.Response.Redirect(moudlePageUrl); #endregion代码 2 AnnoucementVerbCollection样例代码Verbs的应用是对某个视图映射而言的,只有视图映射才能使用PremissionEnum枚举的集合,来定义当前这个视图最多可以有几个Verb显示。实现细节见代码3:public class DisplayView : PortalView public override WebPartVerbCollection Verbs get / 构造可以显示出菜单的权限集合 Enum permissionSet = new Enum PremissionEnum.EditAnnouncement ; / 构造动词集合 AnnouncementVerbCollection collection = new AnnouncementVerbCollection(this, permissionSet); / 返回动词集合 return new WebPartVerbCollection(collection); 代码 3 Display添加Verbs的样例代码注:我们这里的权限PremissionEnum定制是与Fego功能紧密联系的。我们通过权限PremissionEnum来定义是否添加对应的Verb和动态的设定用户对某个逻辑的权限。在某个模块工程中都需要定义PremissionEnum枚举类,这个类表示了当前所对应的模块的权限,并且这个模块定义需要注册到数据库中。Announcement模块权限PremissionEnum枚举(这里枚举名称是固定的,不能改变),设定枚举内容,见样例代码4。public enum PremissionEnumDisplayAnnouncement,EditAnnouncement代码 4 PremissionEnum样例代码上面样例代码2定义了两个权限DisplayAnnoucement和EditAnnoucement,他们已经定义cs代码中了,但是为了让Fego核心找到权限定义,我们必须在当前工程的数据库表中添加相同的权限定义。对应的数据库表名为:Portal_PermissionDefinitions必须添加的字段有:ModDefID :模块定义ID,可以在Portal_ModuleDefinitions,根据工程AssemblyName找到;PermissionDefName:权限定义的名称(对应CS代码中PremissionEnum中的定义)。PermissionDisplayName:权限显示的文字。IsDefault:是否为默认权限,当为true表示所有用户都拥有这个默认权限。添加定义样例如图6所示:图 6添加权限样例视图PortalRememberable使用和扩展如果要让管理员可以动态的定义一个视图的属性,只需要将PortalRememberable Attribute定义在要动态设定的属性上,通常有这种需求的属性是:定义每页显示数量,显示的方式,显示的类别。类似于Profile的应用。样例如代码5所示。 / / 设定视图中显示内容的数量 / PortalRememberable(设置每页所能够显示的评论数目,超过这一数目将会自动翻页, 每页所显示的评论数目) public int CommentPageSize get return m_PageSize; set m_PageSize = value; if (value 30) /最大为30 m_PageSize = 30; if (value 1) m_PageSize = 1; 代码 5 设置博客评论每页显示的数量通常我们使用PortalRemeberable的时候,有些属性是可能需要一些比较特殊的设置方式,例如一个动态的类别下拉列表。因此我们需要自己来定义个DropDownlist列表。样例见代码6,它继承值PortalDropDownEditControl:class CategoryEditorPart : PortalDropDownEditControl public CategoryEditorPart(int moduleID):base(moduleID) / / 生成下拉类别列表 / / / private void InitDropDownList(DropDownList drop,int moduleID) DataTable table = BlogCategoryRule.InStance.GetBlogCategoryIDInEXISTS(moduleID); /生成一个默认类别 drop.Items.Add(new ListItem(无博客分类, 0); if (table.Rows.Count != 0) /生成DropDownList foreach (DataRow row in table.Rows) drop.Items.Add(new ListItem(rowDataColumnName.DPSCategoryNameKey.ToString() , rowDataColumnName.DPSCategoryIDKey.ToString(); protected override void InitDropDownList(int moduleID) InitDropDownList(this.DropDownList,moduleID); public override object EditorValue get return Convert.ToInt32(base.EditorValue); set base.EditorValue = value; 代码 6 自定义CategoryEditorPart继承自PortalDropDownEditControl,并且需要复写InitDropDownList方法和EditView属性。InitDropDownList是生成DropDownControl内容的方法,而EditView保存了每次用户编辑的内容。权限和Cache的使用在使用Verb功能时候,我们已经介绍了PremissionEnum权限使用方式和设置方式。要想使用权限和Cache功能,需要保证逻辑类继承自AspectOrientedObject,并且具有必须的Attribute:Authentication, ModuleCacheManager(Authentication这是使用Fego权限所必须的,ModuleCacheManager这是使用Fego的Cache所必须的)。注意,每个逻辑方法必须传递ModuleID。详细样例见代码7/ / Announcement的业务逻辑/ Authentication, ModuleCacheManagerpublic class AnnouncementRules : AspectOrientedObject, IModuleRules/ / 根据ModuleID获得Announcement的基本信息/ / Module ID/ 包含内容,title和ID的数据实体ModuleCacheCase(0, 0)ModuleAuthenticationCase(new string DisplayAnnouncement , 0)public AnnouncementData.AnnouncementBasicDataTable GetAnnouncementBasicDataByModuleID(int moduleID)AnnouncementData.AnnouncementBasicDataTable table;using (AnnouncementBasicTableAdapter adapter = new AnnouncementBasicTableAdapter()table = adapter.GetAnnouncementBasicDataByModuleID(moduleID);return table;/ / 更新Announcenment的内容/ / module 的ID/ 上传用户的ID/ 内容/ 是否成功ModuleCacheCaseInvalidate(0)ModuleAuthenticationCase(new string EditAnnouncement , 0)public bool EditAnnouncement(int moduleID, string userName, string content)/ 构造待更新的数据行AnnouncementData.AnnouncemntDataTable table = new AnnouncementData.AnnouncemntDataTable();AnnouncementData.AnnouncemntRow row = (AnnouncementData.AnnouncemntRow)table.NewRow();row.ModuleID = moduleID;row.Content = ModuleGlobal.FilterSensitiveText(content, false);row.UpLoadUserName = userName;/ 执行核心系统的插入方法ModuleRulesHelper.Insert(row,this.GetType();return true;代码 7Cache和权限代码样例属性使用说明:ModuleAuthenticationCase(new string DisplayAnnouncement , 0)ModuleAuthenticationCase具有两个必要的参数,第一个参数是string数组,传入的内容为当前用户必须具有的权限,只有具有该权限用户才能调用这个函数,第二个参数,定义为ModuleID在函数的参数中的位置,函数参数的起始位置值为0。ModuleCacheCase(0, 0)ModuleCacheCase具有两个必要的参数,第一个参数,定义为ModuleID在函数的参数中的位置,函数参数的起始位置值为0。第二个参数定义为Cache应用的Key在函数的参数中的位置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业工程部管理制度
- 生活护理安全课件
- 心理学试题库及答案
- 产品质量法课件1
- 预防火灾的应急措施6篇
- 防系统规划方案(3篇)
- 家庭护栏改造方案(3篇)
- 资料人员管理方案(3篇)
- 物业广告拍摄方案(3篇)
- 火灾应急预案的一般要求(3篇)
- 形象店加盟管理方案
- 1.《郑人买履》课件PPT
- T∕ZS 0128-2020 既有建筑结构安全智慧监测技术规程
- 发电机定子绕组泄漏电流和直流耐压试验作业指导书
- 冀教版小学美术六年级下册教案
- 甘肃省生态功能区划
- DB22∕T 1073-2011 绿色淫羊藿生产技术规程
- 教练技术LP三阶段教练手册
- 国家开放大学《人文英语3》章节测试参考答案
- 小柳树和小枣树(1)
- 钻孔灌注桩超灌混凝土管理办法
评论
0/150
提交评论