首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Solidworks EPDM从VBA获取最新版本

Solidworks EPDM从VBA获取最新版本
EN

Stack Overflow用户
提问于 2014-12-11 21:13:10
回答 1查看 3.9K关注 0票数 0

由于有关PDM系统操作方式的公司策略,当用户检入文件时,本地副本将从用户缓存中删除。我的宏检出文件,编辑它们,然后再次检入。如果我尝试编辑一个刚刚编辑过的文件,我得到一个'file not found‘错误(因为它已经从缓存中删除了)。我试图绕过这一点,在编辑文件之前,我编写了一个sub来立即获取文件的最新副本,以确保始终存在一个文件,但代码似乎没有检索到该文件。子模块如下所示。

代码语言:javascript
复制
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上发布的代码稍有修改

EN

回答 1

Stack Overflow用户

发布于 2015-08-27 05:22:18

乍一看,似乎您填充的EdmSelItem属性不正确。docID属性是文档的数据库ID。ProjID属性是包含文件夹的ID。为了获得最新版本,您可以使用任何包含的文件夹,因为它将在所有文件夹中签出。使用三元乙丙橡胶,当一个文件被“共享”时,它可以拥有它所属的多个父文件夹is,然后我们可以使用iEdmFile5 GetFirstFolderPositionGetNextFolder的方法进行枚举。

您可以参考 the documentation获取更多信息和示例。

如果你想得到一个单独的文件,尝试下面的调整,看看是否能做到:

代码语言:javascript
复制
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获取指定文件夹中的所有文件。如下所示:

代码语言:javascript
复制
'Get all files from the folder
files(0).mlDocID = 0
files(0).mlProjID = eFolder.ID
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27423746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档