Add Items Example (VB.NET)
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 .NET Framework 4.0 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 2010.
' a. Click File > New > Project > Visual Basic > 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.vb with this code.
' h. Replace the code in Form1.Designer.vb with this code.
' i. Right-click the AddItems project name in the Solution Explorer.
' 1. Click Add > Class > Class.
' 2. Type EdmVaultSingleton.vb in Name.
' 3. Click Add.
' 4. Replace the code in EdmVaultSingleton.vb with this code.
' j. Right-click the AddItems project name in the Solution Explorer.
' 1. Click Add > Class > Class.
' 2. Type NewItem.vb in Name.
' 3. Click Add.
' 4. Replace the code in NewItem.vb with this code.
' 5. Add EPDM.Interop.epdm.dll as a reference (right-click the project
' name in the Solution Explorer, click Add Reference, click
' 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 click 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>
'Form1.vb
Imports System.IO
Imports EPDM.Interop.epdm
Imports System.Xml
Imports System.Windows.Forms
Public Class AddItems
Private Sub BrowseButton_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles BrowseButton.Click
Try
Dim dlgResult As DialogResult = XmlOpenFileDialog.ShowDialog()
If dlgResult = Windows.Forms.DialogResult.Cancel Then
Exit Sub
End If
XmlTextBox.Text = XmlOpenFileDialog.FileName
Catch ex As Runtime.InteropServices.COMException
MessageBox.Show("HRESULT = 0x" + _
ex.ErrorCode.ToString("X") + vbCrLf + _
ex.Message)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub AddItemsButton_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles AddItemsButton.Click
Try
ItemsListBox.Items.Clear()
Dim NewItems As ArrayList = New ArrayList
Using XmlReader As Xml.XmlReader = _
Xml.XmlReader.Create(XmlTextBox.Text)
XmlReader.Read()
XmlReader.ReadToNextSibling("ArrayOfAnyType")
XmlReader.ReadToDescendant("anyType")
Do
Dim CurItem As 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)
Loop While XmlReader.ReadToFollowing("anyType")
End Using
'Obtain the only instance of the IEdmVault5 object
Dim vault As IEdmVault5 = EdmVaultSingleton.Instance
If Not vault.IsLoggedIn Then
'Log into selected vault as the current user
vault.LoginAuto(VaultsComboBox.Text, _
Me.Handle.ToInt32())
End If
'Create the batch interface
Dim BatchItemGen As IEdmBatchItemGeneration2
BatchItemGen = vault.CreateUtility( _
EdmUtility.EdmUtil_BatchItemGeneration)
Dim VarVals(3) As EdmVarVal
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 i As Integer = 0 To NewItems.Count - 1
VarVals(0).moValue = NewItems(i).Description
VarVals(1).moValue = NewItems(i).ProjectName
VarVals(2).moValue = NewItems(i).ProjectNumber
VarVals(3).moValue = NewItems(i).PartType
BatchItemGen.AddSelection2(vault, VarVals, _
NewItems(i).ItemName)
Next i
'Build the item tree
Dim CreateSuccess As Boolean
CreateSuccess = BatchItemGen.CreateTree( _
Me.Handle.ToInt32, _
EdmItemGenerationFlags.Eigcf_Nothing)
If (CreateSuccess = False) Then Exit Sub
'Generate the items
Dim ReturnedItems() As EdmGenItemInfo = Nothing
Dim bOpenExplorer As Boolean = False
BatchItemGen.GenerateItems(Me.Handle.ToInt32, _
ReturnedItems, bOpenExplorer, Nothing)
'Display the new item information in the list box
Dim msg As String = ""
If ReturnedItems.Length = 0 Then
msg = "No items were added."
ItemsListBox.Items.Add("No items were added.")
Else
For Each ItemInfo As EdmGenItemInfo _
In ReturnedItems
ItemsListBox.Items.Add("Item name: " + _
ItemInfo.mbsItemName)
ItemsListBox.Items.Add("Alternate name: " + _
ItemInfo.mbsItemAlternativeName)
ItemsListBox.Items.Add("Status: " + _
vault.GetErrorMessage(ItemInfo.mhResult))
ItemsListBox.Items.Add("")
Next ItemInfo
End If
Catch ex As Runtime.InteropServices.COMException
MessageBox.Show("HRESULT = 0x" + _
ex.ErrorCode.ToString("X") + vbCrLf + _
ex.Message)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub AddItems_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
'Obtain the only instance of the IEdmVault object
Dim vault As IEdmVault8 = EdmVaultSingleton.Instance
Dim Views() As EdmViewInfo = Nothing
vault.GetVaultViews(Views, False)
VaultsComboBox.Items.Clear()
For Each View As EdmViewInfo In Views
VaultsComboBox.Items.Add(View.mbsVaultName)
Next
If VaultsComboBox.Items.Count > 0 Then
VaultsComboBox.Text = VaultsComboBox.Items(0)
End If
Catch ex As Runtime.InteropServices.COMException
MessageBox.Show("HRESULT = 0x" + _
ex.ErrorCode.ToString("X") + vbCrLf + _
ex.Message)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
End Class
'Form1.Designer.vb
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class AddItems
Inherits System.Windows.Forms.Form
'Form overrides dispose to clean up the component list.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.BrowseButton = New System.Windows.Forms.Button()
Me.XmlTextBox = New System.Windows.Forms.TextBox()
Me.XmlLabel = New System.Windows.Forms.Label()
Me.XmlOpenFileDialog = New System.Windows.Forms.OpenFileDialog()
Me.AddItemsButton = New System.Windows.Forms.Button()
Me.VaultsComboBox = New System.Windows.Forms.ComboBox()
Me.VaultsLabel = New System.Windows.Forms.Label()
Me.ItemsListBox = New System.Windows.Forms.ListBox()
Me.SuspendLayout()
'
'BrowseButton
'
Me.BrowseButton.Location = New System.Drawing.Point(222, 94)
Me.BrowseButton.Margin = New System.Windows.Forms.Padding(2)
Me.BrowseButton.Name = "BrowseButton"
Me.BrowseButton.Size = New System.Drawing.Size(59, 26)
Me.BrowseButton.TabIndex = 0
Me.BrowseButton.Text = "Browse..."
Me.BrowseButton.UseVisualStyleBackColor = True
'
'XmlTextBox
'
Me.XmlTextBox.Location = New System.Drawing.Point(24, 94)
Me.XmlTextBox.Margin = New System.Windows.Forms.Padding(2)
Me.XmlTextBox.Name = "XmlTextBox"
Me.XmlTextBox.Size = New System.Drawing.Size(182, 20)
Me.XmlTextBox.TabIndex = 1
'
'XmlLabel
'
Me.XmlLabel.AutoSize = True
Me.XmlLabel.Location = New System.Drawing.Point(22, 78)
Me.XmlLabel.Margin = New System.Windows.Forms.Padding(2, 0, 2, 0)
Me.XmlLabel.Name = "XmlLabel"
Me.XmlLabel.Size = New System.Drawing.Size(172, 13)
Me.XmlLabel.TabIndex = 2
Me.XmlLabel.Text = "XML file from which to import items:"
'
'XmlOpenFileDialog
'
Me.XmlOpenFileDialog.Filter = "XML files|*.xml"
'
'AddItemsButton
'
Me.AddItemsButton.Location = New System.Drawing.Point(29, 139)
Me.AddItemsButton.Margin = New System.Windows.Forms.Padding(2)
Me.AddItemsButton.Name = "AddItemsButton"
Me.AddItemsButton.Size = New System.Drawing.Size(87, 24)
Me.AddItemsButton.TabIndex = 3
Me.AddItemsButton.Text = "Add items"
Me.AddItemsButton.UseVisualStyleBackColor = True
'
'VaultsComboBox
'
Me.VaultsComboBox.FormattingEnabled = True
Me.VaultsComboBox.Location = New System.Drawing.Point(22, 40)
Me.VaultsComboBox.Margin = New System.Windows.Forms.Padding(2)
Me.VaultsComboBox.Name = "VaultsComboBox"
Me.VaultsComboBox.Size = New System.Drawing.Size(184, 21)
Me.VaultsComboBox.TabIndex = 12
'
'VaultsLabel
'
Me.VaultsLabel.AutoSize = True
Me.VaultsLabel.Location = New System.Drawing.Point(22, 24)
Me.VaultsLabel.Margin = New System.Windows.Forms.Padding(2, 0, 2, 0)
Me.VaultsLabel.Name = "VaultsLabel"
Me.VaultsLabel.Size = New System.Drawing.Size(94, 13)
Me.VaultsLabel.TabIndex = 13
Me.VaultsLabel.Text = "Select vault view:"
'
'ItemsListBox
'
Me.ItemsListBox.FormattingEnabled = True
Me.ItemsListBox.Location = New System.Drawing.Point(29, 175)
Me.ItemsListBox.Margin = New System.Windows.Forms.Padding(2)
Me.ItemsListBox.Name = "ItemsListBox"
Me.ItemsListBox.Size = New System.Drawing.Size(253, 121)
Me.ItemsListBox.TabIndex = 14
'
'AddItems
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(299, 320)
Me.Controls.Add(Me.ItemsListBox)
Me.Controls.Add(Me.VaultsComboBox)
Me.Controls.Add(Me.VaultsLabel)
Me.Controls.Add(Me.AddItemsButton)
Me.Controls.Add(Me.XmlLabel)
Me.Controls.Add(Me.XmlTextBox)
Me.Controls.Add(Me.BrowseButton)
Me.Margin = New System.Windows.Forms.Padding(2)
Me.Name = "AddItems"
Me.Text = "Add New Items"
Me.ResumeLayout(False)
Me.PerformLayout()
End Sub
Friend WithEvents BrowseButton As System.Windows.Forms.Button
Friend WithEvents XmlTextBox As System.Windows.Forms.TextBox
Friend WithEvents XmlLabel As System.Windows.Forms.Label
Friend WithEvents XmlOpenFileDialog As System.Windows.Forms.OpenFileDialog
Friend WithEvents AddItemsButton As System.Windows.Forms.Button
Friend WithEvents VaultsComboBox As System.Windows.Forms.ComboBox
Friend WithEvents VaultsLabel As System.Windows.Forms.Label
Friend WithEvents ItemsListBox As System.Windows.Forms.ListBox
End Class
'EdmVaultSingleton.vb
Imports System.Threading
Imports EPDM.Interop.epdm
Public NotInheritable Class EdmVaultSingleton
Private Shared mInstance As EdmVault5 = Nothing
Private Shared mLockObj As New Object()
Private Sub New()
End Sub
Public Shared ReadOnly Property Instance() As EdmVault5
Get
Try
If mInstance Is Nothing Then
Monitor.Enter(mLockObj)
If mInstance Is Nothing Then
mInstance = New EdmVault5()
End If
Monitor.Exit(mLockObj)
End If
Catch ex As Exception
Monitor.Exit(mLockObj)
End Try
Return mInstance
End Get
End Property
End Class
'NewItem.vb
Public Class NewItem
'Value of "Description" variable
Private mDescription As String
'Value of "Project Name" variable
Private mProjectName As String
'Value of "Project number" variable
Private mProjectNumber As String
'Value of "Part Type" variable
Private mPartType As String
'Item name
Private mItemName As String
Public Sub New()
End Sub
Public Property Description() As String
Get
Description = mDescription
End Get
Set(ByVal Value As String)
mDescription = Value
End Set
End Property
Public Property ProjectName() As String
Get
ProjectName = mProjectName
End Get
Set(ByVal Value As String)
mProjectName = Value
End Set
End Property
Public Property ProjectNumber() As String
Get
ProjectNumber = mProjectNumber
End Get
Set(ByVal Value As String)
mProjectNumber = Value
End Set
End Property
Public Property PartType() As String
Get
PartType = mPartType
End Get
Set(ByVal Value As String)
mPartType = Value
End Set
End Property
Public Property ItemName() As String
Get
ItemName = mItemName
End Get
Set(ByVal Value As String)
mItemName = Value
End Set
End Property
End Class