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开源)的更多相关文章

  1. 报表和仪表板在线设计器Stimulsoft Designer 最新版发布

    Stimulsoft Designer是统一的Stimulsoft框架的一部分,该框架包括用于生成报表和分析数据的引擎.报表设计器和查看器. 您可以在计算机上创建报表,继续使用在线设计器在云中对其进行 ...

  2. 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器

    企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...

  3. 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 ...

  4. 在网页中编辑报表的报表设计器Stimulsoft Reports Designer.Web报表控件

    Stimulsoft Reports Designer.Web报表控件是一款网页报表设计器.您想在网页中编辑您的报表吗?现在是可能的! Stimulsoft Reports Designer.Web ...

  5. Windows 窗体设计器(Windows Forms Designer)入门

      Visual Studio 2010 更新:2010 年 9 月 Windows 窗体设计器提供多个用于生成 Windows 窗体应用程序的工具. 本演练阐释如何使用设计器提供的各种工具生成应用程 ...

  6. WPF - 图形设计器(Diagram Designer)

    原文:WPF - 图形设计器(Diagram Designer) OpenExpressApp计划中包括建模工具,计划是采用MetaEdit+模型来作为元模型,使用codeproject的<WP ...

  7. 如何在CRM系统中集成ActiveReports最终报表设计器

    有时候,将ActiveReports设计器集成到业务系统中,为用户提供一些自定义的数据表,用户不需要了解如何底层的逻辑关系和后台代码,只需要选择几张关联的数据表,我们会根据用户的选择生成可供用户直接使 ...

  8. 创建您的 ActiveReports Web端在线报表设计器

    概述 ActiveReports Web端在线报表设计器已经正式上线!看到它这么帅气.实用,你是不是也想自己动手创建一个? 现在我们就来教您,如何创建一个简单的 ActiveReports Web端在 ...

  9. .NET创建宿主设计器--DesignHost、DesignSurface.

    一个窗口在运行时,是这样的: 但是,在设计时,却远比这复杂的多,它需要一个设计器对象:它仅存在于设计时,并连接到运行时存在的对象.   宿主容器 我们可以看到每个窗体和按钮均有与之相关的设计器.这两个 ...

随机推荐

  1. std::advance 给迭代器增加指定偏移量

    template <class InputIterator, class Distance> void advance (InputIterator& it, Distance n ...

  2. binary 和 varbinary

    固定长度或可变长度的 Binary 数据类型. binary [ ( n ) ] 长度为 n 字节的固定长度二进制数据,其中 n 是从 1 到 8,000 的值.存储大小为 n 字节. varbina ...

  3. ARM7ldr指令与ldr伪指令

    ldr伪指令的第二个操作数之前有个=,意思是第一个操作书 = 第二个操作数,相当明了 核心就在于对于用.word指令在.text段里另外定义一段内存,用ldr r0,[pc + x(可以算出.text ...

  4. http_build_query函数(学习)

    http_build_query函数   http_build_query -- 生成 url-encoded 之后的请求字符串 描述 string http_build_query ( array ...

  5. Rails中的MIME类型

    layout title date comments categories post rails的中的MIME类型 2014-09-08 21:40 true ruby Rails开发中经常使用不同的 ...

  6. Oracle > count(*) / count(0) / count(1) | order by 1, 2

    select count(*), select count(0), select count(1) from table 在统计表的行数时候,经常用到 select count(*) 然而对于行数很多 ...

  7. bzoj1937

    这道题没弄明白 初始模型很好想,是用到了最小生成树的性质 加入非树边后树上形成的环,非树边一定大于等于任意树边 然后考虑树边一定是缩小,非树边一定是增大 有di+wi>=dj-wj wi+wj& ...

  8. UVa 10213 (欧拉公式+Java大数) How Many Pieces of Land ?

    题意: 一块圆形土地,在圆周上选n个点,然后两两连线,问把这块土地分成多少块? 分析: 首先紫书上的公式是错的,不过根据书上提供的思路很容易稍加修改得到正确答案! 然后推公式吧,这里用到平面图的欧拉公 ...

  9. memcached单点故障与负载均衡

    在上文中,主要教大家如何搭建在windows  IIS 7.5下搭建php环境,使用常见的两种memcached性能监视工具.通过自己动手实践,观察监控工具上数据,相信大家对于memcached的了解 ...

  10. 使用Busybox-1.2.0制作根文件系统

    使用Busybox-1.2.0制作根文件系统 cross-3.3.2 make-3.8.1 STEP 1: 创建根文件系统目录,主要包括以下目录/bin,/etc,/dev,/mnt,/sbin,/u ...