# SOLIDWORKS PDM Professional API Help

# Assign Columnset to Folder before Browsing Add-in Example (VB.NET)

This example shows how to create an add-in that triggers a pre-browse event and assigns a columnset to a folder before it is browsed.

'--------------------------------------------------------------------------------------
' Preconditions:
' 1. Start Microsoft Visual Studio as Administrator.
' 2. Click File > New > Project > Visual Basic > Class Library (.NET Framework).
' 3. Select .NET Framework 4.5 or later in the dropdown.
' 4. Type ClassLibrary1 in Name.
' 5. Click Browse and navigate to the folder where to create the project.
' 6. Click OK.
' 7. Right-click the project name in the Solution Explorer and click Add Reference.
' 8. In the Add Reference dialog:
' a. Add the SOLIDWORKS PDM Professional interop assembly as a reference (click Browse in the
' left-side panel, click EPDM.Interop.epdm.dll,
' and click OK).
' b. Click Close.
' 9. Right-click the project name in the Solution Explorer and click Properties.
'10. In the Properties window:
' a. On the Application tab, click Assembly Information.
' b. De-select Make assembly COM-Visible.
' c. On the Compile tab, select x64 in the Target CPU dropdown, de-select Prefer 32-bit, and select Register for COM interop.
'11. Save the project.
'12. Copy the code below to your project's Class1.vb.
'13. To populate the GUID attribute, click Tools > Create GUID in the IDE,
' select GUID Format 6, click Copy, and click Exit. Replace <Guid("")> with
' the copied string.
'14. Open the SOLIDWORKS PDM Professional Administration tool, expand a vault_name node,
' and log in as Admin.
'15. Under vault_name, right-click Add-ins, and click New Add-in.
' a. Navigate to the bin directory of your built project.
' b. Select ClassLibrary1.dll.
' c. Click Open.
' d. Click OK.
'16. Click OK after reading the SOLIDWORKS PDM Professional warning dialog.
'17. Expand Columns under the vault_name in the Admin Tool.
'18. Right click File List Columns and select New Column Set.
'19. Change the order of existing columns or add a custom column and name the new column set.
'20. Click OK.
'21. Change the ID parameter in SetColumnSetID of the code to match your new column set ID. As none of the other folders and column sets exist, the code will only execute the Case Else section.
'22. Save the project.
'23. Select Release in the Solution Configurations dropdown and x64 in the Solution Platforms dropdown.
'24. Click Build > Build Solution.
'
' Postconditions:
' 1. Open File Explorer on a view of vault_name and log in as Admin.
' 2. This add-in triggers a pre-browse event before the root folder is browsed.
' 3. Click OK on each dialog as it appears.
' 4. This add-in registers and loads a user's column set into the root folder before it is browsed.
'---------------------------------------------------------------------------------------
Imports EPDM.Interop.epdm
Imports System.Runtime.InteropServices
<Guid("")>
<ComVisible(True)>

Public Class APIs

Implements IEdmAddIn5

Public vault As IEdmVault22

Dim ppocolumnset As EdmColumnSet

Dim ppocolumnsets As EdmColumnSet()

Public Sub GetAddInInfo(ByRef poInfo As EdmAddInInfo, ByVal poVault As IEdmVault5, ByVal poCmdMgr As IEdmCmdMgr5) Implements IEdmAddIn5.GetAddInInfo

Try

poInfo.mbsAddInName = "VB.NET Add-In"

poInfo.mbsCompany = "Dassault Systemes"

poInfo.mbsDescription = "Responding to folder browse events"

poInfo.mlAddInVersion = Now.ToString("yyyyMMdd")

poInfo.mlRequiredVersionMajor = 29

poInfo.mlRequiredVersionMinor = 0

poCmdMgr.AddHook(EdmCmdType.EdmCmd_PreBrowseFolder)

Catch ex As Runtime.InteropServices.COMException

MsgBox("HRESULT = 0x" + ex.ErrorCode.ToString("X") + vbCrLf + ex.Message)

Catch ex As Exception

MsgBox(ex.Message)

End Try

End Sub

Public Sub OnCmd(ByRef poCmd As EdmCmd, ByRef ppoData As EdmCmdData()) Implements IEdmAddIn5.OnCmd

Dim FolderID As Integer

Dim AffectedFile As EdmCmdData

Dim ID As Integer

Dim Name As String

Name = " "

MsgBox("poCmd.meCmdType = " + poCmd.meCmdType.ToString)

If poCmd.meCmdType = EdmCmdType.EdmCmd_PreBrowseFolder Then

vault = poCmd.mpoVault

Getcolumnsets(ID, Name)

vault.SetColumnSetID(ID)

For Each AffectedFile In ppoData

FolderID = AffectedFile.mlObjectID1

'Set the column set for the folder to be browsed

Select Case FolderID

Case 3

'vault.SetColumnSetID(5)

'GetCurrentColumnSet(ID, Name)

'MsgBox("Browsing Folder ID=3")

Case 4

'vault.SetColumnSetID(6)

'MsgBox("Browsing Folder ID=4")

Case 5

'vault.SetColumnSetID(7)

'GetCurrentColumnSet(ID, Name)

'MsgBox("Browsing Folder ID=5")

Case 6

'vault.SetColumnSetID(8)

'MsgBox("Browsing Folder ID=6")

Case 7

'vault.SetColumnSetID(9)

'GetCurrentColumnSet(ID, Name)

'MsgBox("Browsing Folder ID=7")

Case 8

'vault.SetColumnSetID(10)

'MsgBox("Browsing Folder ID=8")

Case Else

GetCurrentColumnSet(ID, Name)

MsgBox("Browsing Folder ID=" + FolderID.ToString())

End Select

Next

End If

End Sub

Public Sub GetCurrentColumnSet(ByRef ColumnID As Integer, ByRef ColumnName As String)

vault.GetCurrentColumnSet(ppocolumnset)

ColumnName = ppocolumnset.mbsColumnSetName

ColumnID = ppocolumnset.mlColumnSetID

MsgBox("Current column set ID = " + ColumnID.ToString + " Current column set name = " + ColumnName)

End Sub

Public Sub Getcolumnsets(ByRef ColumnID As Integer, ByRef ColumnName As String)

vault.GetColumnSets(ppocolumnsets)

Dim item As EdmColumnSet

For Each item In ppocolumnsets

ColumnName = item.mbsColumnSetName

ColumnID = item.mlColumnSetID

MsgBox("User's column set ID = " + ColumnID.ToString + " User's column set name = " + ColumnName)

Next

End Sub

End Class

Back to top