Management Console 工具管理类软件通用开发框架(开放源码)

做ERP/MIS之类的软件,通常会开发一些辅助工具来加速开发,比如代码生成器,数据 字典生成工具。随着时间的积累,这类小工具会越来越多,虽然开发的速度会快,方便,但是也会因为找不到,不好查找这些小工具,产生麻烦。原因很简单,已经 发了很多精力去做成了工具,自然就不会考虑用很原始的方式来完成任务。

举例说明
对于插件式的开发,我们通常会先做好界面功能,然后把这个功能添加到系统的功能列表中,以启用功能,为完成这个目的,可以采用如下的SQL脚本来完成

INSERT System_Function(Module,Function,Description)

    VALUES(‘Inventory’,'ICMISR’,'Inventory Receipt’)

这样,就把新做好的进仓单功能加到系统功能中,以启用功能。

但情况通常没有这样简单,通常还要设置有哪些用户和角色有权限执行进仓功能,等等。

一种改善的办法,是把这些功能都做成脚本文件,一次调用就完成功能增加,权限分配的任务

Management Console 工具管理类软件通用开发框架(开放源码)_第1张图片

如上图,就产生了这么一个小工具. 这是很简化的情况。

我要讲述的主题是,当积累了很长时间,手头有很多这样的小工具,如何把它们整合到一个容器中,方便调用。

先看效果图,边看图边说
 Management Console 工具管理类软件通用开发框架(开放源码)_第2张图片

如图所示,在这里,我集成诸多工具,比如
DataSet Reader 用于读取dataset的工具

Translation  多国语言的翻译工具,
StringBuilder 字符串构造工具,例如,我想把SQL语句
                    SELECT  FunctionCode FROM  dbo.AuditTrail   转化成字符串,以传递到SQL Server中

为了集成进仓单的功能到这个工具中,需要如下处理
Management Console 工具管理类软件通用开发框架(开放源码)_第3张图片

修改窗体的继承基类为FormBase,给窗体类添加FunctionCode的特性,这个特性用于反射查找这里的窗体

修改ListItem.xml文件,增加一个Item项,如图所示

Management Console 工具管理类软件通用开发框架(开放源码)_第4张图片

内容是

<Item Index="10" Text="InventoryReceipt"  Tag="Inventory Receipt" ImageIndex="35"></Item>

ListItem的内容,就是效果图中,要显示在Task List任务框中的内容,Text是标题,Tag是功能的FunctionCode的值,ImageIndex是图像的索引。

其实,这里还可以做更多的控制。比如,如果没有功能的源代码,需要用反射的方式去call功能所在的程序集,为实现这个目的,还需要增加Item.Assembly以指向它所有的程序集;
如果功能的源代码不是.NET代码所写,要支持Process.Start的方式启动工具,必要时还需要增加参数。

再进入源代码,看看这个工具是如何构造的

Management Console 工具管理类软件通用开发框架(开放源码)_第5张图片

MainForm是主窗体,这里采用的是Infragistics2.Win.UltraWinTabbedMdi组件,取代过时的MDI窗体组织形式,

NewProject是Task List任务窗体,这是功能显示的集成项目,Ctrl+N启动这个窗体,ListItem.xml是它的配置项

主窗体中的其他菜单,均没有使用

Startup是启动时显示的主窗体,在这里,可以显示一些常见工具的快捷方式
为了获取和Office 2007一样的蓝色主题效果,可反注释如下的代码

ToolStripManager.Renderer = new WinUI.Misc.Office2007Renderer();
statusStrip.Renderer = new WinUI.Misc.Office2007Renderer();

菜单和状态栏的效果如下图

Management Console 工具管理类软件通用开发框架(开放源码)_第6张图片

反射应用于查找窗体的特性,找出它的定义,显示出来,代码框架如下

Assembly assembly = Assembly.GetExecutingAssembly();

object entryForm = Activator.CreateInstance(formBaseType) as Form;

entryForm .MdiParent = this;
entryForm .Show();
entryForm .Activate();
这便是这个工具,最有价值的内容。也达到了开头提出的效果,只开发功能和配置ListItem文件,确实达到插件的目的.


请到epn.codeplex.com上获取最新的源代码,请使用Visual Studio 2008编译。

因图中提及的部分插件工具已经应用到实际生产中,恕不提供源代码下载。

你可能感兴趣的:(console)