本范例展示如何通过实现 IEdmAddIn5::GetAddInInfo 和 IEdmAddIn5::OnCmd 去创建一个当用户在数据卡中点击一个按钮时被调用的Visual C# add-in程序。这个add-in在用户浏览文件时打开一个对话框. add-in 将所选文件的路径复制到 文件的数据卡。
注意: 因为 SOLIDWORKS PDM Professional 无法强制重新加载 .NET 中编写的Add-in程序。必须重新启动所有客户端计算机,以确保使用最新版本的外接程序。
- 启动VS。
- 新建项目,选择类库。
- 在“解决方案资源管理器”中右键单击项目名称 ,然后单击添加引用。
-
单击 COM 在 左侧面板,单击PDMWorks Enterprise 2019 Type Library,然后单击添加。
- 如果需要,引入相关的程序集。
- 设置Interop.EdmLib的嵌入互操作类型为False。
-
- 在“解决方案资源管理器”中右击项目名称,然后单击“属性”。
- “应用程序>程序集信息”。
- 取消勾选“使程序集 COM 可见(M)”。
- 修改Class1.cs。这里修改类名为CallAddin.cs。
- 添加和创建GUID。
- 修改代码
using System;
using EdmLib;//添加
using System.Runtime.InteropServices;//添加
namespace Calling_Add_ins
{
[Guid("20637265-0AAC-4730-BA59-43C4395B2D2A"),ComVisible(true)]
public class CallAddin : IEdmAddIn5
{
}
}
- 实现 IEdmAddIn5::GetAddInInfo 和IEdmAddIn5::OnCmd
using System; using EdmLib;//添加 using System.Runtime.InteropServices;//添加 namespace Calling_Add_ins { [Guid("20637265-0AAC-4730-BA59-43C4395B2D2A"),ComVisible(true)] public class CallAddin : IEdmAddIn5 { public void GetAddInInfo(ref EdmAddInInfo poInfo, IEdmVault5 poVault, IEdmCmdMgr5 poCmdMgr) { //Specify information to display in the add-in's Properties dialog box poInfo.mbsAddInName = "My Calling Add-ins"; poInfo.mbsCompany = "JXEM"; poInfo.mbsDescription = "JXEM Add-ins"; poInfo.mlAddInVersion = 1; poInfo.mlRequiredVersionMajor = 5; poInfo.mlRequiredVersionMinor = 2; //Notify the add-in when a file data card button is clicked poCmdMgr.AddHook(EdmCmdType.EdmCmd_CardButton);//按钮 } public void OnCmd(ref EdmCmd poCmd, ref Array ppoData) { //Respond only to a specific button command 仅响应特定按钮命令 //The button command to respond to begins with "MyButton:" and ends with the name of the variable to update in the card //要响应的按钮命令以"MyButton:"开头,以要在卡中更新的变量的名称结尾 if (poCmd.mbsComment.Substring(0, 9) == "MyButton:") //string mbsComment;Contains name specific to EdmCmd.meCmdType. { //Get the name of the variable to update. string VarName = poCmd.mbsComment.Substring(9); //Let the user select the file whose path will be copied to the card variable //让用户选择路径将被复制到卡变量的文件 //EdmVault5:PDM库 mpoVault:指向库的指针 EdmVault5 vault = (EdmVault5)poCmd.mpoVault; //IEdmStrLst5:允许您访问任意字符串的列表。 //BrowseForFile:显示“打开”或“另存为”对话框,用户可以在其中单击一个或多个文件。 IEdmStrLst5 PathList = vault.BrowseForFile(poCmd.mlParentWnd, (int)EdmBrowseFlag.EdmBws_ForOpen + (int)EdmBrowseFlag.EdmBws_PermitVaultFiles, "", "", "", "", "Select File for " + VarName); if ((PathList != null)) { //GetNext Gets the next string in this list. //GetHeadPosition Starts an enumeration of the strings in this list. string path = PathList.GetNext(PathList.GetHeadPosition()); //Store the path in the card variable IEdmEnumeratorVariable5 vars = (IEdmEnumeratorVariable5)poCmd.mpoExtra; //mpoExtra:The type of interface returned depends on the type of command or hook. See EdmCmdData for more information. object VariantPath = path; vars.SetVar(VarName, "", VariantPath); } } return; } } }
- 单击“生成”>“生成解决方案” ,生成Add-in。
- 安装生成的Add-in。
- 打开PDM 管理工作。
- 登录。
- 在插件中添加新插件。
- 卡 -> 文件卡 -> Text Card -> 添加按钮 -> 点击按钮 -> 命令类型:运行插件 -> 插件名称:MyButton:Title -> 保存
-
在库中检出txt文件,浏览其数据卡,点击按钮
-
选择文件
备注
本例中,使用 IEdmEnumeratorVariable5::SetVar 设置变量值。你也可以使用IEdmEnumeratorVariable5::GetVar 读变量值.
使用类似按钮处理程序,您还可以:通过检查包含 IEdmStrLst5 文件接口的 EdmCmdData::mpoExtra 变量来检索文件中配置(configurations)、布局(layouts)或两者的数量。
切换活动配置.
使用 EdmCmdData 的成员将焦点设置为某个控件。
在按钮通过将 EdmCmdData::mlLongData1变量设置为 EdmCardFlag 常量后,自动关闭数据卡。