博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

RapidWebDev开源框架-基于XML配置的UI介绍

Posted on 2010-01-25 10:15  Alex.He  阅读(3886)  评论(18编辑  收藏  举报

在前面几篇文章中我介绍了RaidWebDev的概况,然后通过过Product模块演示了如何使用RapidWebDev框架快速的开发一个业务功能。从本章开始,我将重点介绍RapidWebDevXML可配置界面中的每个节点及属性的功能和注意事项,让大家彻底的掌握RapidWebDev动态页面的配置,结合自己的业务逻辑,给客户提供更友好的操作界面。

 

1.    基础和概念

Rapid web框架让开发人员快速的建立纯AJAX驱动的应用而不用写太多的HTML,CSSJavascript。而让这成为可能是就是RapidWebDev的界面配置文件(*.dp.xml),我们将它命名为动态页面。下图为动态页面的运行效果:


一个动态页面包含了query panel, button panel, grid panel, detail panel 以及 aggregate panelDetail aggregate panel以弹出窗口的形式出现,它们在用户处理创建、查看、修改操作或者其他业务处理的时候显示,下图为创建一个新的实体对象:


·         Detail panel 用于添加、编辑及修改单条记录.

·         Aggregate panel用于对数据进行批操作或者一些自定义的业务处理,如:批删除,批审核,导入等.

·         Button panel 用于放置添加按钮和一些自定义操作逻辑的按钮.

在动态页面中,只有GridPanel是必须的,也只有Button Panel可以同时存在多个,其他的panel可以有一个,也可以没有,panel在页面上的显示顺序和他在配置文件中的位置相同。

2.    开发

当你设计一个动态页面时,你需要做如下工作

·         创建一个xml文件,命名为filename.dp.xml,并按需求编写内容.

·         实现 IDynamicPage接口(查询方法,单条数据的删除方法).

·         实现 IDetailPanel 接口(创建,修改,查看单条数据的方法).

·         实现 IAggregatePanel 接口(批处理,其他业务逻辑).

·         DetailPanel创建一个不带后台文件的ASCX模板.

·         AggregatePanel创建一个不带后台文件的ASCX模板.

你不需要为每一个动态页面都去做上面的这些事情,这取决于你想呈现的web页面,另外,我们提供了3个实现对应接口的抽象类,它们实现了一些基本的操作。所以,在一般情况下,你不用从零开始去实现这些接口。

3.    主要组件介绍

l  QueryPanel

用于查询条件输入和查询事件的触发,在一个页面中至多只能包含一个,在Querypanel中除了配置的查询条件外,默认包含2个按钮[查询][重置],点击[查询]按钮,页面会向服务器段发送请求,由系统根据配置的查询控件动态的生成Linq2SQL查询语句,并最终将IDynamicPage实例的Query方法返回的数据加载到GridViewPanel。而[重置]按钮则是页面自动清空查询条件,并重新执行查询。

l  ButtonPanel

用于放置业务按钮的容器,在一个页面中可以包含任意个ButtonPanel,可以用于ButtonPanel的系统预设命令有”’New””Print””DownloadExcel”,其中,”New”命令需要和DetailPanel配合使用,”Print””DownloadExcel”命令需要与AggregatePanel配合使用。当然,你也可以按具体的业务增加其他的业务处理命令(如:数据导入,批量删除,批量审核等)。按钮的命令直接和系统权限挂钩,可以很方便的实现权限控制,而不需要编写任何C#代码。

l   GridViewPanel:

用于显示查询结果,可以指定checkbox列,查看按钮,修改按钮,删除按钮及数据列。其中chekcboxButtonPanelAggregatePanel配合使用,可以实现批量处理。查看按钮, 修改按钮需要和DetailPanel配合使用,可以实现单条数据看浏览和编辑,删除按钮可以根据IDynamicPage实例的Delete方法的逻辑删除数据所选数据。数据列可以方便的实现数据转换(如:将UserId转换为用户名等),数据字符串格式化,显示图片,样式包裹(使用html包裹数据,达到预期的显示效果)等,并且能轻松实现数据排序和数据列的显示和隐藏。

l   DetailPanel:

用于新增,修改或显示单条数据记录,需要指定ASCX模板及实现IDetailPanel接口。在DetailPanel中,除了ASCX模板以外还有[保存并关闭][保存并新增][取消]按钮(如果当前状态为编辑,没有保存并新增按钮,如果是浏览数据,则没有额外的按钮)。点击[保存并关闭]按钮将会按照IDetailPanel.Create(修改时为IDetailPanel.Update)方法定义的逻辑,将数据数据提交到数据库,然后关闭DetailPanel并刷新GridViewPanel点击[保存并新增]在将数据提交到数据库后,会调用IDetailPanel.Reset方法重置页面,实现数据的连续添加,点击[取消]按钮将取消一切没有提交的修改,并关闭DetailPanel.

l  AggregatePanel

用于CRUD外的业务操作,我们几乎能将能想到的业务逻辑放到这里处理(比如:数据导入,数据审核,甚至是类似于VS里面的查找引用等等)。当然,现阶段一个也没只能有一个AggregatePanel,使得一些实现相对比较复杂,但是我们的team已经开始着手对其进行改进了,估计在年内会发布包含改进后的AggreagePanel的版本。

4.    实例介绍

假设我们现在开发一个产品入库的页面,他的需求如下:

1   在一个表单中允许不停的扫描商品编码条形码以备入库,扫描后的商品及时显示在临时列表中,但不直接进行提交。当用户录入错误的商品编码时,系统给予提示。

2   在临时列表中可以对扫描的商品进行删除和数量修改

3   允许将临时列表中的商品资料和数量都导出到Excel或进行打印

4   在列表中可以选中部分或所有的商品确认入库,再点击确认入库时,系统会弹出汇总信息,比如总金额、商品总数或商品分类汇总。

 

拿到了需求,先让我们简单的分析一下,并规划一下UI

1.我们可以得到如下结论,首先,系统中需要一个窗口用于用户数据商品,然后在这个窗口中需要一个文本框,用于输入条码。由于一次输入的同类商品可能不只一个,所以我们还需要一个文本框用于输入商品的数量。

2.我们需要有一个列表用于显示临时的待入库数据,并且每条数据需要能修改和删除,也就是列表中需要在每一行都能显示修改和删除按钮。在修改时除了能显示商品编号,待入库数量外,还需要显示商品信息信息,但只能修改待入库数量。

3.在列表所在的页面需要一个打印按钮,一个数据导出按钮

4.我们需要一个按钮用于入库操作,并且需要一个对话框用于显示汇总信息,和确认入库按钮。另外我们需要能标记列表中数据的选中状态,所以这里需要在列表中增加一个用于勾选数据的checkbox列。

5.将临时数据放在Session

 

好了,大概就是这样了,现在我们看看在RapidWebDev中应该如何去配置这个模块吧

1,在动态页面中先配置一个GridViewPanel,用于临时数据的显示和操作,GridViewPanel里面需要配置CheckBox,删除按钮,修改按钮以及需要用于显示的数据列。

2,实现IDynamicPage接口,用户获取数据列表中显示的数据以及删除单条商品的逻辑

3,为动态页面配置一个ButtonPanel,并定义一个添加入库数据按钮,CommandArgument=”New”(由于动态页面的输出顺序和配置顺序一致,所以现在的按钮显示在列表下面,如果需要显示到上面,只需要将ButtonPanel移到GridViewPanel前面就好了)

4,配置DetailPanel,用于入库商品的新增扫描与修改,这里需要建立一个ASCX模板,用户新增扫描(入库数量默认为1,输入焦点默认在条码文本框)及修改待入库数量(商品基本信息)

5,实现IDetailPanel接口,用于对添加和修改逻辑的处理

(只需要上述步骤,我们便可以将将第1,第2条需求实现了)

6,为ButtonPanel添加两个按钮,CommandArgument分别指定为”Print” DownloadExcel”

(6步实现需求3,我们不需要编写任何代码)

7,为ButtonPanel添加一个按钮,CommandArgument=”SubmitProduct

8,在动态页面的配置文件中添加AggregatePanel的配置节

9,建立汇总信息的ASCX模板,并指定给AggregatePanel

10,实现IAggregatePanel接口,为CommandArgument=”SubmitProduct编写具体的入库逻辑

(7-10个步骤,我们便实现了需求4的要求)

11,在sitemap.config 中添加指向此页面的链接

12,在permissions.config中配置对应的权限

 

好了,一个简单的案例这样由RapidWebDev给实现了,50%的代码节省好不夸张,再加上RepidWebDev提供的一些辅助的API,节省的代码会更多更多。

 

在接下来的章节中我将会对整个XML配置文件做一个详细的讲解,估计会需要2-3章,如果有需要,也可能会将上述的需求做一定的扩充,做出demo供大家下载。