From 3f084d17a14715018ad5fec211157eec3eb0c6d9 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Mon, 6 Apr 2020 13:59:08 +0200 Subject: [PATCH] account for other windream drive letters than W --- Global_Indexer/ClassWindream.vb | 326 +++++++++++++++----------------- 1 file changed, 153 insertions(+), 173 deletions(-) diff --git a/Global_Indexer/ClassWindream.vb b/Global_Indexer/ClassWindream.vb index 8935ff6..e6e128e 100644 --- a/Global_Indexer/ClassWindream.vb +++ b/Global_Indexer/ClassWindream.vb @@ -8,6 +8,7 @@ Imports WINDREAMLib.WMSearchRelation Imports WMOBRWSLib Imports WMOSRCHLib Imports System.IO +Imports System.Text.RegularExpressions Public Class ClassWindream @@ -411,14 +412,22 @@ Public Class ClassWindream Dim oWindreamFilename As String = NewFileName Dim oFileName As String = NewFileName + Dim oWDriveRegex As New Regex("^\w{1}:") - If NewFileName.StartsWith("W:") Then - oFileName = NewFileName.Replace("W:", vWLaufwerk) - oWindreamFilename = NewFileName.Replace("W:", String.Empty) + If oWDriveRegex.IsMatch(NewFileName) Then + oFileName = oWDriveRegex.Replace(NewFileName, vWLaufwerk) + oWindreamFilename = oWDriveRegex.Replace(NewFileName, String.Empty) Else oWindreamFilename = NewFileName.Replace(vWLaufwerk, String.Empty) End If + 'If NewFileName.StartsWith("W:") Then + ' oFileName = NewFileName.Replace("W:", vWLaufwerk) + ' oWindreamFilename = NewFileName.Replace("W:", String.Empty) + 'Else + ' oWindreamFilename = NewFileName.Replace(vWLaufwerk, String.Empty) + 'End If + Dim oSourceFilename As String = Path.GetFileName(SourceFilePath) Dim oDestination As String = Path.GetDirectoryName(oFileName) @@ -434,16 +443,6 @@ Public Class ClassWindream LOGGER.Info(" ...Quelldatei gelesen") - 'If oWindreamFilename.Contains("[%Version]") Then - ' oWindreamFilename = oWindreamFilename.Replace("[%Version]", "") - ' NewFileName = oWindreamFilename - 'End If - - 'If NewFileName.StartsWith("W:") Then - ' NewFileName = NewFileName.Replace("W:", vWLaufwerk) - ' oWindreamFilename = NewFileName.Replace(vWLaufwerk, String.Empty) - 'End If - If My.Computer.FileSystem.DirectoryExists(oDestination) Then LOGGER.Info(" ...targetPath existiert") ' Überprüfen ob der zu Kopieren notwendige Speicherplatz auf Ziellaufwerk vorhanden ist @@ -451,91 +450,72 @@ Public Class ClassWindream Dim oFileInfo As New FileInfo(SourceFilePath) Dim oFileLength As Long = oFileInfo.Length - 'If vWLaufwerk.Count = 1 Then - ' Dim oDriveInfo As New DriveInfo(vWLaufwerk & ":") - ' Dim oFreeSpace = oDriveInfo.TotalFreeSpace - - ' If oFreeSpace < oFileLength Then - ' If USER_LANGUAGE = "de-DE" Then - ' MsgBox("Auf dem Zielverzeichnis ist nicht genug Speicherplatz zum Übertragen frei.", MsgBoxStyle.Exclamation, "Nicht genug Speicherplatz") - ' Else - ' MsgBox("Not enough diskspace in Target-Directory.", MsgBoxStyle.Exclamation, "Not enough diskspace") - ' End If - - ' Return -10 - ' End If - 'End If LOGGER.Info(" ...Datei kopieren von '" & SourceFilePath & "' nach '" & NewFileName & "'.") - Dim Connect - Dim Session - Dim WMObject - Dim aFileIO - Dim aWMStream - Dim wmbrwsr - Dim dmsServer As String - LOGGER.Info(" ...Connect definieren: CreateObject('Windream.WMConnect')") - Connect = CreateObject("Windream.WMConnect") - aFileIO = New WMOTOOLLib.WMFileIO - 'If My.Settings.DLL_WMOTOOL = "" Then - ' aFileIO = New WMOTOOLLib.WMFileIO - ' LOGGER.Info(" ...Direkter Verweis auf New WMOTOOLLib.WMFileIO") - 'Else - ' aFileIO = CreateObject(My.Settings.DLL_WMOTOOL) 'WMOTool.WMFileIO oder WMOTOOLLib.WMFileIO - ' LOGGER.Info(" ...Verwendeter Verweis aus Anwendungsstring: '" & My.Settings.DLL_WMOTOOL & "'") - 'End If + Dim Connect + Dim Session + Dim WMObject + Dim aFileIO + Dim aWMStream + Dim wmbrwsr + Dim dmsServer As String + LOGGER.Info(" ...Connect definieren: CreateObject('Windream.WMConnect')") + Connect = CreateObject("Windream.WMConnect") + aFileIO = New WMOTOOLLib.WMFileIO + + wmbrwsr = CreateObject("WMOBrws.ServerBrowser") + '================================================================== + ' get the current DMS-server to log in + '================================================================== + dmsServer = wmbrwsr.GetCurrentServer + '================================================================== + ' create a session + '================================================================== + Session = CreateObject("Windream.WMSession", dmsServer) + '================================================================== + ' login session + '================================================================== + Connect.LoginSession(Session) + Dim LoggedIn = Session.aLoggedin + If LoggedIn Then + LOGGER.Info(" ...Login ok. You are logged in as '" & Connect.UserName & "' on Server '" & dmsServer) + 'MsgBox("Login ok. You are logged in as '" + Connect.UserName + "' on Server '" + dmsServer + "'") + Else + LOGGER.Info(" >> Login on dms-Server failed") + ' MsgBox("Login failed. ") + End If + _session = Session + Const WMCOMEventWMSessionNeedIndex = 1 + + 'windream Objekte erstellen ohne Indexierungs-Event + Session.SwitchEvents(WMCOMEventWMSessionNeedIndex, False) + '================================================================== + ' check if files exist + '================================================================== + LOGGER.Info(" ...ÜBERPRÜFTER DATEINAME => " & oWindreamFilename) + Dim wdFilexists As Boolean + LOGGER.Info(" ...Versuch auf die Datei in W: zuzugreifen und zu sperren...") + wdFilexists = Session.WMObjectExists(WMEntityDocument, oWindreamFilename, 0, 0) + Err.Clear() + If wdFilexists = False Then + LOGGER.Info(" ...Datei ist NICHT vorhanden, kann also einfach neu angelegt werden") - wmbrwsr = CreateObject("WMOBrws.ServerBrowser") - '================================================================== - ' get the current DMS-server to log in - '================================================================== - dmsServer = wmbrwsr.GetCurrentServer - '================================================================== - ' create a session - '================================================================== - Session = CreateObject("Windream.WMSession", dmsServer) '================================================================== - ' login session + ' create an object '================================================================== - Connect.LoginSession(Session) - Dim LoggedIn = Session.aLoggedin - If LoggedIn Then - LOGGER.Info(" ...Login ok. You are logged in as '" & Connect.UserName & "' on Server '" & dmsServer) - 'MsgBox("Login ok. You are logged in as '" + Connect.UserName + "' on Server '" + dmsServer + "'") - Else - LOGGER.Info(" >> Login on dms-Server failed") - ' MsgBox("Login failed. ") + WMObject = Session.GetNewWMObjectFS(WMEntityDocument, oWindreamFilename, WMObjectEditModeObject) 'WMEntityDocument, windreamFilename, WMObjectEditModeObject + If Err.Number > 0 Then + LOGGER.Info(" FEHLER: WMObject konnte nicht erzeugt werden - Error: '" & Err.Description & "'") + 'MsgBox(Err.Description) End If - _session = Session - Const WMCOMEventWMSessionNeedIndex = 1 + ' MsgBox("Created file: " + windreamFilename) + Else + ' wenn auf die Datei zugeriffen werden konnte ist sie bereits vorhanden -> Datum anhängen + LOGGER.Info(" ...Es konnte zugegriffen werden -> DATEI IST BEREITS VORHANDEN") - 'windream Objekte erstellen ohne Indexierungs-Event - Session.SwitchEvents(WMCOMEventWMSessionNeedIndex, False) - '================================================================== - ' check if files exist - '================================================================== - LOGGER.Info(" ...ÜBERPRÜFTER DATEINAME => " & oWindreamFilename) - Dim wdFilexists As Boolean - LOGGER.Info(" ...Versuch auf die Datei in W: zuzugreifen und zu sperren...") - wdFilexists = Session.WMObjectExists(WMEntityDocument, oWindreamFilename, 0, 0) - Err.Clear() - If wdFilexists = False Then - LOGGER.Info(" ...Datei ist NICHT vorhanden, kann also einfach neu angelegt werden") - - '================================================================== - ' create an object - '================================================================== - WMObject = Session.GetNewWMObjectFS(WMEntityDocument, oWindreamFilename, WMObjectEditModeObject) 'WMEntityDocument, windreamFilename, WMObjectEditModeObject - If Err.Number > 0 Then - LOGGER.Info(" FEHLER: WMObject konnte nicht erzeugt werden - Error: '" & Err.Description & "'") - 'MsgBox(Err.Description) - End If - ' MsgBox("Created file: " + windreamFilename) - Else - ' wenn auf die Datei zugeriffen werden konnte ist sie bereits vorhanden -> Datum anhängen - LOGGER.Info(" ...Es konnte zugegriffen werden -> DATEI IST BEREITS VORHANDEN") Select Case CURRENT_DOKART_DUPLICATE_HANDLING + Case "New version" LOGGER.Info("Creating new version of file [{0}]", NewFileName) oWindreamFilename = ClassFilehandle.Versionierung_Datei(NewFileName).ToString.Substring(2) @@ -562,85 +542,85 @@ Public Class ClassWindream End Select WMObject = Session.GetNewWMObjectFS(1, oWindreamFilename, 31) 'WMEntityDocument, windreamFilename, WMObjectEditModeObject - If Err.Number > 0 Then - LOGGER.Info(" FEHLER: Neues WMObject (Kopie) konnte nicht erzeugt werden - Error: '" & Err.Description & "'") - 'MsgBox(Err.Description) - End If - LOGGER.Info(" ...WMObject zugewiesen") + If Err.Number > 0 Then + LOGGER.Info(" FEHLER: Neues WMObject (Kopie) konnte nicht erzeugt werden - Error: '" & Err.Description & "'") + 'MsgBox(Err.Description) End If - LOGGER.Info(" ...ENDGÜLTIGER DATEINAME => " & oWindreamFilename) - If WMObject IsNot Nothing Then + LOGGER.Info(" ...WMObject zugewiesen") + End If + LOGGER.Info(" ...ENDGÜLTIGER DATEINAME => " & oWindreamFilename) + If WMObject IsNot Nothing Then 'NewFileName = vWLaufwerk & ":" & oWindreamFilename ' lock object for file system access (to change the file itself) WMObject.lock() - ' set fileIO the local source file - aFileIO.bstrOriginalFileName = SourceFilePath - If Err.Number > 0 Then - LOGGER.Info(" FEHLER: fileIO konnte nicht gesetzt werden - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - LOGGER.Info(" HINWEIS: Überprüfen Sie den Verweis auf die Bibliotheken 'WMOTool.WMFileIO' UND 'WMOTOOLLib.WMFileIO' und ändern diese in den Anwendungseinstellungen (DLL_WMOTOOL)'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) + ' set fileIO the local source file + aFileIO.bstrOriginalFileName = SourceFilePath + If Err.Number > 0 Then + LOGGER.Info(" FEHLER: fileIO konnte nicht gesetzt werden - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") + LOGGER.Info(" HINWEIS: Überprüfen Sie den Verweis auf die Bibliotheken 'WMOTool.WMFileIO' UND 'WMOTOOLLib.WMFileIO' und ändern diese in den Anwendungseinstellungen (DLL_WMOTOOL)'") + WMObject.Unlock() + Delete_WDFile(oWindreamFilename) - Return False - ' MsgBox(Err.Description) - End If - ' open the windream object's file stream for writing - aWMStream = WMObject.OpenStream(STREAM_BinaryObject, WMObjectStreamOpenModeReadWrite) - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in OpenStream - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - 'MsgBox(Err.Description) - End If - LOGGER.Info(" ...oWMStream erzeugt") - ' give fileIO helper object the windream stream - aFileIO.aWMStream = aWMStream - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in Zuweisen aWMStream zu aFileIO - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - 'MsgBox(Err.Description) - End If - ' let fileIO object import the original file into windream - aFileIO.ImportOriginal(True) - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in FileIO.ImportOriginal(True) - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - ' MsgBox(Err.Description) - End If - LOGGER.Info(" ...Inhalt der Datei konnte übertragen werden") - ' close the windream file stream - aWMStream.Close() - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in aWMStream.Close() - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - 'MsgBox(Err.Description) - End If - ' save new windream object - WMObject.save() - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in WMObject.save - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - 'MsgBox(Err.Description) - End If - LOGGER.Info(" ...Datei konnte gespeichert werden") - ' unlock the windream object - WMObject.unlock() - If Err.Number > 0 Then - LOGGER.Info(" Unexpected error in WMObject.unlock - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") - WMObject.Unlock() - Delete_WDFile(oWindreamFilename) - Return False - 'MsgBox(Err.Description) - End If + Return False + ' MsgBox(Err.Description) + End If + ' open the windream object's file stream for writing + aWMStream = WMObject.OpenStream(STREAM_BinaryObject, WMObjectStreamOpenModeReadWrite) + If Err.Number > 0 Then + LOGGER.Info(" Unexpected error in OpenStream - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") + WMObject.Unlock() + Delete_WDFile(oWindreamFilename) + Return False + 'MsgBox(Err.Description) + End If + LOGGER.Info(" ...oWMStream erzeugt") + ' give fileIO helper object the windream stream + aFileIO.aWMStream = aWMStream + If Err.Number > 0 Then + LOGGER.Info(" Unexpected error in Zuweisen aWMStream zu aFileIO - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") + WMObject.Unlock() + Delete_WDFile(oWindreamFilename) + Return False + 'MsgBox(Err.Description) + End If + ' let fileIO object import the original file into windream + aFileIO.ImportOriginal(True) + If Err.Number > 0 Then + LOGGER.Info(" Unexpected error in FileIO.ImportOriginal(True) - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") + WMObject.Unlock() + Delete_WDFile(oWindreamFilename) + Return False + ' MsgBox(Err.Description) + End If + LOGGER.Info(" ...Inhalt der Datei konnte übertragen werden") + ' close the windream file stream + aWMStream.Close() + If Err.Number > 0 Then + LOGGER.Info(" Unexpected error in aWMStream.Close() - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") + WMObject.Unlock() + Delete_WDFile(oWindreamFilename) + Return False + 'MsgBox(Err.Description) + End If + ' save new windream object + WMObject.save() + If Err.Number > 0 Then + LOGGER.Info(" Unexpected error in WMObject.save - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") + WMObject.Unlock() + Delete_WDFile(oWindreamFilename) + Return False + 'MsgBox(Err.Description) + End If + LOGGER.Info(" ...Datei konnte gespeichert werden") + ' unlock the windream object + WMObject.unlock() + If Err.Number > 0 Then + LOGGER.Info(" Unexpected error in WMObject.unlock - Datei wird wieder gelöscht - Error: '" & Err.Description & "'") + WMObject.Unlock() + Delete_WDFile(oWindreamFilename) + Return False + 'MsgBox(Err.Description) + End If 'DATEI GRÖSSE ERMITTELN - MANCHMAL KOMMT ES VOR DAS DATEIGRÖße 0 ist Dim info2 As New FileInfo(oFileName) Dim length1 As Long = info2.Length @@ -669,18 +649,18 @@ Public Class ClassWindream LOGGER.Info("Error Number: [{0}]", Err.Number) LOGGER.Info(" Unexpected error in Datei-Übertragen - FileLength ist 0, Übertragene Datei wurde gelöscht") Return False - End If - Else - LOGGER.Info(" Could not create a WMObject for file:'" & oWindreamFilename) - If Not Err() Is Nothing Then - If Not Err.Description Is Nothing Then - LOGGER.Info(Err.Description) - End If - End If - Return False End If Else - LOGGER.Info("...targetPath existiert NICHT") + LOGGER.Info(" Could not create a WMObject for file:'" & oWindreamFilename) + If Not Err() Is Nothing Then + If Not Err.Description Is Nothing Then + LOGGER.Info(Err.Description) + End If + End If + Return False + End If + Else + LOGGER.Info("...targetPath existiert NICHT") Return False End If