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

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

INSERT System_Function(Module,Function,Description)

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

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

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

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

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

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

 

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

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

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

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

 

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

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

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

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

内容是

<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 工具管理类软件通用开发框架(开放源码)

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 工具管理类软件通用开发框架(开放源码)

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

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编译。

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

相关文章:

  • 2022-12-23
  • 2022-03-05
  • 2022-12-23
  • 2022-02-17
  • 2022-12-23
  • 2021-11-18
  • 2021-04-06
  • 2021-11-18
猜你喜欢
  • 2022-12-23
  • 2021-11-23
  • 2021-12-24
  • 2022-01-21
  • 2021-11-22
相关资源
相似解决方案