Hi All,
I have started learning PDM APIs and created a macro to get the latest version of the active document in SolidWorks, but I am not able to get the latest vesion. Here are the codes:
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim swVault As EdmVault5
Dim swVault7 As IEdmVault7
Dim swFile As IEdmFile5
Dim swFile12 As IEdmFile12
Dim swFolder As IEdmFolder5
Dim swParFolder As IEdmFolder5
Dim swPos As IEdmPos5
Dim swSelFiles(0) As EdmSelItem
Dim swBatchGet As IEdmBatchGet
Set swVault = New EdmVault5
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Debug.Print swModel.GetPathName
If swVault.IsLoggedIn = False Then swVault.LoginAuto "Vault_Name", 0
Set swFile = swVault.GetFileFromPath(swModel.GetPathName, swParFolder)
Set swFile12 = swFile
Debug.Print swFile.CurrentVersion
Debug.Print swFile12.GetLocalVersionNo2(swModel.GetPathName, False)
Set swPos = swFile.GetFirstFolderPosition
Set swFolder = swFile.GetNextFolder(swPos)
Debug.Print swFolder.LocalPath
swSelFiles(0).mlDocID = swFile.ID
swSelFiles(0).mlProjID = swFolder.ID
Set swVault7 = swVault
Set swBatchGet = swVault7.CreateUtility(EdmUtil_BatchGet)
swBatchGet.AddSelection swVault, swSelFiles
swBatchGet.CreateTree 0, EdmGetCmdFlags.Egcf_SkipExisting
If swBatchGet.ShowDlg(0) = True Then swBatchGet.GetFiles 0, Nothing
'swBatchGet.GetFiles 0, Nothing
End Sub
Below are the links of couple of forum I used as reference:
Solidworks EPDM 'Get latest' from VBA - Stack Overflow
You can see the codes are quite similar but for some reason, I am not able to get the latest version of the document. I can get the local version (IEdmFile12::GetLocalVersionNo2) and the current version (IEdmFile5::CurrentVersion) of the document correctly but not able to get the latest version.
I have already tried following:
1. Passing the full document path instead of IModelDoc2::GetPathName.
2. swSelFiles(0).mlDocID = 0 instead of swSelFiles(0).mlDocID = swFile.ID.
3. swSelFiles(0).mlProjID = ("Folder Path").ID instead of swSelFiles(0).mlProjID = swFolder.ID &
4. swBatchGet.CreateTree 0, EdmGetCmdFlags.Egcf_Nothing instead of swBatchGet.CreateTree 0, EdmGetCmdFlags.Egcf_SkipExisting
But I am still not able to get the latest version of the active document in SolidWorks. What am I missing? I know there are plenty of PDM API gurus here, would someone be able to guide me?
Thanks in advance.
Regards,
Nilesh
SolidworksApi macros