Calling Add-ins (C#)

本范例展示如何通过实现 IEdmAddIn5::GetAddInInfo 和 IEdmAddIn5::OnCmd 去创建一个当用户在数据卡中点击一个按钮时被调用的Visual C# add-in程序。这个add-in在用户浏览文件时打开一个对话框. add-in 将所选文件的路径复制到 文件的数据卡。

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


  1.   启动VS。
  2. 新建项目,选择类库。                                    Calling Add-ins (C#)_第1张图片
  3. 在“解决方案资源管理器”中右键单击项目名称 ,然后单击添加引用。
    1. 单击 COM 在 左侧面板,单击PDMWorks Enterprise 2019 Type Library,然后单击添加

    2. 如果需要,引入相关的程序集。
    3. 设置Interop.EdmLib的嵌入互操作类型为False。
  4. 在“解决方案资源管理器”中右击项目名称,然后单击“属性”。
    1. “应用程序>程序集信息”。                         
    2. 取消勾选“使程序集 COM 可见(M)”。                         
  5. 修改Class1.cs。这里修改类名为CallAddin.cs。
    1.  添加和创建GUID。
    2. 修改代码
using System;
using EdmLib;//添加
using System.Runtime.InteropServices;//添加

namespace Calling_Add_ins
{
    [Guid("20637265-0AAC-4730-BA59-43C4395B2D2A"),ComVisible(true)]
    public class CallAddin : IEdmAddIn5
    {
        
    }
}

  1. 实现 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;
            }
        }
    }
    
  2. ​单击“生成”>“生成解决方案” ,生成Add-in。
  3. 安装生成的Add-in。
    1. 打开PDM 管理工作。
    2. 登录。
    3. 在插件中添加新插件。Calling Add-ins (C#)_第2张图片
  4. 卡 -> 文件卡 -> Text Card -> 添加按钮 -> 点击按钮 -> 命令类型:运行插件 -> 插件名称:MyButton:Title -> 保存 Calling Add-ins (C#)_第3张图片
  5.  在库中检出txt文件,浏览其数据卡,点击按钮Calling Add-ins (C#)_第4张图片

  6. 选择文件Calling Add-ins (C#)_第5张图片

    Calling Add-ins (C#)_第6张图片

     

    备注

    本例中,使用 IEdmEnumeratorVariable5::SetVar 设置变量值。你也可以使用IEdmEnumeratorVariable5::GetVar 读变量值.
    使用类似按钮处理程序,您还可以:

    通过检查包含 IEdmStrLst5 文件接口的 EdmCmdData::mpoExtra 变量来检索文件中配置(configurations)、布局(layouts)或两者的数量。

        切换活动配置.

        使用 EdmCmdData 的成员将焦点设置为某个控件。

        在按钮通过将 EdmCmdData::mlLongData1变量设置为 EdmCardFlag 常量后,自动关闭数据卡。

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

你可能感兴趣的:(solidworks,PDM,c#,solidworks,pdm)