【问题标题】:Solidworks EPDM 'Get latest' from VBASolidworks EPDM 从 VBA “获取最新”
【发布时间】:2015-08-27 05:32:04
【问题描述】:

由于有关 PDM 系统如何运行的公司政策,当用户签入文件时,本地副本将从用户缓存中删除。我的宏将文件签出、编辑并再次签入。如果我尝试编辑刚刚编辑过的文件,我会收到“找不到文件”错误(因为它已从缓存中删除)。我试图通过编写一个子程序来解决这个问题,以便在编辑它之前立即获取文件的最新副本,以确保始终存在一个文件,但代码似乎没有检索该文件。子如下。

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 发布的代码稍作修改

【问题讨论】:

  • 当你运行它时会发生什么 - 你有任何错误吗?它是否运行并没有做你想做的事?

标签: vba solidworks


【解决方案1】:

乍一看,您似乎错误地填充了EdmSelItem 属性。 docID 属性是文档的数据库 ID。 ProjID 属性是包含文件夹的 ID。要获取最新版本,您可以使用任何包含文件夹,因为它将在所有文件夹中检出。使用 EPDM,当一个文件被“共享”时,它可以有多个它所属的父文件夹 ID,然后我们可以使用 iEdmFile5 GetFirstFolderPositionGetNextFolder 中的方法进行枚举。

您可以参考 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.ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 2020-07-26
    相关资源
    最近更新 更多