SOLIDWORKS PDM Professional API Help

Add Items Example (C#)

This example shows how to add items to a vault. The data for the items is imported from an XML file, which is read by the .NET XmlReader.

NOTE: If using the primary interop assembly provided with SOLIDWORKS PDM Professional, see Using .NET Framework 4.0 in Stand-alone Applications.

//----------------------------------------------------------------------------
// Preconditions:
//  1. Create an XML file for this example.
//     a. Open a text editor like Notepad and copy and paste this code 
//        into the editor.
//     b. Save the file as Items.xml and remember where you save the file.
//  2. Open the SOLIDWORKS PDM Professional Administration tool.
//  3. Log into the vault where to add a new serial number.
//     a. Right-click Serial Numbers and click New Serial Number.
//        1. Type AddItems in Name.
//        2. For Format string, click the right-arrow button and select Counter value > 00001.
//        3. Click OK.
//     b. Right-click Items and select Open.
//        1. Click AddItems in Item Serial Number.
//        2. Click OK.
//  4. Start Microsoft Visual Studio.
//     a. Click File > New > Project > C# > Windows Forms Application.
//     b. Type AddItems in Name.
//     c. Click the Browse button and browse to the folder where to create the project.
//     d. Click OK. 
//     e. Click Show All Files in the Solution Explorer toolbar.
//     f. Create a form similar to the form shown above and change:
//        1. Top label to VaultsLabel.
//        2. Combo box to VaultsComboBox.
//        3. Second label to XmlLabel.
//        4. Text box to XmlTextBox.
//        5. Browse button to BrowseButton.
//        6. Add items button to AddItemsButton.
//        7. List box to ItemsListBox.
//     g. Replace the code in Form1.cs with this code.
//     h. Replace the code in Form1.Designer.cs with this code.
//     i. Right-click the AddItemsCSharp project name in the Solution Explorer.
//        1. Click Add > Class > Class.
//        2. Type EdmVaultSingleton.cs in Name.
//        3. Click Add.
//        4. Replace the code in EdmVaultSingleton.cs with this code.
//     j. Right-click the AddItems project name in the Solution Explorer.
//        1. Click Add > Class > Class.
//        2. Type NewItem.cs in Name.
//        3. Click Add.
//        4. Replace the code in NewItem.cs with this code.
//  5. Add EPDM.Interop.epdm.dll as a reference (right-click the project
//     name in the Solution Explorer, click Add Referenceclick 
//     Assemblies > Framework in the left-side panel, browse to the top folder of your 
//     SOLIDWORKS PDM Professional installation, locate and click 
//     EPDM.Interop.epdm.dll, click Open, click Add, and click Close).
//  6. Right-click EPDM.Interop.epdm in References, click Properties, and set 
//     Embed Interop Types to False to handle methods that pass arrays of 
//     structures.
//  7. Click Debug > Start Debugging or press F5.
//
// Postconditions: 
//  1. Displays a dialog.
//  2. Select a vault.
//  3. Click the Browse button, locate and select Items.xml, and click Open.
//  4. Click the Add items button.
//     The new items are printed in the dialog's list.
//  5. Close the dialog.
//  6. Open the SOLIDWORKS PDM Professional Item Explorer tool. 
//     (In Windows 7, click Start > All Programs > SOLIDWORKS PDM Professional > 
//     Item Explorer.)
//  7. Expand the vault where the new items were added. 
//     The new items are listed below the name of the expanded vault. 
//----------------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfAnyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <anyType xsi:type="Item">
    <Description>First Item</Description>
    <ProjectName>Project 1</ProjectName>
    <ProjectNumber>1</ProjectNumber>
    <PartType>Purchased</PartType>
    <ItemName>Item 1</ItemName>
  </anyType>
  <anyType xsi:type="Item">
    <Description>Second Item</Description>
    <ProjectName>Project 2</ProjectName>
    <ProjectNumber>2</ProjectNumber>
    <PartType>Built</PartType>
    <ItemName>Item 2</ItemName>
  </anyType>
  <anyType xsi:type="Item">
    <Description>Third Item</Description>
    <ProjectName>Project 3</ProjectName>
    <ProjectNumber>3</ProjectNumber>
    <PartType>Purchased</PartType>
    <ItemName>Item 3</ItemName>
  </anyType>
  <anyType xsi:type="Item">
    <Description>Fourth Item</Description>
    <ProjectName>Project 4</ProjectName>
    <ProjectNumber>4</ProjectNumber>
    <PartType>Built</PartType>
    <ItemName>Item 4</ItemName>
  </anyType>
  <anyType xsi:type="Item">
    <Description>Fifth Item</Description>
    <ProjectName>Project 5</ProjectName>
    <ProjectNumber>5</ProjectNumber>
    <PartType>Purchased</PartType>
    <ItemName>Item 5</ItemName>
  </anyType>
  <anyType xsi:type="Item">
    <Description>Sixth Item</Description>
    <ProjectName>Project 6</ProjectName>
    <ProjectNumber>6</ProjectNumber>
    <PartType>Built</PartType>
    <ItemName>Item 6</ItemName>
  </anyType>
  <anyType xsi:type="Item">
    <Description>Seventh Item</Description>
    <ProjectName>Project 7</ProjectName>
    <ProjectNumber>7</ProjectNumber>
    <PartType>Purchased</PartType>
    <ItemName>Item 7</ItemName>
  </anyType>
  <anyType xsi:type="Item">
    <Description>Eighth Item</Description>
    <ProjectName>Project 8</ProjectName>
    <ProjectNumber>8</ProjectNumber>
    <PartType>Built</PartType>
    <ItemName>Item 8</ItemName>
  </anyType>
  <anyType xsi:type="Item">
    <Description>Ninth Item</Description>
    <ProjectName>Project 9</ProjectName>
    <ProjectNumber>9</ProjectNumber>
    <PartType>Purchased</PartType>
    <ItemName>Item 9</ItemName>
  </anyType>
  <anyType xsi:type="Item">
    <Description>Tenth Item</Description>
    <ProjectName>Project 10</ProjectName>
    <ProjectNumber>10</ProjectNumber>
    <PartType>Built</PartType>
    <ItemName>Item 10</ItemName>
  </anyType>
</ArrayOfAnyType>
Back to top
//Form1.cs 
using System;
using System.IO;
using EPDM.Interop.epdm;
using System.Collections;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
namespace AddItemsCSharp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        void BrowseButton_Click(System.Object sender, System.EventArgs e)
        {
            try
            {
                DialogResult dlgResult = XmlOpenFileDialog.ShowDialog();
                if (dlgResult == DialogResult.Cancel)
                {
                    return;
                }
                XmlTextBox.Text = XmlOpenFileDialog.FileName;
            }
            catch (System.Runtime.InteropServices.COMException ex)
            {
                MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + " " + ex.Message);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        public void AddItemsButton_Click(System.Object sender, System.EventArgs e)
        {
 
            try
            {
                ItemsListBox.Items.Clear();
                ArrayList NewItems = new ArrayList();
 
                using (System.Xml.XmlReader XmlReader = System.Xml.XmlReader.Create(XmlTextBox.Text))
                {
 
                    XmlReader.Read();
                    XmlReader.ReadToNextSibling("ArrayOfAnyType");
                    XmlReader.ReadToDescendant("anyType");
                    do
                    {
                        NewItem CurItem = new NewItem();
                        XmlReader.ReadToDescendant("Description");
                        CurItem.Description = XmlReader.ReadString();
                        XmlReader.ReadToNextSibling("ProjectName");
                        CurItem.ProjectName = XmlReader.ReadString();
                        XmlReader.ReadToNextSibling("ProjectNumber");
                        CurItem.ProjectNumber = XmlReader.ReadString();
                        XmlReader.ReadToNextSibling("PartType");
                        CurItem.PartType = XmlReader.ReadString();
                        XmlReader.ReadToNextSibling("ItemName");
                        CurItem.ItemName = XmlReader.ReadString();
                        NewItems.Add(CurItem);
                    } while (XmlReader.ReadToFollowing("anyType"));
                }
 
                //Obtain the only instance of the IEdmVault5 object
                IEdmVault5 vault = EdmVaultSingleton.Instance;
 
                if (!vault.IsLoggedIn)
                {
                    //Log into selected vault as the current user
                    vault.LoginAuto(VaultsComboBox.Text, this.Handle.ToInt32());
                }
 
                //Create the batch interface
                IEdmBatchItemGeneration2 BatchItemGen = default(IEdmBatchItemGeneration2);
 
                IEdmVault7 vault1 = (IEdmVault7)vault;
                BatchItemGen = (IEdmBatchItemGeneration2)vault1.CreateUtility(EdmUtility.EdmUtil_BatchItemGeneration);
                EdmVarVal[] VarVals = new EdmVarVal[4];
                VarVals[0].mlEdmVarValFlags = 0;
                VarVals[0].moVarIDorName = "Description";
                VarVals[1].mlEdmVarValFlags = 0;
                VarVals[1].moVarIDorName = "Project Name";
                VarVals[2].mlEdmVarValFlags = 0;
                VarVals[2].moVarIDorName = "Project number";
                VarVals[3].mlEdmVarValFlags = 0;
                VarVals[3].moVarIDorName = "Part Type";
                for (int i = 0; i <= NewItems.Count - 1; i++)
                {
                    VarVals[0].moValue = (NewItems[i] as NewItem).Description;
                    VarVals[1].moValue = (NewItems[i] as NewItem).ProjectName;
                    VarVals[2].moValue = (NewItems[i] as NewItem).ProjectNumber;
                    VarVals[3].moValue = (NewItems[i] as NewItem).PartType;
                    BatchItemGen.AddSelection2((EdmVault5)vault, VarVals, ((NewItems[i] as NewItem).ItemName),0, 0, 0,"", (int)EdmRefFlags.EdmRef_Dynamic);
 
                }
 
                //Build the item tree
                bool CreateSuccess = false;
                CreateSuccess = BatchItemGen.CreateTree(((int)(this.Handle.ToInt32())), (int)EdmItemGenerationFlags.Eigcf_Nothing);
                if ((CreateSuccess == false))
                    return;
 
 
                //Generate the items
                EdmGenItemInfo[] ReturnedItems = null;
                bool bOpenExplorer = false;
                BatchItemGen.GenerateItems(this.Handle.ToInt32(), out ReturnedItems, out bOpenExplorer, null);
 
                //Display the new item information in the list box
                string msg = "";
                if (ReturnedItems.Length == 0)
                {
                    msg = "No items were added.";
                    ItemsListBox.Items.Add("No items were added.");
                }
                else
                {
                    foreach (EdmGenItemInfo ItemInfo in ReturnedItems)
                    {
 
                        ItemsListBox.Items.Add("Item name: " + ItemInfo.mbsItemName);
                        ItemsListBox.Items.Add("Alternate name: " + ItemInfo.mbsItemAlternativeName);
 
                        IEdmVault11 vault2 = (IEdmVault11)vault;
                        ItemsListBox.Items.Add("Status: " + vault2.GetErrorMessage(ItemInfo.mhResult));
                        ItemsListBox.Items.Add("");
                    }
                }
            }
            catch (System.Runtime.InteropServices.COMException ex)
            {
                MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + " " + ex.Message);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        public void AddItems_Load(System.Object sender, System.EventArgs e)
        {
            try
            {
                //Obtain the only instance of the IEdmVault object
                IEdmVault8 vault = (IEdmVault8)EdmVaultSingleton.Instance;
                EdmViewInfo[] Views = null;
 
                vault.GetVaultViews(out Views, false);
                VaultsComboBox.Items.Clear();
                foreach (EdmViewInfo View in Views)
                {
                    VaultsComboBox.Items.Add(View.mbsVaultName);
                }
                if (VaultsComboBox.Items.Count > 0)
                {
                    VaultsComboBox.Text = (string)VaultsComboBox.Items[0];
                }
            }
            catch (System.Runtime.InteropServices.COMException ex)
            {
                MessageBox.Show("HRESULT = 0x" + ex.ErrorCode.ToString("X") + " " + ex.Message);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
Back to top
//Form1.Designer.cs
namespace AddItemsCSharp
{
    partial class Form1
    {
        /// <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 Windows Form 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.VaultsLabel = new System.Windows.Forms.Label();
            this.VaultsComboBox = new System.Windows.Forms.ComboBox();
            this.XmlLabel = new System.Windows.Forms.Label();
            this.XmlTextBox = new System.Windows.Forms.TextBox();
            this.BrowseButton = new System.Windows.Forms.Button();
            this.AddItemsButton = new System.Windows.Forms.Button();
            this.ItemsListBox = new System.Windows.Forms.ListBox();
            this.XmlOpenFileDialog = new System.Windows.Forms.OpenFileDialog();
            this.SuspendLayout();
            // 
            //XmlOpenFileDialog
            //
            this.XmlOpenFileDialog.Filter = "XML files|*.XML";
            //
 
            // VaultsLabel
            // 
            this.VaultsLabel.AutoSize = true;
            this.VaultsLabel.Location = new System.Drawing.Point(22, 22);
            this.VaultsLabel.Name = "VaultsLabel";
            this.VaultsLabel.Size = new System.Drawing.Size(91, 13);
            this.VaultsLabel.TabIndex = 0;
            this.VaultsLabel.Text = "Select vault view:";
            // 
            // VaultsComboBox
            // 
            this.VaultsComboBox.FormattingEnabled = true;
            this.VaultsComboBox.Location = new System.Drawing.Point(25, 38);
            this.VaultsComboBox.Name = "VaultsComboBox";
            this.VaultsComboBox.Size = new System.Drawing.Size(174, 21);
            this.VaultsComboBox.TabIndex = 1;
            // 
            // XmlLabel
            // 
            this.XmlLabel.AutoSize = true;
            this.XmlLabel.Location = new System.Drawing.Point(25, 91);
            this.XmlLabel.Name = "XmlLabel";
            this.XmlLabel.Size = new System.Drawing.Size(172, 13);
            this.XmlLabel.TabIndex = 2;
            this.XmlLabel.Text = "XML file from which to import items:";
            // 
            // XmlTextBox
            // 
            this.XmlTextBox.Location = new System.Drawing.Point(28, 107);
            this.XmlTextBox.Name = "XmlTextBox";
            this.XmlTextBox.Size = new System.Drawing.Size(171, 20);
            this.XmlTextBox.TabIndex = 3;
            // 
            // BrowseButton
            // 
            this.BrowseButton.Location = new System.Drawing.Point(216, 107);
            this.BrowseButton.Name = "BrowseButton";
            this.BrowseButton.Size = new System.Drawing.Size(75, 23);
            this.BrowseButton.TabIndex = 4;
            this.BrowseButton.Text = "Browse...";
            this.BrowseButton.UseVisualStyleBackColor = true;
            this.BrowseButton.Click += new System.EventHandler(this.BrowseButton_Click);
            // 
            // AddItemsButton
            // 
            this.AddItemsButton.Location = new System.Drawing.Point(28, 149);
            this.AddItemsButton.Name = "AddItemsButton";
            this.AddItemsButton.Size = new System.Drawing.Size(75, 23);
            this.AddItemsButton.TabIndex = 5;
            this.AddItemsButton.Text = "Add items";
            this.AddItemsButton.UseVisualStyleBackColor = true;
            this.AddItemsButton.Click += new System.EventHandler(this.AddItemsButton_Click);
            // 
            // ItemListBox
            // 
            this.ItemsListBox.FormattingEnabled = true;
            this.ItemsListBox.Location = new System.Drawing.Point(28, 196);
            this.ItemsListBox.Name = "ItemsListBox";
            this.ItemsListBox.Size = new System.Drawing.Size(263, 95);
            this.ItemsListBox.TabIndex = 6;
 
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(334, 311);
            this.Controls.Add(this.ItemsListBox);
            this.Controls.Add(this.AddItemsButton);
            this.Controls.Add(this.BrowseButton);
            this.Controls.Add(this.XmlTextBox);
            this.Controls.Add(this.XmlLabel);
            this.Controls.Add(this.VaultsComboBox);
            this.Controls.Add(this.VaultsLabel);
            this.Name = "Form1";
            this.Text = "Add new items";
            this.Load  += new System.EventHandler(this.AddItems_Load);
            this.ResumeLayout(false);
            this.PerformLayout();
 
        }
 
        #endregion
 
        private System.Windows.Forms.Label VaultsLabel;
        private System.Windows.Forms.ComboBox VaultsComboBox;
        private System.Windows.Forms.Label XmlLabel;
        private System.Windows.Forms.TextBox XmlTextBox;
        private System.Windows.Forms.Button BrowseButton;
        private System.Windows.Forms.Button AddItemsButton;
        private System.Windows.Forms.ListBox ItemsListBox;
        private System.Windows.Forms.OpenFileDialog XmlOpenFileDialog;
    }
}
Back to top
//EdmVaultSingleton.cs
using System;
using System.Collections;
using System.Diagnostics;
using System.Threading;
using EPDM.Interop.epdm;
 
namespace AddItemsCSharp
{
    public class EdmVaultSingleton
    {
        private static EdmVault5 mInstance = null;
        private static object mLockObj = new object();
 
        private EdmVaultSingleton()
        {
 
        }
 
        public static EdmVault5 Instance
        {
            get
            {
                try
                {
                    if (mInstance == null)
                    {
                        Monitor.Enter(mLockObj);
                        if (mInstance == null)
                        {
                            mInstance = new EdmVault5();
                        }
                        Monitor.Exit(mLockObj);
                    }
                }
                catch (Exception ex)
                {
                    Monitor.Exit(mLockObj);
                }
 
                return mInstance;
 
            }
        }
 
    }
}
Back to top
//NewItem.cs
using System;
using System.Collections;
using System.Diagnostics;
 
namespace AddItemsCSharp
{
    public class NewItem
    {
        //Value of "Description" variable
        private string mDescription;
        //Value of "Project Name" variable
        private string mProjectName;
        //Value of "Project number" variable
        private string mProjectNumber;
        //Value of "Part Type" variable
        private string mPartType;
        //Item name
        private string mItemName;
 
        public NewItem()
        {
 
        }
 
        public string Description
        {
            get { return mDescription; }
            set { mDescription = value; }
        }
 
        public string ProjectName
        {
            get { return mProjectName; }
            set { mProjectName = value; }
        }
 
        public string ProjectNumber
        {
            get { return mProjectNumber; }
            set { mProjectNumber = value; }
        }
 
        public string PartType
        {
            get { return mPartType; }
            set { mPartType = value; }
        }
 
        public string ItemName
        {
            get { return mItemName; }
            set { mItemName = value; }
        }
 
    }
}
Back to top