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)- 模块与菜单的关联的更多相关文章

  1. ERP设计之系统基础管理(BS)-日志模块设计(转载)

    原文地址:8.ERP设计之系统基础管理(BS)-日志模块设计作者:ShareERP 日志模块基本要素包括: 用户会话.登录.注销.模块加载/卸载.数据操作(增/删/改/审/弃/关等等).数据恢复.日志 ...

  2. 10、ERP设计之系统基础管理(BS)- 平台化设计

    ShareERP 2013-09-03 ERP业务平台化是每个软件提供商必须要进行的趋势,传统定制化路线已死,不能走定制化的老路了.以往最大问的题是不能累积和沉淀技术及提升项目业务管理能力,其次是管理 ...

  3. ERP或PLM系统-物料编码管理的技术实现

    1 企业现状 企业日常经营过程中会产生大量的文档,如设计图纸.变更单.计算书.设计方案等,如果是制造企业还会产生大量的产品.组成产品的零部件等物料,这些数据在进入信息系统前都需要有一个唯一的标识,也就 ...

  4. ERP产品购进系统商品管理(三十三)

    购进系统总体架构图: 总体业务: 流程图: 自定义函数: -- Description: 根据渠道编号查询渠道名称 -- ======================================= ...

  5. RDIFramework.NET ━ 9.6 模块(菜单)管理 ━ Web部分

    RDIFramework.NET ━ .NET快速信息化系统开发框架 9.6  模块(菜单)管理 -Web部分  模块(菜单)管理是整个框架的核心,主要面向系统管理人员与开发人员,对普通用户建议不要授 ...

  6. ERP的基础管理-物料编码

    在企业ERP系统中,物料编码管理是所有数据的基础,可以这样说:"没有物料编码就没有ERP".实际上物料编码对于制造类企业供应链管理作用不可说不巨大,影响不可谓不深远,甚至我们在考虑 ...

  7. ERP系统实施与企业内部控制管理实践

    COSO内部控制体系包含5 个要素,分别为控制环境.风险评估.控制活动.信息与沟通.监督,涉及公司层面的控制.业务活动的控制以及信息系统总体控制.随着ERP系统的上线运行,企业的内部控制体系建设应与E ...

  8. Linu之linux系统基础优化和基本命令

    Linux系统基础优化和基本命令 网络参数设定命令 ifconfig: 查询,设置网卡和ip等参数 ifup,ifdown: 脚本命令,更简单的方式 ip: 符合指令,直接修改上述功能 编辑网卡配置文 ...

  9. 架构设计:系统间通信(34)——被神化的ESB(上)

    1.概述 从本篇文章开始,我们将花一到两篇的篇幅介绍ESB(企业服务总线)技术的基本概念,为读者们理清多个和ESB技术有关名词.我们还将在其中为读者阐述什么情况下应该使用ESB技术.接下来,为了加深读 ...

随机推荐

  1. Canvas transform浅析

    没有前奏,直接进入主题 transform调用方法: ctx.transform(a,b,c,d,e,f);如下 var ctx = document.getElementById("myC ...

  2. Web字体工具整理,网页图标字体以及使用方法整理

    常用网站app logo 下载: http://www.iconfont.cn/collections/show/268?spm=a313x.7781069.0.0.nDYawz 1.Web字体免费生 ...

  3. Java面向对象的概念以及OOP思想的优点

    传统面向过程程序设计的思路: 先设计一组函数用来解决一个问题,然后确定函数中需要处理的数据以及存储位置. 面向对象的设计的思路: 先确定处理的数据,然后确定处理数据的算法,最后将数据和算法封装在一起构 ...

  4. 016_openxml_forxml

    016_openxml_forxml --openxml*********************************************************************** ...

  5. windows下安装CI框架

    CI框架是一个非常流行的 mvc框架, CI框架如何安装和使用,在CI中文网已经讲的比较详细了 ,这里记录下几个需要注意的地方. 一. index.php问题 把压缩包下载解压到项目根目录即可运行里面 ...

  6. Python文件之----JSON

    #coding=utf-8import json def writeJSON(filaName="test.json"): f=open(filaName, "wb&qu ...

  7. MPICH2在两台Ubuntu上安装(用mpd做进程管理)

    本文在经过大量的实验终于不负众望成功的在两台Ubuntu 12.04上部署MPI的一个小型集群,MPICH2所用版本为mpich2-1.4.1,下载地址:http://www.mcs.anl.gov/ ...

  8. Asp.net的IP地址屏蔽功能设计

    "IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开." 由此我们了解到,IP地址实际上是一个32位正整数,在C#中可以使 ...

  9. 【FLYabroad 】微软内部代码检查工具 (Microsoft Source Analysis for C#)[转]

    SourceAnalysis (StyleCop)的终极目标是让所有人都能写出优雅和一致的代码,因此这些代码具有很高的可读性. 早就听说了微软内部的静态代码检查和代码强制格式美化工具 StyleCop ...

  10. css 日常

    去掉input边框    outline:none; 不让用户选择文本 user-select: none; 手机网页点击输入框的瞬间会出现灰色背景    解决方案: -webkit-tap-high ...