系统插件主要基于IAppMDIProc接口实现,
接口中提供了MainMdi属性,在程序加载插件时,由主程序负责指定当前主窗口,
ProcInformation,ProcLogo,ProcName主要是用于显示插件属性,包括信息说明,图标,及插件名称
DoAction方法在调用系统功能时会将功能名传递至此方法,
如:
在Function.xml文件中定义了:
<内容 CodeName="Archive.Department">部门档案</内容>
在主程序中将会自动查询是否正确加载Archive插件,若已经加载则会调用DoAction方法:
DoAction("Department",ref tmpCancel)
若在插件处理中将tmpCancel置为TRUE时则主程序将不再继续处理
插件负责返回一个Form对象,告诉主窗口当前是否有新的窗口创建
OnApplicationInited方法在系统初始化完成后调用,一些插件特有的初始操作可在此完成,像加载一些特定的数据(加密数据等)
OnApplicationShutDown方法在主程序关闭时调用
在应用平台主中,系统将提供一个Platform的静态对象,对象中包括:
当前登录应用系统信息Application(为ApplicationInformation实例)
当前数据连接Connection
是否正在处理业务操作DoAction
主窗口对象MainForm
当前登录应用系统数据操作对象TableDefine
当前系统平台版本Version
其中Application属性提供了,当前登录平台的所有信息,包括用户信息及权限信息等,
Cure所提到的插件间通信的问题,我还暂没涉及到,真的谢谢Cure的提醒,
目前变通的方法是用ApplicationInformation对象中的Components来完成,
只是不知道是否足够达到各位所需要的功能,
ApplicationInformation.Components是一个ApplicationComponent的集合,里面是所有当前系统加载的
若需要一个指定的插件对象可以用下面的方法调用
返回一个Archive插件
Archive tmpCurArch=(Archive)PlatForm.Application.Components["Archive"]
日后我将为系统增加IServiceContainer与IServiceProvider的接口实现,这样就能比较正规的达到各插件间彼此的调用