Hide Table of Contents

Create Vault View Tab Add-in Example (C#)

This example shows how to create an add-in that adds a custom tab to the bottom panel of a vault view when it is opened in Windows Explorer.

//--------------------------------------------------------------------------------------
// Preconditions:
// 1. Start Microsoft Visual Studio.
// 2. Click File > New > Project > Visual C# > Class Library.
// 3. Type SWEPDMAddin1 in Name.
// 4. Click Browse and navigate to the folder where to create the project.
// 5. Click OK
// 6. Right-click the project name in the Solution Explorer and select Add > Reference
// 7. In the Reference Manager dialog:   
//    a. Click the Browse tab.
//    b. Click Browse at the bottom.
//    c. Navigate to the SOLIDWORKS PDM installation folder.
//    d. Select EPDM.Interop.epdm.dll and click Add.
//    e. Ensure that EPDM.Interop.epdm.dll is checked in the Reference Manager dialog.

//    f. Click OK.
// 8. Right-click the project name in the Solution Explorer and select Properties.
// 9. In the Properties window:
//    a. On the Application tab, click Assembly Information.
//    b. De-select Make assembly COM-Visible.
//    c. On the Build tab, select Register for COM interop.
//10. Save the project.

//11. Copy SWEPDMADDin1 code to a new class, SWEPDMAddin1.cs.
//12. Right-click the project and select Add > User Control.
//13. Type "UserControl1.cs" in Name and click Add.
//14. Copy UserControl1 code to the code behind UserControl1.cs.
//15. Copy UserControl1.Designer code to UserControl1.Designer.cs.
//16.
To populate the GUID attribute in SWEPDMAddin1.cs:
//    a. Click Tools > Create GUID in the IDE.
//    b. Select GUID Format 5.
//    c. Click Copy.
//    d. Click Exit.
//    e. Populate
Guid("") in the code with the copied string.
//17. Copy a *.png file to the project folder.
//18. Right-click the project and select Add > Existing item.
//19. Select the *.png file and click Add.
//20. Right-click the *.png file in Solution Explorer and select Exclude from Project.
//21. Replace the png_path in SWEPDMAddin1.cs with the full path name of the *.png
//    you just added to the project.

//22. Click Build > Build Solution.
//23. Ensure you have a vault, a vault view, and a file in the vault.

//
// Postconditions: 
// 1. Open the SOLIDWORKS PDM Professional Administration tool, expand a vault_name node, 
//    and log in as Admin.
// 2. Under vault_name, right-click Add-ins, and click New Add-in.
//    a. Navigate to the bin\Debug directory of your SWEPDMAddin1 project.
//    b. Click SWEPDMAddin1.dll.
//    c. Click Open.
//    d. Click OK.
// 3. Click OK after reading the SOLIDWORKS PDM Professional warning dialog.
// 4. In the taskbar, click the Administration tool icon and click Log Off > vault_name.

// 5. Open Windows Explorer on a view of vault_name:
//    a. Log in as Admin.

//    b. Click UserTab1 in the bottom panel of the vault view.
//       One or more message boxes display. Click OK in the message boxes.
//    c. Select a file in the vault.
//       The custom tab's text box is populated with the name of the file.
//    d. Right-click the file in the vault.
//    e. Select Test menu item #1.
//    f. Click OK in the message box.

//---------------------------------------------------------------------------------------
 

//SWEPDMADDin1

using System;
using System.Collections.Generic;
using System.Diagnostics;
using EPDM.Interop.epdm;
using System.Runtime.InteropServices;

 
namespace SWEPDMAddin1
{
    [Guid(""), ComVisible(true)]
    public class SWPDMAddin : IEdmAddIn5
    {
        Dictionary<stringUserControl1> ControlMaps = new Dictionary<stringUserControl1>();
        static long Identifier = 1;
        public void GetAddInInfo(ref EdmAddInInfo poInfo, IEdmVault5 poVault, IEdmCmdMgr5 poCmdMgr)
        {
            //Add-in information
            poInfo.mbsAddInName = "SWPDMAddin1";
            poInfo.mbsCompany = "your_company_name";
            poInfo.mbsDescription = "This add-in adds a tab to the bottom panel of the vault view before it is opened in Windows Explorer. It also adds context-sensitive menu items to the right-click menus of files in the vault.";
            poInfo.mlAddInVersion = 1;
 
            //Minimum Conisio version needed for .Net add-Ins is 6.4
            poInfo.mlRequiredVersionMajor = 6;
            poInfo.mlRequiredVersionMinor = 4;
 
            //Adds context-sensitive menu items to the right-click menus of files in the vault
            poCmdMgr.AddCmd(1, "Test menu item #1", (int)EdmMenuFlags.EdmMenu_Nothing, """", 0, 0);
            poCmdMgr.AddCmd(1, "Test menu item #2", (int)EdmMenuFlags.EdmMenu_Nothing, """", 0, 0);
 
            AddAllHooks(poCmdMgr);
 
        }
 
        public void OnCmd(ref EPDM.Interop.epdm.EdmCmd poCmd, ref EdmCmdData[] ppoData)
        {
            Debug.Print("Command Type: " + poCmd.meCmdType.ToString() + "\n  " + System.DateTime.Now.ToString());
 
            IEdmVault5 edmVault = poCmd.mpoVault as IEdmVault5;
 
            try
            {
                switch (poCmd.meCmdType)
 
                {
                    case EdmCmdType.EdmCmd_CardButton:
                        break;
                    case EdmCmdType.EdmCmd_CardInput:
                        break;
                    case EdmCmdType.EdmCmd_CardListSrc:
                        break;
                    case EdmCmdType.EdmCmd_InstallAddIn:
                        break;
                    case EdmCmdType.EdmCmd_Menu:
                        //File's right-click menu item is selected
                        edmVault.MsgBox(0, " Context-sensitive menu item selected"EdmMBoxType.EdmMbt_OKOnly, "PDM Pro add-in");
                        break;
                    case EdmCmdType.EdmCmd_PostAdd:
                        break;
                    case EdmCmdType.EdmCmd_PostAddFolder:
                        break;
                    case EdmCmdType.EdmCmd_PostCopy:
                        break;
                    case EdmCmdType.EdmCmd_PostCopyFolder:
                        break;
                    case EdmCmdType.EdmCmd_PostDelete:
                        break;
                    case EdmCmdType.EdmCmd_PostDeleteFolder:
                        break;
                    case EdmCmdType.EdmCmd_PostGet:
                        break;
                    case EdmCmdType.EdmCmd_PostLock:
                        break;
                    case EdmCmdType.EdmCmd_PostMove:
                        break;
                    case EdmCmdType.EdmCmd_PostMoveFolder:
                        break;
                    case EdmCmdType.EdmCmd_PostRename:
                        break;
                    case EdmCmdType.EdmCmd_PostRenameFolder:
                        break;
                    case EdmCmdType.EdmCmd_PostShare:
                        break;
                    case EdmCmdType.EdmCmd_PostState:
                        break;
                    case EdmCmdType.EdmCmd_PostUndoLock:
                        break;
                    case EdmCmdType.EdmCmd_PostUnlock:
                        break;
                    case EdmCmdType.EdmCmd_PreAdd:
                        break;
                    case EdmCmdType.EdmCmd_PreAddFolder:
                        break;
                    case EdmCmdType.EdmCmd_PreCopy:
                        break;
                    case EdmCmdType.EdmCmd_PreCopyFolder:
                        break;
                    case EdmCmdType.EdmCmd_PreDelete:
                        break;
                    case EdmCmdType.EdmCmd_PreDeleteFolder:
                        break;
                    case EdmCmdType.EdmCmd_PreGet:
                        break;
                    case EdmCmdType.EdmCmd_PreLock:
                        break;
                    case EdmCmdType.EdmCmd_PreMove:
                        break;
                    case EdmCmdType.EdmCmd_PreMoveFolder:
                        break;
                    case EdmCmdType.EdmCmd_PreRename:
                        break;
                    case EdmCmdType.EdmCmd_PreRenameFolder:
                        break;
                    case EdmCmdType.EdmCmd_PreShare:
                        break;
                    case EdmCmdType.EdmCmd_PreState:
                        break;
                    case EdmCmdType.EdmCmd_PreUndoLock:
                        break;
                    case EdmCmdType.EdmCmd_PreUnlock:
                        break;
                    case EdmCmdType.EdmCmd_SerialNo:
                        break;
                    case EdmCmdType.EdmCmd_UninstallAddIn:
                        break;
                    case EdmCmdType.EdmCmd_TaskDetails:
                        break;
                    case EdmCmdType.EdmCmd_PreExploreInit:
                        {
                            // Windows Explorer is about to be opened
                            IEdmCmdMgr6 poCmdMgr6 = poCmd.mpoExtra as IEdmCmdMgr6;
                            UserControl1 myControl1 = new UserControl1();
                            // Add a custom tab to the bottom panel of the vault view
                            poCmdMgr6.AddVaultViewTab(myControl1.Handle.ToInt64(), "UserTab1"@"png_path""UserTab1", Identifier.ToString());
                            ControlMaps.Add(Identifier.ToString(), myControl1);
                            Identifier++;
 
                            break;
                        }
                    case EdmCmdType.EdmCmd_SelectItem:
                        {
                            // If a file is selected, populate the textBox1 control
                            EdmCmdData poobject = (EdmCmdData)ppoData.GetValue(0);
                            string Id = poobject.mbsStrData3;
                            UserControl1 myControl;
                            bool exist = ControlMaps.TryGetValue(Id, out myControl);
                            if (exist)
                            {
                                if (poobject.mbsStrData1.Length != 0)
                                    myControl.SetFileName(poobject.mbsStrData1);
                                else
                                    myControl.SetFileName(poobject.mbsStrData2);
                            }
                            break;
                        }
 
                    case EdmCmdType.EdmCmd_DeSelectItem:
                        {
                            // If a file is de-selected, empty the textBox1 control
                            EdmCmdData poobject = (EdmCmdData)ppoData.GetValue(0);
                            string Id = poobject.mbsStrData3;
                            UserControl1 myControl;
                            bool exist = ControlMaps.TryGetValue(Id, out myControl);
                            if (exist)
                            {
                                myControl.SetFileName("");
                            }
                            break;
                        }
                    case EdmCmdType.EdmCmd_UserTabDelete:
                        {
                            // When Windows Explorer is closed, this event is called; perform cleanup here
                            EdmCmdData poobject = (EdmCmdData)ppoData.GetValue(0);
                            string Id = poobject.mbsStrData3;
                            ControlMaps.Remove(Id);
                            break;
                        }
                    case EdmCmdType.EdmCmd_ActivateAPITab:
                        {
                            // UserTab1 is selected
                            edmVault.MsgBox(0, " UserTab1 selected"EdmMBoxType.EdmMbt_OKOnly, "PDM Pro add-in");
                            break;
                        }
                    default:
                        break;
                }
            }
            catch (COMException exp)
            {
                string errorName, errorDesc;
                edmVault.GetErrorString(exp.ErrorCode, out errorName, out errorDesc);
                edmVault.MsgBox(0, errorDesc, EdmMBoxType.EdmMbt_OKOnly, errorName);
            }
        }
 
        void AddAllHooks(IEdmCmdMgr5 poCmdMgr)
        {
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_CardButton, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_CardInput, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_CardListSrc, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_InstallAddIn, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_Menu, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostAdd, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostAddFolder, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostCopy, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostCopyFolder, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostDelete, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostDeleteFolder, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostGet, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostLock, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostMove, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostMoveFolder, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostRename, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostRenameFolder, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostShare, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostState, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostUndoLock, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostUnlock, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreAdd, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreAddFolder, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreCopy, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreCopyFolder, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreDeleteFolder, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreGet, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreLock, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreMove, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreMoveFolder, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreRename, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreRenameFolder, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreShare, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreState, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreUndoLock, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreUnlock, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_SerialNo, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreExploreInit, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_UninstallAddIn, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_TaskDetails, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_SelectItem, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_DeSelectItem, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_ActivateAPITab, null);
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_UserTabDelete, null);
 
        }
    }
 
 
}

Back to top

//UserControl1.Designer

namespace SWEPDMAddin1
{
    partial class UserControl1
    {
        /// <summary> 
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
 
        /// <summary> 
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Component Designer generated code
 
        /// <summary> 
        /// Required method for Designer support - do not modify 
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.textBox1 = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            // 
            // textBox1
            // 
            this.textBox1.Location = new System.Drawing.Point(128, 42);
            this.textBox1.Name = "textBox1";
            this.textBox1.Size = new System.Drawing.Size(414, 20);
            this.textBox1.TabIndex = 4;
            // 
            // label1
            // 
            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
            | System.Windows.Forms.AnchorStyles.Left) 
            | System.Windows.Forms.AnchorStyles.Right)));
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(3, 0);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(54, 13);
            this.label1.TabIndex = 5;
            this.label1.Text = "UserTab1";
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(47, 45);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(75, 13);
            this.label2.TabIndex = 6;
            this.label2.Text = "Selected Item ";
            // 
            // UserControl1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Controls.Add(this.label2);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.textBox1);
            this.Name = "UserControl1";
            this.Size = new System.Drawing.Size(559, 243);
            this.ResumeLayout(false);
            this.PerformLayout();
 
        }
 
        #endregion
        private System.Windows.Forms.TextBox textBox1;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
    }
}

Back to top

//UserControl1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
 
namespace SWEPDMAddin1
{
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }
 
        public void SetFileName(string strFileName)
        {
 
            textBox1.Text = strFileName;
        }
        
    }
}

 

Back to top

 



Provide feedback on this topic

SOLIDWORKS welcomes your feedback concerning the presentation, accuracy, and thoroughness of the documentation. Use the form below to send your comments and suggestions about this topic directly to our documentation team. The documentation team cannot answer technical support questions. Click here for information about technical support.

* Required

 
*Email:  
Subject:   Feedback on Help Topics
Page:   Create Vault View Tab Add-in Example (C#)
*Comment:  
*   I acknowledge I have read and I hereby accept the privacy policy under which my Personal Data will be used by Dassault Systèmes

Print Topic

Select the scope of content to print:



x

We have detected you are using a browser version older than Internet Explorer 7. For optimized display, we suggest upgrading your browser to Internet Explorer 7 or newer.

 Never show this message again
x

Web Help Content Version: API Help (English only) 2018 SP05

To disable Web help from within SOLIDWORKS and use local help instead, click Help > Use SOLIDWORKS Web Help.

To report problems encountered with the Web help interface and search, contact your local support representative. To provide feedback on individual help topics, use the “Feedback on this topic” link on the individual topic page.