Creating Add-in Hooks (C#)

本文介绍如何使一个文件在添加、检入、检出到库时,让add-in 程序在SOLIDWORKS PDM Professional 中通知到你。

注意: 因为 SOLIDWORKS PDM Professional 无法强制重新加载Add-in程序 ,必须重新启动所有客户端计算机,以确保使用最新Add-in程序。

  1.  启动VS。
  2. 新建项目,选择类库。Creating Add-in Hooks (C#)_第1张图片
  3. 在“解决方案资源管理器”中右键单击项目名称 ,然后单击添加引用。

      

    1. 单击 COM 在 左侧面板,单击PDMWorks Enterprise 2019 Type Library,然后单击添加

    2. 如果需要,引入相关的程序集。
    3. 设置Interop.EdmLib的嵌入互操作类型为False。
  4. 在“解决方案资源管理器”中右击项目名称,然后单击“属性”。

    1. “应用程序>程序集信息”。
    2. 取消勾选“使程序集 COM 可见(M)”。
  5. 修改Class1.cs。这里修改类名为HooksDemo。
    1.  添加和创建GUID。
    2. 修改代码
      using System;
      using EdmLib;//添加
      using System.Runtime.InteropServices;//添加
      
      namespace HooksDemo
      {
          [Guid("ED61F793-4B69-4440-BDF8-20F188CC64E7"), ComVisible(true)]
           public class HooksDemo:IEdmAddIn5
          {
          }
      }

实现 IEdmAddIn5::GetAddInInfo 和IEdmAddIn5::OnCmd                                                                                                                                                       

using System;
using EdmLib;//添加
using System.Runtime.InteropServices;//添加

namespace HooksDemo
{
    [Guid("ED61F793-4B69-4440-BDF8-20F188CC64E7"), ComVisible(true)]
    public class HooksDemo:IEdmAddIn5
    {
        public void GetAddInInfo(ref EdmAddInInfo poInfo, IEdmVault5 poVault, IEdmCmdMgr5 poCmdMgr)
        {
            //Specify information to display in the add-in's Properties dialog box
            //指定要在Add-in的“属性”对话框中显示的信息
            poInfo.mbsAddInName = "My first Hook";
            poInfo.mbsCompany = "51cc";
            poInfo.mbsDescription = "This is a very nice add-in.";
            poInfo.mlAddInVersion = 1;

            //Specify the minimum required version of SolidWorks PDM Professional
            //指定 SolidWorks PDM Professional 所需的最低版本
            poInfo.mlRequiredVersionMajor = 5;
            poInfo.mlRequiredVersionMinor = 2;

            //########################################################################################################
            //Register hooks  注册钩子
            //添加一个钩子,使 SOLIDWORKS PDM Professional 在发生指定事件时调用此加载项的 IEdmAddIn5::OnCmd 实现。
            //########################################################################################################
            //Notify the add-in when a file has been added  添加文件时通知Add-in
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostAdd);

            //Notify the add-in when a file has been checked out  检出文件时通知Add-in
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostLock);

            //Notify the add-in when a file is about to be checked in 在即将检入文件时通知Add-in
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreUnlock);

            //Notify the add-in when a file has been checked in 检入文件后通知Add-in
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostUnlock);
        }

        public void OnCmd(ref EdmCmd poCmd, ref Array ppoData)
        {
            //Handle the hook
            string name = null;
            switch (poCmd.meCmdType)
            {
                case EdmCmdType.EdmCmd_PostAdd:
                    name = "PostAdd";
                    break;
                case EdmCmdType.EdmCmd_PostLock:
                    name = "PostLock";
                    break;
                case EdmCmdType.EdmCmd_PreUnlock:
                    name = "PreUnlock";
                    break;
                case EdmCmdType.EdmCmd_PostUnlock:
                    name = "PostUnlock";
                    break;
                default:
                    name = "?";
                    break;
            }

            //Check the upper and lower bounds of the array 检查数组的上限和下限
            string message = null;
            message = "";
            int index = 0;
            index = ppoData.GetLowerBound(ppoData.Rank-1);
            int last = 0;
            last = ppoData.GetUpperBound(ppoData.Rank-1);

            //Append the paths of all files to a message string 将所有文件的路径追加到消息字符串
            while (index <= last)
            {
                message = message + ((EdmCmdData)(ppoData.GetValue(index))).mbsStrData1 + "\r\n";
                index++;
            }

            //Display a message to the user
            message = "The following files were affected by a " + name + " hook:" + "\r\n" + message;

            EdmVault5 vault = default(EdmVault5);
            vault = (EdmVault5)poCmd.mpoVault;
            vault.MsgBox(poCmd.mlParentWnd, message);
        }
    }
}
  • 每当在 GetAddInInfo 中注册的钩子之一触发事件时,SOLIDWORKS PDM Professional 调用OnCmd 。您可以通过检查OnCmd的poCmd参数中返回的EdmCmd.meCmdType来判断哪个钩子触发了调用。meCmdType 包含一个 EdmCmdType 常量,该常量指示哪个挂钩触发了调用。
  • OnCmd 的第二个参数 ppoData 包含一个 EdmCmdData 结构数组。该数组包含受挂钩影响的每个文件的一个结构。结构成员的内容因挂钩而异。有关成员及其说明的完整列表,请参阅 EdmCmdData。

单击“生成”>“生成解决方案” ,生成Add-in。

安装生成的Add-in。

  1. 打开PDM 管理工作。
  2. 登录。
  3. 在插件中添加调试插件。Creating Add-in Hooks (C#)_第2张图片

 Creating Add-in Hooks (C#)_第3张图片

PostAdd:拖进去,新建

PostLock:检出

打包https://download.csdn.net/download/hd51cc/87883278

你可能感兴趣的:(Pdm,C#,c#,开发语言)