如何创建SOLIDWORKS PDM Professional (EPDM)插件
SOLIDWORKS PDM Professional(以前称为SOLIDWORKS Enterprise PDM)提供了丰富的API库,使第三方能够为系统开发自定义扩展。通过开发应用程序作为SOLIDWORKS PDM插件,可以实现最高级别的集成。下面的详细逐步说明将指导您从头开始创建插件。
在本文中,我将在Microsoft Visual Studio中使用.NET(C#和VB.NET)创建插件。
- 启动Visual Studio并创建新项目
- 从项目模板中选择类库
- 指定插件的名称
- 必须添加对PDM Interop库的引用(针对Framework 3.5和2.0的项目使用EdmInterface.dll,针对Framework 4.0或更高版本的项目使用EPDM.Interop.epdm.dll)。库可以在SOLIDWORKS PDM安装文件夹中找到(通常是C:\Program Files\SOLIDWORKS PDM\EPDM.Interop.epdm.dll(针对Framework 4.0及更高版本)和C:\Program Files\SOLIDWORKS PDM\EdmInterface.dll(针对旧版本))。
- 如果项目针对.NET Framework 4.0及更高版本,则需要将Embed Interop Types选项设置为False,否则插件可能会出现问题。
{ width=320 height=291 }
为了创建PDM插件的类,需要执行3个强制步骤:
- 实现IEdmAddIn5接口。
- 将类标记为Com Visible。
- 在GetAddInInfo中通过设置EdmAddInInfo.mlRequiredVersionMajor属性来指定插件支持的最低主要版本。
using EdmLib;
using System;
using System.Runtime.InteropServices;
namespace CodeStack
{
[ComVisible(true)]
[Guid("3A601AFC-7007-46A7-9E71-D3BD41B5E2E2")]
public class PdmAddInSample : IEdmAddIn5
{
const int TEST_CMD_ID = 1;
public void GetAddInInfo(ref EdmAddInInfo poInfo, IEdmVault5 poVault, IEdmCmdMgr5 poCmdMgr)
{
poInfo.mbsAddInName = "Demo AddIn";
poInfo.mlRequiredVersionMajor = 17; //SOLIDWORKS PDM 2017 SP0
poCmdMgr.AddCmd(TEST_CMD_ID, "Test Menu Command");
}
public void OnCmd(ref EdmCmd poCmd, ref Array ppoData)
{
if (poCmd.meCmdType == EdmCmdType.EdmCmd_Menu)
{
if (poCmd.mlCmdID == TEST_CMD_ID)
{
(poCmd.mpoVault as IEdmVault10).MsgBox(0, "Hello World!");
}
}
}
}
}
注意事项
- 建议不要勾选“使程序集COM可见”选项,而是对所有需要COM可见的类(例如插件的主类)使用ComVisible属性。否则,这可能会显著增加插件的加载时间。
{ width=320 height=269 }
- 与注册SOLIDWORKS插件不同,不需要实际注册PDM插件DLL作为COM对象(即运行RegAsm实用程序或在项目属性中选中“为COM互操作注册程序集”选项)。
- 建议使用Guid属性装饰插件的类,因为这将允许更好地跟踪客户端机器上的插件(例如调试或清除插件缓存)。
为了将PDM插件加载到库中,请按照以下步骤操作:
- 启动SOLIDWORKS PDM Administration控制台(可以在Windows开始菜单中找到)
- 导航到PDM库
- 选择Add-Ins节点,然后选择New Add-In...命令
{ width=320 height=250 }
- 从项目的bin目录中选择所有文件。您不需要添加像(.pdb或.xml)这样的临时文件。
- 一旦插件加载完成,其摘要将显示
{ width=320 height=263 }
导航到库视图,并从上下文菜单中选择Test Menu Command。
{ width=320 height=318 }
将显示消息框:
{ width=198 height=200 }
SOLIDWORKS PDM是一个客户端-服务器架构系统,这意味着每当插件加载到库中时,它将分发到所有客户端。当客户端登录到库时,PDM将本地下载插件DLL到*%localappdata%\SolidWorks\SOLIDWORKS PDM\Plugins**VaultName**AddIn GuidIndex*文件夹中。
插件DLL将在首次登录到PDM库时加载到多个进程中(包括explorer.exe)。由于.NET Framework的限制,无法从应用程序域中卸载.NET库。这就是为什么PDM在添加插件到库时显示“'You have chosen to load a .NET add-in. SOLIDWORKS PDM cannot force a reload of .NET add-ins'”的原因。
{ width=320 height=169 }
这个消息意味着缓存(之前的)版本的PDM插件将在使用中,直到DLL被解锁。不需要重新启动机器,可以使用以下命令行脚本一次性释放插件:
TASKKILL /F /IM explorer.exe
TASKKILL /F /IM EdmServer.exe
TASKKILL /F /IM ConisioAdmin.exe
TASKKILL /F /IM AddInSrv.exe
START explorer.exe
SOLIDWORKS PDM提供了方便的功能,简化了PDM插件的调试。请阅读以下文章:调试SOLIDWORKS PDM插件 - 最佳实践
下面是从头开始创建SOLIDWORKS PDM插件的视频演示:
{% youtube { id: GsTWneNoIW4 } %}