由于有关PDM系统操作方式的公司策略,当用户检入文件时,本地副本将从用户缓存中删除。我的宏检出文件,编辑它们,然后再次检入。如果我尝试编辑一个刚刚编辑过的文件,我得到一个'file not found‘错误(因为它已经从缓存中删除了)。我试图绕过这一点,在编辑文件之前,我编写了一个sub来立即获取文件的最新副本,以确保始终存在一个文件,但代码似乎没有检索到该文件。子模块如下所示。
Sub GetLatest(fName As String)
Dim vaultName As String
Dim eVault As IEdmVault13
Dim eFile As IEdmFile8
Dim BG As IEdmBatchGet
Dim files(1) As EdmSelItem
'log into the vault
vaultName = Config.ReadXMLElement(pathConfig, "vaultname")
Set eVault = New EdmVault5
If Not eVault.IsLoggedIn Then
Call eVault.LoginAuto(vaultName, 0)
End If
'get the file to get lastest
Set eFile = eVault.GetFileFromPath(fName)
'put the file in an array
files(0).mlDocID = 0
files(0).mlProjID = eFile.ID
Set BG = eVault.CreateUtility(EdmUtil_BatchGet)
Call BG.AddSelection(eVault, files())
Call BG.CreateTree(0, EdmGetCmdFlags.Egcf_SkipExisting)
Call BG.GetFiles(0, Nothing)
End Sub如果我在编辑文件之前在EPDM浏览器中手动‘获取最新版本’,宏读取得很好。代码比Michael Dekoning在https://forum.solidworks.com/thread/51105上发布的代码稍有修改
发布于 2015-08-27 05:22:18
乍一看,似乎您填充的EdmSelItem属性不正确。docID属性是文档的数据库ID。ProjID属性是包含文件夹的ID。为了获得最新版本,您可以使用任何包含的文件夹,因为它将在所有文件夹中签出。使用三元乙丙橡胶,当一个文件被“共享”时,它可以拥有它所属的多个父文件夹is,然后我们可以使用iEdmFile5 GetFirstFolderPosition和GetNextFolder的方法进行枚举。
您可以参考 the documentation获取更多信息和示例。
如果你想得到一个单独的文件,尝试下面的调整,看看是否能做到:
Set eFile = eVault.GetFileFromPath(fName)
Dim eFolder as iEdmFolder5
Dim Pos as iEdmPos5
Set Pos=eFile.GetFirstFolderPosition
Set eFolder=eFile.GetNextFolder(Pos)
'Get the file from the folder
files(0).mlDocID = eFile.ID
files(0).mlProjID = eFolder.ID当您提供DocID = 0时,它会告诉EPDM获取指定文件夹中的所有文件。如下所示:
'Get all files from the folder
files(0).mlDocID = 0
files(0).mlProjID = eFolder.IDhttps://stackoverflow.com/questions/27423746
复制相似问题