菜单设计器(Menu Designer)及其B/S,C/S双重实现(B/S开源)
ERP/MIS开发 菜单设计器(Menu Designer)及其B/S,C/S双重实现(B/S开源)
一直从事ERP/MIS的开发工作,今天来展现一下菜单设计器的设计,及其用途,并对B/S部分代码开源。
先用EXCEL来展现,需要表达的菜单结构
如图所示,一级菜单是销售,采购,仓库,其下的子菜单是,日记帐,报表,查询,设置,批次过帐。
第三级别的子菜单,以仓库为例
仓库日记帐的明细功能包括进仓,出仓,仓库调整, 仓库查询的明细功能包括,库存结余,物料存货明细,仓库未完订单.
下面来使用菜单设计器,设计以上的菜单结构. 打开EPN系统,执行Menu Definitions功能,界面效果如下
如图所示,Tree Processes是顶层的一级菜单名称,对应于文章开头提到的Sales,Purchase,Inventory.
Menu Types定义第二层菜单,对应于Transaction Entries,Reports,Enquiries,Setup
Functions and Icons对应于第三层菜单,也就是具体的功能,比如仓库的日记帐下面的功能,进仓,出仓和转仓。
如何设计数据库表结构来存取这个菜单?
先用三个表来存取这个菜单结构,也是最简洁直观的办法
TreeProcess(MenuCode,MenuLevel,ProcessCode,Description,Parent,ImageFile,Suspended,CloseIcon,OpenIcon)
表示第一层菜单,
MenuTypes(MenuType,Description,MenuCode,Suspended,CloseIcon,OpenIcon,Depth)来表示第二层菜单,Depth记录它的第一层菜单的主键。
FunctionIcons(ResponseType,FunctionCode,Description,MenuCode,Suspended,Depth)来表达最终的功能菜单,Depth记录它的第一层菜单的主键。
也可以用一个表,用Depth=1,2,3来表示菜单的级别。把上面这三个表的所有字段,拼凑到一个表中。对于不同的Depth,去不同的字段中读取值即可。
菜单的C/S界面的实现效果
如图所示,这三个功能实现效果,放在一颗树中。下面的图,是把菜单放在MenuStrip中
再把它放到ContextStrip中去的效果
同一个菜单,在多个地方都重复出现。这也表达了ERP的一个思想,灵活好用。想要用什么功能,要保证有很多种方式能快速找到它。如果你设计出一个很复杂的软件,用户要花很多时间来找他要的功能,可以认定你的界面设计是失败的。
从Visual Studio 2003到2005,2008,再到2010,每次的升级,菜单,功能导航几乎都没有什么变化,但是它的功能却越来越多,越来越好用。如何组织这些功能,呈现给用户,确实要花一些时间和心思来琢磨。我们做开发的,知道插件结构(plug-in,addon)可以用来组织开发的功能,即插即用,但是界面上组织这些功能给用户,却一直是个棘手的问题。我自己观察到的Visual Studio 增加新功能的方式
1 工具栏的contextmenu ,右键菜单,弹出的这个菜单列表,越来越长
2 放到MenuStrip中去.Visual Studio 很谨慎小心的在这里加菜单。
Visual Studio 2005/2008安装TeamFoundationExplorer之后,会加一个Team的菜单,
Visual Studio 2008/2010加入了一个Data菜单,以支持数据库操作,Test也只有安装了测试模板后才会出现,
Analyze分析功能,也是Visual Studio 2010新增加的功能。这提到的每一个菜单,都足够承担起一个软件的完全功能,它的功能之强大,有时候比单独的第三方的应用程序的功能还要多。
再回到B/S的ASP.NET的实现,效果图如下
使用了ComponentArt.Web.UI中的Menu控件呈现菜单,来看一下展开的效果
在这里使用了一个Menu.xml文件来表达菜单项,在App_Data目录下可以找到这个文件。
在菜单设计器中设计好菜单后,执行Export功能,就可以生成这个Menu.xml文件,直接放到网站的App_Data目录上,刷新即可,达到一次设计,C/S,B/S两次复用的目的。
一直都在做一个B/S的框架,并打算把它开源出来,因为C/S框架不开源(虽然我陆续在写文章,开放其中的模块及其实现代码),B/S的框架也不复杂。一个可配置的Menu,加上多页的Tab控件,加载不同的功能页面即可。
开放自己的源代码是件有价值好事情,但是也会遇到项目一开源就死的情况。Google已经足够强大,有时候你看到别人的代码里用到的技术,Google一下,自己曾经也学过,用过,差距就在于细节方面的把握了。这里举例几条,共勉励。
1 虽然Linq to sql已经out,Linq还是个好技术,特别是Linq to object,Linq to dataset,可以让你的代码简洁明了。
2 B/S项目的一个关键是UI的布局是否简洁漂亮。也不用ExtJs的那种华丽界面,界面上要能看得过去。如果细节把握不好,可以在网上多找一下这方面的布局,CSS控制的demo,或者直接修改这些demo,来演练技术。CSS,网页布局这些不能指望有美工帮你的忙,即使是切割好的图片给你,变成html之后,也会乱得一踏糊涂。我的心得是,要做ASP.NET或是Web方面的项目,网页布局能力一定要过关。
请到epn.codeplex.com上下载B/S模式的菜单源代码。
菜单设计器(Menu Designer)及其B/S,C/S双重实现(B/S开源)的更多相关文章
- 报表和仪表板在线设计器Stimulsoft Designer 最新版发布
Stimulsoft Designer是统一的Stimulsoft框架的一部分,该框架包括用于生成报表和分析数据的引擎.报表设计器和查看器. 您可以在计算机上创建报表,继续使用在线设计器在云中对其进行 ...
- 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器
企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...
- How to: Create a Business Model in the XPO Data Model Designer 如何:在 XPO 数据模型设计器中创建业务模型
This topic provides step-by-step instructions on how to use the XPO Data Model Designer in XAF appli ...
- 在网页中编辑报表的报表设计器Stimulsoft Reports Designer.Web报表控件
Stimulsoft Reports Designer.Web报表控件是一款网页报表设计器.您想在网页中编辑您的报表吗?现在是可能的! Stimulsoft Reports Designer.Web ...
- Windows 窗体设计器(Windows Forms Designer)入门
Visual Studio 2010 更新:2010 年 9 月 Windows 窗体设计器提供多个用于生成 Windows 窗体应用程序的工具. 本演练阐释如何使用设计器提供的各种工具生成应用程 ...
- WPF - 图形设计器(Diagram Designer)
原文:WPF - 图形设计器(Diagram Designer) OpenExpressApp计划中包括建模工具,计划是采用MetaEdit+模型来作为元模型,使用codeproject的<WP ...
- 如何在CRM系统中集成ActiveReports最终报表设计器
有时候,将ActiveReports设计器集成到业务系统中,为用户提供一些自定义的数据表,用户不需要了解如何底层的逻辑关系和后台代码,只需要选择几张关联的数据表,我们会根据用户的选择生成可供用户直接使 ...
- 创建您的 ActiveReports Web端在线报表设计器
概述 ActiveReports Web端在线报表设计器已经正式上线!看到它这么帅气.实用,你是不是也想自己动手创建一个? 现在我们就来教您,如何创建一个简单的 ActiveReports Web端在 ...
- .NET创建宿主设计器--DesignHost、DesignSurface.
一个窗口在运行时,是这样的: 但是,在设计时,却远比这复杂的多,它需要一个设计器对象:它仅存在于设计时,并连接到运行时存在的对象. 宿主容器 我们可以看到每个窗体和按钮均有与之相关的设计器.这两个 ...
随机推荐
- 完全掌握Android Data Binding
转载:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0603/2992.html 来源 https://github.com/L ...
- 为Windows 7添加“Internet打印”功能
http://wangchunhai.blog.51cto.com/225186/1156589/
- poj3686The Windy's (KM)
http://poj.org/problem?id=3686 拆点很巧妙 将每个M个点拆成m*n个点 分别表示第i个玩具在第j个机器上倒数第K个处理 假设这k个玩具真正用在加工的时间分为a1,a2,a ...
- bzoj1293
简易贪心+heap 注意要用链表 type link=^node; node=record loc:longint; next:link; end; ...
- BZOJ2500: 幸福的道路
题解: 一道不错的题目. 树DP可以求出从每个点出发的最长链,复杂度O(n) 然后就变成找一个数列里最长的连续区间使得最大值-最小值<=m了. 成了这题:http://www.cnblogs.c ...
- SharePoint 2010 Pop-Up Dialogs
转:http://kyleschaeffer.com/sharepoint/sharepoint-2010-pop-up-dialogs/ SharePoint 2010 makes it incre ...
- JQuery: 微博演示
演示图: 完成图: 微博演示代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> ...
- java jvm学习笔记五(实践自己写的类装载器)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和 ...
- MySQL中间层 Atlas
Atlas是由 Qihoo 360, Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bu ...
- selenium Grid
Selenium Grid 的机制是启动一个 hub,然后启动多个 Selenium RC 注册到 hub 上, 当测试请求到 hub 时,hub 会将测试分发给 Selenium RC, Selen ...