Hi there,
We are keeping two versions of our policy documents:
1. Policy Document (DOCX format) – The first one is working document and this document is continuously get updated, with access restricted to specific users who make modifications.
2. Policy Document (PDF format) – This is a published document, and this is a read-only version available to all users.
Both documents have different Object ID, belonging to the same class but having different workflow states. The goal is to ensure that whenever a designated user updates the Working Policy Document, they modify the workflow state to "Republished" after completing the changes. This action should trigger the replacement of the Published Policy Document with the updated version, ensuring only the most recent document is available.
Currently, I am using the Object ID to identify the Published Policy Document that needs replacement. However, my VBScript is not allowing me to overwrite the published file with the updated working document. Could someone provide assistance or share insights on how to achieve this properly? Thanks!
ERROR:
CoActiveScriptSite.cpp, 914, Not found. (0x8004000B)
CoActiveScriptSite.cpp, 744, Not found. (0x8004000B)
Republished, StateAction, 35, Not found. (0x8004000B)
MNullPropagatingDispatchImpl.h, 127, Not found. (0x8004000B)
MNullPropagatingDispatchImpl.h, 174, Not found. (0x8004000B)
CoVaultObjectFileOperations.cpp, 878, Not found. (0x8004000B)
ServerVaultObjectFileOperationsHelper.cpp, 515, Not found. (0x8004000B)
ServerVaultObjectFileOperationsHelper.cpp, 1109, Not found. (0x8004000B)
RPCObjectOperationsHelper.cpp, 251, Not found. (0x8004000B)
CoRPCOverCOM.cpp, 7963, Not found. (0x8004000B)
RPCDocumentOperationsFileIO.cpp, 886, Not found. (0x8004000B)
RPCDocumentOperationsHelper.cpp, 22472, Not found. (0x8004000B)
ObjectFileHelper.cpp, 2205, Not found. (0x8004000B)
(M-Files 25.3.14681.8 2025-04-07T23:38:22.019Z)
Option Explicit Dim objFSO: Set objFSO = CreateObject("Scripting.FileSystemObject") ' Retrieve the Object ID stored in the Test ID metadata. Dim objTestID: Set objTestID = PropertyValues.SearchForProperty(Vault.PropertyDefOperations.GetPropertyDefIDByAlias("p.Test")) If objTestID Is Nothing Or objTestID.TypedValue.IsEmpty Then Err.Raise 1001, "Workflow", "No Object ID found in Test ID field." End If Dim intPublishedObjectID: intPublishedObjectID = CLng(objTestID.TypedValue.Value) ' Create ObjID reference for the published document. Dim objPublishedObjID: Set objPublishedObjID = CreateObject("MFilesAPI.ObjID") objPublishedObjID.SetIDs MFBuiltInObjectTypeDocument, intPublishedObjectID ' Check out the target published document. Dim objCheckedOutVersion: Set objCheckedOutVersion = Vault.ObjectOperations.CheckOut(objPublishedObjID) ' Retrieve the source files from the working version. Dim objNewSourceFiles: Set objNewSourceFiles = GetNewObjectSourceFiles(ObjVer) ' Loop through and replace the target file with the source file. Dim objSourceFile For Each objSourceFile In objNewSourceFiles Dim szFilePath: szFilePath = objSourceFile.SourceFilePath ' Ensure the file exists before replacing. If Not objFSO.FileExists(szFilePath) Then Err.Raise 1003, "Workflow", "File does not exist: " & szFilePath End If ' Replace the published document with the new source file. Vault.ObjectFileOperations.UploadFile objCheckedOutVersion.ObjVer.ID, objCheckedOutVersion.ObjVer.Version, szFilePath Next ' Check in the updated document. Vault.ObjectOperations.CheckIn(objCheckedOutVersion.ObjVer) ' Clean up temporary files. ClearTemporaryFiles objNewSourceFiles ''' HELPER FUNCTIONS Function GetNewObjectSourceFiles(oSourceObjVer) Dim strTempFolderPath: strTempFolderPath = "D:\Create Object" Dim objFiles: Set objFiles = Vault.ObjectFileOperations.GetFiles(oSourceObjVer) Dim objSourceFiles: Set objSourceFiles = CreateObject("MFilesAPI.SourceObjectFiles") Dim objFile, objObjectSourceFile, strTemporaryFilePath For Each objFile In objFiles strTemporaryFilePath = objFSO.BuildPath(strTempFolderPath, objFSO.GetTempName()) & "." & objFile.Extension Vault.ObjectFileOperations.DownloadFile objFile.ID, objFile.Version, strTemporaryFilePath Set objObjectSourceFile = CreateObject("MFilesAPI.SourceObjectFile") objObjectSourceFile.SourceFilePath = strTemporaryFilePath objObjectSourceFile.Title = objFile.Title objObjectSourceFile.Extension = objFile.Extension objSourceFiles.Add -1, objObjectSourceFile Next Set GetNewObjectSourceFiles = objSourceFiles End Function Sub ClearTemporaryFiles(objObjectSourceFiles) Dim objSourceFile For Each objSourceFile In objObjectSourceFiles If objFSO.FileExists(objSourceFile.SourceFilePath) Then objFSO.DeleteFile objSourceFile.SourceFilePath, True End If Next End Sub