本文介绍如何使一个文件在添加、检入、检出到库时,让add-in 程序在SOLIDWORKS PDM Professional 中通知到你。
注意: 因为 SOLIDWORKS PDM Professional 无法强制重新加载Add-in程序 ,必须重新启动所有客户端计算机,以确保使用最新Add-in程序。
- 启动VS。
- 新建项目,选择类库。
- 在“解决方案资源管理器”中右键单击项目名称 ,然后单击添加引用。
-
单击 COM 在 左侧面板,单击PDMWorks Enterprise 2019 Type Library,然后单击添加。
- 如果需要,引入相关的程序集。
- 设置Interop.EdmLib的嵌入互操作类型为False。
-
- 在“解决方案资源管理器”中右击项目名称,然后单击“属性”。
- “应用程序>程序集信息”。
- 取消勾选“使程序集 COM 可见(M)”。
- 修改Class1.cs。这里修改类名为HooksDemo。
- 添加和创建GUID。
- 修改代码
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。
- 打开PDM 管理工作。
- 登录。
- 在插件中添加调试插件。
PostAdd:拖进去,新建
PostLock:检出
打包https://download.csdn.net/download/hd51cc/87883278