动态菜单的实现可以分为以下步骤
一准备工作
建立模块属性表包括所有需要分配的模块的窗口名称标题图标MicrohelpToolbarItemText等属性
建立部门可用菜单表包括部门号menu_bar顺序可用窗口名称等属性
建立部门模块管理功能此功能主要分配某部门可以打开那些模块以及这些模块如何布置
二动态菜单实现
创建一个菜单m_main_frame含所有部门都需要的项如[文件][窗口][帮助]等然后在中间加入个menu_bar每个menu_bar下建立个menu_item(可以按实际情况增减)
在每个menu_item下调用函数mf_open_module(thistag)该函数即用于打开窗口(模块)
程序运行时在main_frame的open事件中根据当前用户所在的部门修改该用户的菜单属性包括itemTextmicrohelptoolbarItemNametoolbaritemtextvisibleenabled等等
通过以上步骤显示给用户的界面就是由系统管理员所定制的菜单
三优缺点
优点
■快速的开发框架可以立即进行实际业务系统的开发而不用理会相关开发框架技术上的问题
■可以充分扩展模块只需要加入某补丁库中即可其他程序不用修改
■可以由系统管理员充分自由地定制每个部门或用户的可用模块
■模块容量无实际限制可多可少
■可以扩展给用户自己定义菜单的显示方式如文字microhelp图标等
■对开发人员可以提供增加模块到模块表中的辅助工具其他开发框架问题可以不用考虑
缺点
■需要建立额外的两张表(模块表部门模块定义表)增加工作量
■目前只能以opensheet()方式打开main形式的窗口(可以扩展打开responsepop类型的窗口)
■目前只实现了二级菜单更多级别的菜单尚未实现但原理是一致的
函数mf_open_module参考
//////////////////////////////////////////////////////////////////
// Function: mf_open_module
// Access: Public
// Arguments: string as_module_id
// Returns: None
// Description: 打开模块(sheet)
// Designer: 刘建刚
// Date: //
//////////////////////////////////////////////////////////////////
Integer li_sheet li_Resp
Window lw_Exlw_sheet
if isnull(as_module_id) or as_module_id = then
messagebox(参数错误请检查模块ID设置)
else
lw_sheet = parentwindowGetFirstSheet()
do while isvalid(lw_sheet)
if lw_sheetclassname() = as_module_id then
Opensheet(lw_sheetparentwindoworiginal!)
return
end if
lw_sheet = parentwindowGetNextSheet(lw_sheet)
loop
li_Resp = Opensheet(lw_Ex as_module_idparentwindoworiginal!)
end if
方案三分离为多个子系统
分离为多个子系统方式即根据业务规则将模块按业务所在部门进行分类通常一个业务部门为一个子系统各子系统有独立的applicationmain_menumain_window相互之间没有任何关系有独立的可执行程序独立的设置
优缺点
优点
■独立性各业务系统相互关联少
■自由性可以定制特定的内容如界面等
■不需要辅助控制
缺点
■各分系统需要考虑各自的框架增加额外工作量
■系统修改扩展性差需要重新编译整个分系统
■代码可重用部分少容易造成整理不一致
编辑推荐
JEE高级框架实战培训视频教程
数据仓库与数据挖掘培训视频教程
[] []