SolidWorks EPDM API IEdmEnumeratorVariable5 :: SetVar does not work as expected

I am trying to use IEdmEnumeratorVariable5::SetVar to update some file map variables based on user input in window view. My code is executed, there are no error messages, the file is uploaded and checked back, and the corresponding comment is added to the history; however, variables on the map are not updated.

I checked by executing the code at runtime that all the variables were filled with the correct (as expected) data. SetVar procedures all exit without a hitch, but the variables on the data card do not change the value - even manual updating of the folder view is not affected.


Below is my code.

This is an add-in written as a class library project in VB using VS Community 2015 with the target platform .NET 4.0.

In attempts to make this question more concise; immediately below, I included only a piece of code in which the given variables work, then I also added more code so that you can get the whole picture if necessary.


SIMPLE TIP:

This is the code that does the work of the given variables:

 Dim UserManager As IEdmUserMgr5 = .SourceVault Dim User As IEdmUser5 = UserManager.GetLoggedInUser CardComment = UserComment & CardComment CardDate = Today().ToString("yyMMdd", Globalization.CultureInfo.InvariantCulture) CardBy = User.Name CardDisposition = UserDisposition CardVariables.SetVar(DispositionVariable, "@", CardDisposition) CardVariables.SetVar(CommentVariable, "@", CardComment) CardVariables.SetVar(ByVariable, "@", CardBy) CardVariables.SetVar(DateVariable, "@", CardDate) CardVariables.Flush() 


WIDE LINE:

Module class level variables:

 Private Structure CommandInfo Dim SourceVault As IEdmVault11 Dim SourceCommand As EdmCmd Dim SourceSelection As System.Array Dim TargetTemplate As System.String Dim VerifiedPaths As List(Of String) End Structure Private ReceivedCommand As CommandInfo 

OnCmd procedure (caller):

 Public Sub OnCmd(ByRef poCmd As EdmCmd, ByRef ppoData As System.Array) Implements IEdmAddIn5.OnCmd Dim CommandToRun As MenuCommand Try With ReceivedCommand .SourceVault = poCmd.mpoVault .SourceCommand = poCmd .SourceSelection = ppoData 'Get the command structure for the command ID Select Case poCmd.meCmdType Case EdmCmdType.EdmCmd_Menu CommandToRun = AvailableCommands(.SourceCommand.mlCmdID) Case EdmCmdType.EdmCmd_CardButton Select Case True Case poCmd.mbsComment.ToString.ToUpper.Contains("DISPOSITION") DispositionRequest() Case Else : Exit Sub End Select Case Else : Exit Sub End Select '...... (End Try, End Sub, Etc.) 

DispositionRequest procedure (called):

 Private Sub DispositionRequest() Dim UserDisposition As String Using Disposition As New DispositionForm With Disposition If Not .ShowDialog() = System.Windows.Forms.DialogResult.OK Then Exit Sub Select Case True Case .Approve.Checked UserDisposition = "Approved" Case .Reject.Checked UserDisposition = "Rejected" Case Else : Exit Sub End Select End With End Using Dim UserComment As String Using Explanation As New DispositionExplanation With Explanation If Not .ShowDialog() = System.Windows.Forms.DialogResult.OK Then Exit Sub If .ListView1.Items.Count > 0 Then 'do some stuff not relevant to this question... End If UserComment = .Comments.Text End With End Using 'This next procedure just gets a list of paths from ReceivedCommand.SourceSelection - which is just the ppoData argument from the OnCmd procedure - see code block above! Dim RequestPaths As List(Of String) = GetSelectedFilePaths() For Each Path As String In RequestPaths With ReceivedCommand Dim RequestFile As IEdmFile5 = .SourceVault.GetFileFromPath(Path) Dim ParentFolder As IEdmFolder6 = .SourceVault.GetFolderFromPath(System.IO.Path.GetDirectoryName(Path)) Dim UnlockLater As Boolean = False If Not RequestFile.IsLocked Then UnlockLater = True RequestFile.LockFile(ParentFolder.ID, .SourceCommand.mlParentWnd, CInt(EdmLockFlag.EdmLock_Simple)) End If Dim CardVariables As IEdmEnumeratorVariable5 = RequestFile.GetEnumeratorVariable 'We allow users to re-disposition a request so we want to keep any previous disposition information so it is not lost Dim CardComment As String = String.Empty Dim CardBy As String = String.Empty Dim CardDate As String = String.Empty Dim CardDisposition As String = String.Empty Dim Success As Boolean Const CommentVariable As String = "DispComm" Const ByVariable As String = "DisposedBy" Const DateVariable As String = "DisposedDate" Const DispositionVariable As String = "Disposition" Success = CardVariables.GetVar(DispositionVariable, "@", CardDisposition) If Success Then Success = CardVariables.GetVar(CommentVariable, "@", CardComment) If Success Then Success = CardVariables.GetVar(ByVariable, "@", CardBy) If Success Then Success = CardVariables.GetVar(DateVariable, "@", CardDate) If Success Then CardComment = "Previously dispositioned as: """ & CardDisposition & """ by: " & CardBy & " on: " & CardDate & vbNewLine & "---------Previous disposition explanation---------" & vbNewLine & CardComment End If Dim UserManager As IEdmUserMgr5 = .SourceVault Dim User As IEdmUser5 = UserManager.GetLoggedInUser CardComment = UserComment & CardComment CardDate = Today().ToString("yyMMdd", Globalization.CultureInfo.InvariantCulture) CardBy = User.Name CardDisposition = UserDisposition CardVariables.SetVar(DispositionVariable, "@", CardDisposition) CardVariables.SetVar(CommentVariable, "@", CardComment) CardVariables.SetVar(ByVariable, "@", CardBy) CardVariables.SetVar(DateVariable, "@", CardDate) CardVariables.Flush() If UnlockLater Then RequestFile.UnlockFile(lParentWnd:= .SourceCommand.mlParentWnd, bsComment:="Dispositioned as " & CardDisposition, lEdmUnlockFlags:=0) .SourceVault.RefreshFolder(ParentFolder.LocalPath) End With Next End Sub 
+5
source share
1 answer

From the documentation :

bsCfgName: the name of the configuration or layout to which the variable value will be stored; empty string for folders and file types that do not support configuration

I worked with a virtual file that did not support configuration. I saw an example C working with a virtual file and they passed null references, so I re-read the documentation and saw this excerpt above, so I changed my code from "@" to String.Empty for the mboconfiguration argument and now it works!

 CardVariables.SetVar(DispositionVariable, String.Empty, CardDisposition) CardVariables.SetVar(CommentVariable, String.Empty, CardComment) CardVariables.SetVar(ByVariable, String.Empty, CardBy) CardVariables.SetVar(DateVariable, String.Empty, CardDate) CardVariables.Flush() 
+2
source

All Articles