12、ERP设计之 系统基础管理(BS)- 模块与菜单的关联
ShareERP2013-10-03
模块:具有功能设计、权限绑定,链接用户菜单与系统的重要桥梁。
菜单:是用于显示与用户交互的重要入口,更是导航系统的舵手,所以它的设计直接影响到用户体验。
菜单可能根据不同的用户会有不同的加载方式,特别是定制的系统,灵活性不必可少。并且,可扩展性,提供用户二次开发接口,可挂接用户自己的模块及调用菜单,当用户增加自己的模块或菜单后,能否进行权限控制,那么在权限设计时就要充分考虑到这些要素,详细请参看权限设计。
在一般系统中,菜单和工具栏按钮是共享事件过程的,我们不太可能给每个Event绑定一个过程,那样的代码量不但大而且冗余,就笔者使用的Delphi为例,Delphi为我们提供了ActionList控件,它是能很好的链接菜单和工具栏按钮的控件,不光是Event能共享,就连快捷键、图像、标题、Hint都为我们做好了。有了它看似简单许多,但我们还要进一步简化操作,就算共享Event,但功能项太多,不能每项都去编写代码,并且每项功能还都是动态创建的,为此我们要做一个统一的Event过滤器来执行操作,将所有的功能项绑定到Event过滤器上,以功能编号来区别功能调用。
为方便维护,笔者将各个子系统模块定义成DLL动态库,动态库里分若干子模块,每个子模块对应一菜单项,这样的映射关系需要做一个菜单模块映射表,用来记录它们,以便用户自定义自己的模块。
菜单与模块映射表 |
|||||
序号 |
主键 |
字段名 |
字段说明 |
数据类型 |
长度 |
1 |
YES |
iAutoID |
int |
4 |
|
2 |
cMCode |
模块编号 |
varchar |
20 |
|
3 |
cMenuName |
菜单名 |
varchar |
20 |
|
4 |
cMenuCaption |
菜单标题 |
varchar |
40 |
|
5 |
cParentName |
父级菜单 |
varchar |
20 |
|
6 |
cRemark |
备注 |
varchar |
20 |
|
7 |
bVisible |
菜单可见 |
bit |
1 |
有了菜单与模块映射表,就可以动态的为系统创建模块菜单和树形视图。
前面提到,DLL动态库模块,动态库模块它本身也是一个树形结构。
模块->
子模块->
功能项->
功能项N…
子模块N…->
Delphi 为我们提供了TCollection对像,它非常方便管理这种结构,然后再将 TCollection转成菜单就OK。
模块管理类的简单定义:
TModuleMgr = class; //菜单项 TModuleItem = class(TCollectionItem) public fTreeNode: TTreeNode; fMInfo: TModuleItemRec; procedure MenuOnClick(Sender: TObject); //菜单点击事件过滤 end; TModules = class(TCollection) private fForms: TList; DLLHandle: Integer; //DLL句柄 fSysHelper: TModuleMgr; procedure OnTimer(Sender: TObject); function GetItems(Index: Integer): TModuleItem; procedure SetItems(Index: Integer; Value: TModuleItem); public ModuleID: Integer; DLLFileName: string; function AddDLLFunction(const MenuCode: string): TModuleItem; constructor Create(ItemClass: TCollectionItemClass; ASysHelper:TModuleMgr); property Items[Index: Integer]: TModuleItem read GetItems writeSetItems; destructor Destroy; override; function GetActiveFunc: TModuleItem; procedure Execute(AItem: TModuleItem); end; TModuleItemRec = record ModuleDllName: string; //Dll Name ModuleParentCode: string; //父项序号 ModuleCode: string; //模块功能序号 MenuCode: string; //菜单编码 ModuleFormTitle: string; //菜单标题 ModuleTemplate: string; //模板名 iShowType: Byte; //窗口显示类型 ModuleType: TTemplateType; //模块类型 =TTemplateType单据模板类型 ModuleEnabled: Boolean; //菜单是否有效 RootAuth: string; //权限编码 InfaceName: string; //接口名 end; PModuleItemRec =^TModuleItemRec;
下篇:系统基础管理(BS)- 栏目与查询 待续……
来源:分享ERP http://www.shareerp.com 联系QQ:908916944
12、ERP设计之 系统基础管理(BS)- 模块与菜单的关联的更多相关文章
- ERP设计之系统基础管理(BS)-日志模块设计(转载)
原文地址:8.ERP设计之系统基础管理(BS)-日志模块设计作者:ShareERP 日志模块基本要素包括: 用户会话.登录.注销.模块加载/卸载.数据操作(增/删/改/审/弃/关等等).数据恢复.日志 ...
- 10、ERP设计之系统基础管理(BS)- 平台化设计
ShareERP 2013-09-03 ERP业务平台化是每个软件提供商必须要进行的趋势,传统定制化路线已死,不能走定制化的老路了.以往最大问的题是不能累积和沉淀技术及提升项目业务管理能力,其次是管理 ...
- ERP或PLM系统-物料编码管理的技术实现
1 企业现状 企业日常经营过程中会产生大量的文档,如设计图纸.变更单.计算书.设计方案等,如果是制造企业还会产生大量的产品.组成产品的零部件等物料,这些数据在进入信息系统前都需要有一个唯一的标识,也就 ...
- ERP产品购进系统商品管理(三十三)
购进系统总体架构图: 总体业务: 流程图: 自定义函数: -- Description: 根据渠道编号查询渠道名称 -- ======================================= ...
- RDIFramework.NET ━ 9.6 模块(菜单)管理 ━ Web部分
RDIFramework.NET ━ .NET快速信息化系统开发框架 9.6 模块(菜单)管理 -Web部分 模块(菜单)管理是整个框架的核心,主要面向系统管理人员与开发人员,对普通用户建议不要授 ...
- ERP的基础管理-物料编码
在企业ERP系统中,物料编码管理是所有数据的基础,可以这样说:"没有物料编码就没有ERP".实际上物料编码对于制造类企业供应链管理作用不可说不巨大,影响不可谓不深远,甚至我们在考虑 ...
- ERP系统实施与企业内部控制管理实践
COSO内部控制体系包含5 个要素,分别为控制环境.风险评估.控制活动.信息与沟通.监督,涉及公司层面的控制.业务活动的控制以及信息系统总体控制.随着ERP系统的上线运行,企业的内部控制体系建设应与E ...
- Linu之linux系统基础优化和基本命令
Linux系统基础优化和基本命令 网络参数设定命令 ifconfig: 查询,设置网卡和ip等参数 ifup,ifdown: 脚本命令,更简单的方式 ip: 符合指令,直接修改上述功能 编辑网卡配置文 ...
- 架构设计:系统间通信(34)——被神化的ESB(上)
1.概述 从本篇文章开始,我们将花一到两篇的篇幅介绍ESB(企业服务总线)技术的基本概念,为读者们理清多个和ESB技术有关名词.我们还将在其中为读者阐述什么情况下应该使用ESB技术.接下来,为了加深读 ...
随机推荐
- ACM vim配置
ACM现场赛时用的,比较简短,但是主要的功能都有了. 直接打开终端输入gedit ~/.vimrc 把下面的东西复制到里面就行了. filetype plugin indent on colo eve ...
- 【开源java游戏框架libgdx专题】-14-系统控件-Skin类
Skin类主要用于存储用户界面的资源,该资源主要用于窗口部件.这些资源也包括纹理图片.位图画笔.颜色等内容.方便创建游戏组件,同时使用Skin也可以批量的粗略处理一些窗口部件. test.json { ...
- rest-简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- (转)php中global和$GLOBALS[]的分析之一
PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖 这可能引起一些问题,有些人可能漫不经心的改变一个全局变量.PHP 中全局变量在函数中使 ...
- 利用TOAD实现把EXCEL数据导入oracle数据库
利用TOAD实现把EXCEL数据导入oracle数据库 工具: Toad11.7z(百度搜索,直接下载) 1.将Excel文件中某些字段导入到Oracle数据库的对应表 连接想要导入的数据库 ,然 ...
- python自学笔记
python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 ...
- Qt Painter放大时,event处理应该注意的要点
比如当你Qt中用QPainter进行window和viewport,逻辑和物理坐标分离的形式进行绘图放大的时候,你会发现鼠标的移动和放大之后的图像有点不跟手,比如你是用QTransform进行放大变换 ...
- Spring AOP原理及拦截器
原理 AOP(Aspect Oriented Programming),也就是面向方面编程的技术.AOP基于IoC基础,是对OOP的有益补充. AOP将应用系统分为两部分,核心业务逻辑(Core bu ...
- ASP.NET MVC 缓存使用示例
应该说,缓存的设计是一门较为复杂的学问,主要考虑的问题包括:要不要缓存?要缓存哪些数据?要缓存多少数据?要缓存多久?如何更新缓存(手动还是自 动)?将缓存放在哪里?本文将以较为通俗易懂的方式,来看一看 ...
- python 文件系统