Bulk add variables - SOLIDWORK PDM Pro Vault

If you have ever taken the SOLIDWORKS PDM Professional administration class, you know that in the very first lesson, SOLIDWORKS recommends that you make a nice, little chart pre-planning your variables. You are supposed to make a list of variables, the variable types and some notes on how that variable should be used. This certainly is a good idea. Good planning makes a good vault.

You’re proud of your list. Lots of variables. Lots of time putting it all together… But now what? How do you get all of these variables into PDM? Should you do it one at a time? No way, not you, manual input is for suckers. During the class you remember seeing the “Import” button in the lower left corner of the Edit Variables dialog box. Maybe you could bulk add variables into SOLIDWORKS PDM with that! You smile to yourself because you know how clever you are.

Using the import button in the variable editor can let you bulk add variables to your vault.

You click the Import button. The dialog asks you for a *.cvr file. You’ve never seen anything in the help file describing the definition of a .cvr file. The Administration Guide? Nothing there either. Your favorite search engine doesn’t reveal anything [except this post that you are now reading]. Turns out, that if you want to use a .cvr file you are going to need a time machine. A .cvr file is a legacy file type that was used before the current .cex files were invented. Sometime back when PDM was called Conisio -and not even the latest version of Conisio, but version 5.3.  Version 5.3 was released near the year 2003. Since your DeLorean is in the shop, this option is useless to you. (…and probably everyone else!)

Is there a Solution? How can I add these variables in bulk?

Turns out, your only solution is to use PDM’s programming interface. You won’t need anything fancy, just Excel and its macros. [Excel macros shouldn’t be looked down on. They are great for little batch jobs like this!]

The intent of this article isn’t to teach you how to write an API program, there are many other avenues for learning API. I just want to give you a little starter program -something you can clip into your own application.

First start with an Excel worksheet.

Here is an example worksheet that might have variables you want to add in bulk

Now loop through all of the variables, collecting their information. Then with the IEdmVariableMgr6 object, add the variables.

The variable manager is pretty smart too. It can also update variable properties. If the variable name already exists, the variable manager will update the variable to your selected attributes.

Although this code doesn’t demonstrate it, the Variable Manager can also define your property mappings too. The EdmAttributeData attribute collection lets you assign a block and attribute names along with the extensions of that mapping. You can do it all with the variable manager and never have to open that “Edit Variable” dialog box again!

Option Explicit
Const cintStartRow As Integer = 3 'row of the first variable
Const cintVarNameColumn As Integer = 1
Const cintVarTypeColumn As Integer = 2
Const cintMandatoryColumn As Integer = 3
Const cintVersionFreeColumn As Integer = 4
Const cintUniqueColumn As Integer = 5

Sub main()
  Dim objVault As IEdmVault10
  Set objVault = New EdmVault5
  objVault.LoginAuto Cells(1, 2), 0 'name of the vault read from cell B1
  Dim lngLastRow As Long
  lngLastRow = Cells(Rows.Count, cintVarNameColumn).End(xlUp).Row 'find the last row (assumes you didn't skip any rows)
  Dim objVariableManager As IEdmVariableMgr6
  Set objVariableManager = objVault.CreateUtility(EdmUtility.EdmUtil_VariableMgr)
  Dim aVariableData() As EdmVariableData
  ReDim Preserve aVariableData(lngLastRow - cintStartRow)
  Dim intVariableFlags As Integer
  Dim intRow As Integer
  Dim intCount As Integer
  For intRow = cintStartRow To lngLastRow 'loop through all variables
    intVariableFlags = 0 'reset
    intCount = intRow - cintStartRow 'zero based array
    aVariableData(intCount).mbsVariableName = Cells(intRow, cintVarNameColumn) 'variable name
    Select Case Cells(intRow, cintVarTypeColumn) 'Variable type
    Case "Text"
      aVariableData(intCount).meType = EdmVariableType.EdmVarType_Text
    Case "Bool"
      aVariableData(intCount).meType = EdmVariableType.EdmVarType_Bool
    Case "Int"
      aVariableData(intCount).meType = EdmVariableType.EdmVarType_Int
    Case "Date"
      aVariableData(intCount).meType = EdmVariableType.EdmVarType_Date
    Case "Float"
      aVariableData(intCount).meType = EdmVariableType.EdmVarType_Float
    End Select
    'other variable properties
    If Cells(intRow, cintMandatoryColumn) = "Yes" Then intVariableFlags = EdmVariableFlags.EdmVar_Mandatory
    If Cells(intRow, cintVersionFreeColumn) = "All Versions" Then intVariableFlags = intVariableFlags + EdmVariableFlags.EdmVar_VerFreeUpdateAll
    If Cells(intRow, cintVersionFreeColumn) = "Latest Version" Then intVariableFlags = intVariableFlags + EdmVariableFlags.EdmVar_VerFreeUpdateLatest
    If Cells(intRow, cintUniqueColumn) = "Yes" Then intVariableFlags = intVariableFlags + EdmVariableFlags.EdmVar_Unique
    aVariableData(intCount).mlEdmVariableFlags = intVariableFlags 'define the variable properties
  Next intRow
  objVariableManager.AddVariables aVariableData 'add the variables
  Set objVariableManager = Nothing
End Sub
  • Share this
Find Your Design Solution in the CATI Store.
Browse Products