SpDevelop开发文档之"命令"

命令
        我们建议将插件中的一些可能由框架调用的函数(比如数据库插件中的Open函数)做成命令的方式,即从SpDevelop.Commands.Command类中继承下来然后重载Run()函数。利用命令方式有一下几个好处:
        1、 插件之间可以低耦合的相互调用,通过框架的SpDevelop.SpApi.Commands.Run(命令注册名,命令的参数)函数调用其他插件的命令。比如调用系统框架自带的打开命令,我们可以通过调用SpDevelop.SpApi.Commands.Run(“OpenCommand”,” DirectFileName:c:\\a.txt”);
         2、 插件中的主菜单和工具栏按钮可以通过调用该命令来完成要执行的动作。

命令配置文件格式
          <Command>
              < Command
                      RegName="FieldSetShowCommand"
                      CommandClass="Sp.DbPlugin.Commands.FieldSetShowCommand" />
      
</Command> 

       命令配置节点的属性
       A、 RegName: 该命令在插件系统中的注册名称,这个注册名称在整个SpDevelop系统中必须是唯一的,这个在本插件或其他插件中即可根据该注册名称来调用SpDevelop.SpApi.Commands.Run函数实现执行该命令 
      B、 CommandClass:该命令的类,这个值必须是完整的类名(包括命名空间),这个类必须从SpDevelop.Commands.Command中继承而来,并且重载Run()函数,在基类中有个Args属性,这个属性是运行该命令的参数。

范例
现在让我们来实现一个在输出窗体中输出Hello world的命令,命令的配置信息 

              < Command
                      RegName="TestCommand"
                      CommandClass="Sp.DemoPlugin.TestCommand" />
             
</Command>
    命令的类
              using System; 
              namespace Sp.DemoPlugin
              {
                       class TestCommand:SpDevelop.Commands.Command
                       {
                              public override bool Run()
                              {
                                     if (Args == "Hello")
                                            SpDevelop.SpApi.Pads.OutputPad.Add("Hello world");
                                     return true;
                               }
                       }
               }

     我们可以通过以下函数调用该命SpDevelop.SpApi.Commands.Run(“TestCommand”,”Hello”); 或者通过配置文件调用

      <MenuItemSet>

             <MenuItem Text="测试" Shortcut="T" RegName="MiTest" MenuPath="" Index="5" Visiable="true"/>

         <MenuItem Text="Hello" Shortcut="H" RegName="MiHello" MenuPath="MiTest" CommandRegName="TestCommand" CommandArgs="Hello"/>

      </MenuItemSet>

 

系统自带的命令
     1、 新建命令 NewCommand
            A、 参数为 Project 新建项目工程,这是系统将自动弹出新建工程的窗体。
            B、 参数为 File:父节点的GUID 或者 File 新建文件,当参数后面跟着父节点的GUID,则新建的文件将自动被添加到父节点下。
            C、 参数为 Folder 新建文件夹
    2、 打开命令 OpenCommand
            A、 参数为DirectFileName:文件的完成路径名称直接代开指定的文件 
            B、 参数为All 弹出打开所有文件的窗体
            C、 参数为Soluction 弹出打开解决方案的窗体
            D、参数为Project 弹出打开工程的窗体
            E、 参数为File 弹出打开文件的窗体
    3、 保存命令 SaveCommand
            A、 参数为All 将所有打开的工作窗体进行保存 
            B、 参数为Selected 将当前活动的工作窗体进行保存 
            C、 参数为SelectedAs 将当前的工作窗体另存为
    4、 关闭命令 CloseCommand
            A、 参数为Selected 关闭当前活动的工作窗体
            B、 参数为Soluction 关闭整个解决方案
            C、 参数为Frame 关闭SpDevelop应用程序
    5、 编辑命令EditCommand
            A、 参数为Find 查询
            B、 参数为Copy 从活动工作窗体中拷贝内容
            C、 参数为Paste 将剪切板中的内容粘贴到当前活动的工作窗体中
            D、参数为Delete 将当前活动窗体中的所有选中的内容删除
            E、 参数为SelectAll 将当前活动窗体的所有内容选中 
    6、 窗体命令WindowCommand
            A、 参数为HideAllPad 隐藏所有浮动窗体
            B、 参数为CloseAllWorkbench 关闭所有工作窗体
    7、 打印命令PrintCommand
            A、 参数为PrintSetup 打印设置 
            B、 参数为Print 将当前的工作窗体进行打印
            C、 参数为PrintPreview 打印预览 参数为DirectFileName:文件的完成路径名称直接代开指定的文件

 

 

框架对主菜单可通过SpDevelop.SpApi. Commands来调用

     /// <summary>

     /// 命令服务器

     /// </summary>

     public interface ICommandServer

     {

         /// <summary>

         /// 添加

         /// </summary>

         /// <param name="cmdConfig">

         /// 命令配置信息

         /// </param>

         /// <returns></returns>

         bool AddCommand(CommandConfig cmdConfig);

 

         /// <summary>

         /// 添加

         /// </summary>

         /// <param name="regName">注册名称</param>

         /// <param name="cmd">命令实体</param>

         /// <returns></returns>

         bool AddCommand(string regName,Command cmd);

 

         /// <summary>

         /// 运行

         /// </summary>

         /// <param name="regName">注册名称</param>

         /// <returns>是否运行成功</returns>

         bool Run(string regName);

 

         /// <summary>

         /// 运行

         /// </summary>

         /// <param name="regName">注册名称</param>

         /// <param name="args">命令参数</param>

         /// <returns>是否运行成功</returns>

         bool Run(string regName,string args);

 

         /// <summary>

         /// 获取命令

         /// </summary>

         /// <param name="regName">注册名称</param>

         /// <returns>命令实体</returns>

         Command Get(string regName);

}

 

posted on 2007-04-19 18:23  spdevelop  阅读(172)  评论(0编辑  收藏  举报

导航