From 92757c55d4b78cd51c03ff1f494712d228576f26 Mon Sep 17 00:00:00 2001 From: Jonathan Jenne Date: Wed, 1 Apr 2020 13:49:55 +0200 Subject: [PATCH] fix autoindexing not replacing new placeholders, fix skipping, fix damaged datatable, correct default value of nameconvention --- Global_Indexer/ClassWindream.vb | 561 ++++++++++------------------ Global_Indexer/frmAdministration.vb | 8 +- Global_Indexer/frmIndex.vb | 157 ++++---- 3 files changed, 294 insertions(+), 432 deletions(-) diff --git a/Global_Indexer/ClassWindream.vb b/Global_Indexer/ClassWindream.vb index 5c4927e..483242e 100644 --- a/Global_Indexer/ClassWindream.vb +++ b/Global_Indexer/ClassWindream.vb @@ -18,6 +18,8 @@ Public Class ClassWindream Const VARIABLEN = 2 Const WMObjectStreamOpenModeReadWrite = 2 + Const STREAM_BinaryObject = "BinaryObject" + Public Const WMObjectVariableValueTypeUndefined = 0 Public Const WMObjectVariableValueTypeString = 1 Public Const WMObjectVariableValueTypeInteger = 2 @@ -295,69 +297,7 @@ Public Class ClassWindream End Try End Function - ''' - ''' Liefert alle Objekttypen des aktuellen Servers als Array aus Strings. - ''' - ''' Array mit allen Objekttypen als Strings - ''' - Public Function GetObjecttypesAsStrings() As String() - - Try - Dim objektTypenStr(_DocumentTypes.Count) As String - - For i As Integer = 0 To _DocumentTypes.Count - objektTypenStr(i) = _DocumentTypes.Item(i).aName - Next - - Return objektTypenStr - - Catch ex As Exception - MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Auslesen der Objekttypen als String") - Return Nothing - End Try - - End Function - Public Function GetTypeOfIndex(ByVal indexname As String) As Integer - Try - Dim oAttribute = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname) - Dim vType = oAttribute.getVariableValue("dwAttrType") - Return vType - Catch ex As Exception - Return Nothing - End Try - End Function - Public Shared Function GetSystemIndices(ByVal name As String) - Dim oObjectType As WMObject - ' den Objekttyp laden - oObjectType = _session.GetWMObjectByName(WMEntityObjectType, name) - - Dim msg As String - Dim oSystemIndexes = oObjectType.GetVariableNames(1, False) - msg = "System indices (internal column names): " & vbNewLine - For Each oSystemIndex In oSystemIndexes - msg = msg & vbNewLine & oSystemIndex - Next - MsgBox(msg) - - - End Function - Public Shared Function GetTypIndexNames(ByVal name As String) - Dim oObjectType As WMObject - ' den Objekttyp laden - oObjectType = _session.GetWMObjectByName(WMEntityObjectType, name) - - - Dim msg As String - Dim oSystemIndexes = oObjectType.GetVariableNames(2, False) - msg = "Type Indices (type Index names): " & vbNewLine - For Each oSystemIndex In oSystemIndexes - msg = msg & vbNewLine & oSystemIndex - Next - MsgBox(msg) - - - End Function ''' ''' Liefert alle Indexe eines Objekttypen. ''' @@ -406,31 +346,6 @@ Public Class ClassWindream Return Nothing End Try End Function - ''' - ''' Liefert einen Objekttyp als WMObject an Hand dessen Name. - ''' - ''' Name des Objekttyps - ''' Objekttyp als WMObject - ''' - Public Function GetObjecttypeByName(ByVal objekttypName As String) As WMObject - Try - ' alle Objekttypen auslesen - Dim oObjectTypes As WMObjects = _session.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument) - - ' alle Objekttypen durchlaufen und nach dem mit dem angegebenen Namen suchen - For Each oObjectType As WMObject In oObjectTypes - If oObjectType.aName = objekttypName Then - Return oObjectType - End If - Next - - Return Nothing - - Catch ex As Exception - MsgBox("Es konnte ein Objekttyp nicht erstellt werden." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Exclamation, "Objekttyp konnte nicht erstellt werden") - Return Nothing - End Try - End Function ''' ''' Überprüft ob der angegebene Index im Objekttyp existiert @@ -490,186 +405,135 @@ Public Class ClassWindream Return "" End Function +#End Region + Public Shared Function Stream_File(ByVal SourceFilePath As String, ByVal NewFileName As String) + _currentWMObject = Nothing - ''' - ''' Liefert das Windream-Laufwerk des windream-Servers, in Form '[Laufwerksbuchstabe]:'. (z.B. 'W:') - ''' - ''' Laufwerksbuchstabe mit Doppelpunkt als String - ''' - 'Public Function GetWindreamDriveLetter() As String - - ' Try - ' Dim oControl As AISCONTROLDATACOMLib.AISControlData - ' Dim sDrive As String = "" - - ' oControl = New AISCONTROLDATACOMLib.AISControlData - - ' sDrive = oControl.GetStringValue(&H10040003) - - ' Return sDrive & ":" - - ' Catch ex As Exception - ' MsgBox("Fehlernachricht: " & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Auslesen des windream-Laufwerks") - ' End Try - - ' Return "" - 'End Function + Dim oWindreamFilename As String = NewFileName + Dim oFileName As String = NewFileName - ''' - ''' Liefert den Typen eines Indexes als Integer. - ''' - ''' Name des zu überprüfenden Indexfeldes - ''' Liefert eine Zahl, die einen Typen beschreibt - ''' + 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 - Public Function GetValuesfromAuswahlliste(ByVal _auswahlliste As String) As Object - Try - 'Dim oAttribute = Me.oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname) - 'Dim vType = oAttribute.getVariableValue("vItems") - 'Return vType - Dim oChoiceList = _session.GetWMObjectByName(WMEntityChoiceList, _auswahlliste) - If Err.Number = 0 And TypeName(oChoiceList) <> "Nothing" Then - Dim Values = oChoiceList - Values = oChoiceList.GetVariableValue("vItems") - Dim anz As Integer = 0 - - For Each CLItem In Values - If oChoiceList.aName IsNot Nothing Then - anz += 1 - End If - Next - Dim strListe(anz - 1) - Dim zahl As Integer = 0 - For Each CLItem In Values - If oChoiceList.aName IsNot Nothing Then - strListe(zahl) = CLItem - zahl += 1 - End If - Next - Return strListe - Else - MsgBox("Auswahlliste: " & _auswahlliste & " nicht gefunden!", MsgBoxStyle.Critical, "Fehler:") - Return Nothing - End If + Dim oSourceFilename As String = Path.GetFileName(SourceFilePath) + Dim oDestination As String = Path.GetDirectoryName(oFileName) - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler in GetValuesfromAuswahlliste:") - Return Nothing - End Try - End Function -#End Region - Public Shared Function Stream_File(ByVal SourceFilePath As String, ByVal NewFileName As String) - On Error Resume Next - _currentWMObject = Nothing - Dim oDestination As String = Path.GetDirectoryName(NewFileName) If My.Computer.FileSystem.DirectoryExists(oDestination) = False Then My.Computer.FileSystem.CreateDirectory(oDestination) LOGGER.Info(" - Zielverzeichnis neu erzeugt!") End If - Const STREAM_BinaryObject = "BinaryObject" - LOGGER.Info(" ...Stream_File wurde gestartet") - Dim oWindreamFilename As String = "" + ' Objekt für Datei und Zielverzeichnis anlegen - Dim oSourceFilename As String = Path.GetFileName(SourceFilePath) + LOGGER.Info(" ...Quelldatei gelesen") - '"Version-KZ entfernen - NewFileName = NewFileName.Replace("\\", "\") - oWindreamFilename = NewFileName.Substring(2) - If oWindreamFilename.Contains("[%Version]") Then - oWindreamFilename = oWindreamFilename.Replace("[%Version]", "") - NewFileName = oWindreamFilename - End If + + '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 - Dim oDriveInfo As New DriveInfo(vWLaufwerk & ":") - Dim oFreeSpace = oDriveInfo.TotalFreeSpace Dim oFileInfo As New FileInfo(SourceFilePath) - ' Get length of the file. Dim oFileLength As Long = oFileInfo.Length - 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 + 'If vWLaufwerk.Count = 1 Then + ' Dim oDriveInfo As New DriveInfo(vWLaufwerk & ":") + ' Dim oFreeSpace = oDriveInfo.TotalFreeSpace - 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 & "'") + ' 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 - 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") + 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 + wmbrwsr = CreateObject("WMOBrws.ServerBrowser") + '================================================================== + ' get the current DMS-server to log in + '================================================================== + dmsServer = wmbrwsr.GetCurrentServer '================================================================== - ' create an object + ' create a session '================================================================== - 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) + 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 - ' 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") + _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") + + '================================================================== + ' 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" @@ -696,141 +560,126 @@ Public Class ClassWindream End If End Select - 'If CURRENT_DOKART_DUPLICATE_HANDLING = "Default" Or CURRENT_DOKART_DUPLICATE_HANDLING = "Question" Then - ' ''########## - ' Dim msg = String.Format("Eine Datei mit identischem Namen " & vbNewLine & "'{0}'" & vbNewLine & "existiert bereits!" & vbNewLine & "Wollen Sie die bestehende Datei ersetzen?", newfilename) - ' If USER_LANGUAGE <> "de-DE" Then - ' msg = "There is already a file with the same name! Would You like to replace the file?" - ' End If - ' Dim result As MsgBoxResult - ' result = MessageBox.Show(msg, "File alredy exists:", MessageBoxButtons.YesNo, MessageBoxIcon.Question) - ' If result = MsgBoxResult.No Then - ' windreamFilename = ClassFilehandle.Versionierung_Datei(newfilename).ToString.Substring(2) - ' Else - ' If Delete_WDFile(windreamFilename) = False Then - ' Return False - ' End If - ' End If - 'ElseIf CURRENT_DOKART_DUPLICATE_HANDLING = "New version" Then - ' windreamFilename = ClassFilehandle.Versionierung_Datei(newfilename).ToString.Substring(2) - 'End If - 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) + 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") End If - LOGGER.Info(" ...WMObject zugewiesen") - End If - LOGGER.Info(" ...ENDGÜLTIGER DATEINAME => " & oWindreamFilename) - If WMObject IsNot Nothing Then - NewFileName = vWLaufwerk & ":" & oWindreamFilename + 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(NewFileName) + Dim info2 As New FileInfo(oFileName) Dim length1 As Long = info2.Length LOGGER.Info(" ...Length der Zieldatei: " & length1.ToString) If oFileLength > 0 And Err.Number = 0 Then - Dim p As String - If oWindreamFilename.StartsWith("\") Then - If oWindreamFilename.StartsWith("\\") Then - p = oWindreamFilename.Replace("\\", "\") - Else - p = oWindreamFilename - End If - Else - p = "\" & oWindreamFilename - End If - CURRENT_NEWFILENAME = vWLaufwerk & ":" & p + + 'Dim p As String + 'If oWindreamFilename.StartsWith("\") Then + ' If oWindreamFilename.StartsWith("\\") Then + ' p = oWindreamFilename.Replace("\\", "\") + ' Else + ' p = oWindreamFilename + ' End If + 'Else + ' p = "\" & oWindreamFilename + 'End If + 'CURRENT_NEWFILENAME = vWLaufwerk & ":" & p + + CURRENT_NEWFILENAME = oFileName + LOGGER.Info(" >> Datei '" & CURRENT_NEWFILENAME & "' wurde erfolgreich importiert!") _currentWMObject = WMObject Return True Else Delete_WDFile(oWindreamFilename) - Console.WriteLine(Err.Number.ToString) + 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 + 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 - Return False - End If - Else - LOGGER.Info("...targetPath existiert NICHT") + Else + LOGGER.Info("...targetPath existiert NICHT") Return False End If diff --git a/Global_Indexer/frmAdministration.vb b/Global_Indexer/frmAdministration.vb index adc9a10..1cd513b 100644 --- a/Global_Indexer/frmAdministration.vb +++ b/Global_Indexer/frmAdministration.vb @@ -272,7 +272,7 @@ Public Class frmAdministration MyDataset.TBDD_DOKUMENTART.ERSTELLTWERColumn.DefaultValue = Environment.UserName MyDataset.TBDD_DOKUMENTART.OBJEKTTYPColumn.DefaultValue = "" - MyDataset.TBDD_DOKUMENTART.NAMENKONVENTIONColumn.DefaultValue = "[%vOFilename]-[%vYY_MM_DD]-[%Version]" + MyDataset.TBDD_DOKUMENTART.NAMENKONVENTIONColumn.DefaultValue = "[%vOFilename]-[%vYY_MM_DD]" MyDataset.TBDD_DOKUMENTART.DUPLICATE_HANDLINGColumn.DefaultValue = "New version" IsInsert = True End Sub @@ -674,9 +674,9 @@ Public Class frmAdministration lbFileparameter.Visible = True btnAddWindowsVariable.Visible = True End If - If IsInsert = False Then - Save_IndexAuto() - End If + 'If IsInsert = False Then + ' Save_IndexAuto() + 'End If End If End Sub diff --git a/Global_Indexer/frmIndex.vb b/Global_Indexer/frmIndex.vb index c061d05..cba2dfe 100644 --- a/Global_Indexer/frmIndex.vb +++ b/Global_Indexer/frmIndex.vb @@ -28,6 +28,8 @@ Public Class frmIndex Private NewFileString As String Private CancelAttempts As Integer = 0 + Private Const MaxCancelAttempts = 2 + Private Property ViewerString As String #End Region @@ -234,7 +236,7 @@ Public Class frmIndex End Try End Function - Function GetAutomaticIndexSQLValue(vsqlstatement As String, vconnectionID As Integer, vProvider As String) As String + Function GetAutomaticIndexSQLValue(SQLCommand As String, vconnectionID As Integer, vProvider As String) As String Try Dim oConnectionString As String oConnectionString = ClassFormFunctions.GetConnectionString(vconnectionID) @@ -243,9 +245,9 @@ Public Class frmIndex Dim oErgebnis 'Welcher Provider? If vProvider.ToLower = "oracle" Then - oErgebnis = ClassDatabase.OracleExecute_Scalar(vsqlstatement, oConnectionString) + oErgebnis = ClassDatabase.OracleExecute_Scalar(SQLCommand, oConnectionString) Else 'im Moment nur SQL-Server - oErgebnis = ClassDatabase.Execute_Scalar(vsqlstatement, oConnectionString) + oErgebnis = ClassDatabase.Execute_Scalar(SQLCommand, oConnectionString) End If If LogErrorsOnly = False Then @@ -768,8 +770,6 @@ Public Class frmIndex Return False End If End If - - Catch ex As Exception LOGGER.Info("Unvorhergesehener Unexpected error in Write_Indizes - Fehler: " & vbNewLine & ex.Message) LOGGER.Error(ex.Message) @@ -1356,88 +1356,97 @@ Public Class frmIndex 'TODO: Load License from DB DocumentViewer1.Init(LOGCONFIG, VIEWER_LICENSE) - CURRENT_DROPTYPE = DropType.Replace("|", "") - If DropType = "|DROPFROMFSYSTEM|" Then - checkItemDeleteSource.Enabled = True - checkItemDeleteSource.Checked = CURR_DELETE_ORIGIN + If DropType Is Nothing Then + LOGGER.Warn("File with Id [{0}] was not found in TBGI_FILES_USER. Exiting.") + CancelAttempts = MaxCancelAttempts + Close() + Else + CURRENT_DROPTYPE = DropType.Replace("|", "") - 'chkdelete_origin.Visible = True - 'chkdelete_origin.Checked = CURR_DELETE_ORIGIN - If USER_LANGUAGE <> "de-DE" Then - Me.Text = "Indexing of dropped file" - Else - Me.Text = "Indexierung der gedroppten Datei" - End If - ElseIf DropType = "|OUTLOOK_MESSAGE|" Or DropType = "|FW_MSGONLY|" Then - Select Case DropType - Case "|FW_MSGONLY|" - LOGGER.Info(" >> .msg-file from folderwatch") - If USER_LANGUAGE <> "de-DE" Then - Me.Text = "Indexing of msg-File (without Attachments) - from Folderwatch" - Else - Me.Text = "Indexierung der msg-Datei (ohne Anhang) - aus Folderwatch" - End If - Case "|OUTLOOK_MESSAGE|" - LOGGER.Info(" >> .msg-file through dragdrop") - If USER_LANGUAGE <> "de-DE" Then - Me.Text = "Indexing of msg-File (without Attachments)" - Else - Me.Text = "Indexierung der msg-Datei (ohne Anhang)" - End If - End Select + If DropType = "|DROPFROMFSYSTEM|" Then + checkItemDeleteSource.Enabled = True + checkItemDeleteSource.Checked = CURR_DELETE_ORIGIN - ElseIf DropType = "|MSGONLY|" Then - If USER_LANGUAGE = "de-DE" Then - Me.Text = "Indexierung der msg-Datei (ohne Anhang)" - Else - Me.Text = "Indexing of msg-File (without Attachments)" - End If - ElseIf DropType = "|ATTMNTEXTRACTED|" Or DropType = "|OUTLOOK_ATTACHMENT|" Then - CURRENT_ISATTACHMENT = True + 'chkdelete_origin.Visible = True + 'chkdelete_origin.Checked = CURR_DELETE_ORIGIN + If USER_LANGUAGE <> "de-DE" Then + Me.Text = "Indexing of dropped file" + Else + Me.Text = "Indexierung der gedroppten Datei" + End If + ElseIf DropType = "|OUTLOOK_MESSAGE|" Or DropType = "|FW_MSGONLY|" Then + Select Case DropType + Case "|FW_MSGONLY|" + LOGGER.Info(" >> .msg-file from folderwatch") + If USER_LANGUAGE <> "de-DE" Then + Me.Text = "Indexing of msg-File (without Attachments) - from Folderwatch" + Else + Me.Text = "Indexierung der msg-Datei (ohne Anhang) - aus Folderwatch" + End If + Case "|OUTLOOK_MESSAGE|" + LOGGER.Info(" >> .msg-file through dragdrop") + If USER_LANGUAGE <> "de-DE" Then + Me.Text = "Indexing of msg-File (without Attachments)" + Else + Me.Text = "Indexierung der msg-Datei (ohne Anhang)" + End If + End Select - If USER_LANGUAGE = "de-DE" Then - Me.Text = "Indexierung eines Email-Attachments" - Else - Me.Text = "Indexing of email-Attachment" - End If - ElseIf DropType = "|FW_SIMPLEINDEXER|" Then + ElseIf DropType = "|MSGONLY|" Then + If USER_LANGUAGE = "de-DE" Then + Me.Text = "Indexierung der msg-Datei (ohne Anhang)" + Else + Me.Text = "Indexing of msg-File (without Attachments)" + End If + ElseIf DropType = "|ATTMNTEXTRACTED|" Or DropType = "|OUTLOOK_ATTACHMENT|" Then + CURRENT_ISATTACHMENT = True - If USER_LANGUAGE = "de-DE" Then - Me.Text = "Indexierung einer Folderwatch-Datei" - Else - Me.Text = "Indexing of Folderwatch-File" + If USER_LANGUAGE = "de-DE" Then + Me.Text = "Indexierung eines Email-Attachments" + Else + Me.Text = "Indexing of email-Attachment" + End If + ElseIf DropType = "|FW_SIMPLEINDEXER|" Then + + If USER_LANGUAGE = "de-DE" Then + Me.Text = "Indexierung einer Folderwatch-Datei" + Else + Me.Text = "Indexing of Folderwatch-File" + End If End If - End If - BarCheckItem1.Checked = TopMost + BarCheckItem1.Checked = TopMost - labelFilePath.Caption = CURRENT_WORKFILE + labelFilePath.Caption = CURRENT_WORKFILE - ClassWindowLocation.LoadFormLocationSize(Me) + ClassWindowLocation.LoadFormLocationSize(Me) - SetFilePreview(CONFIG.Config.FilePreview) + SetFilePreview(CONFIG.Config.FilePreview) - SplitContainer1.SplitterDistance = CONFIG.Config.SplitterDistanceViewer + SplitContainer1.SplitterDistance = CONFIG.Config.SplitterDistanceViewer - Load_String() - MULTIFILES = ClassDatabase.Execute_Scalar("SELECT COUNT(*) FROM TBGI_FILES_USER WHERE WORKED = 0 AND GUID <> " & CURRENT_WORKFILE_GUID & " AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')", MyConnectionString, True) - MULTIINDEXING_ACTIVE = False - If MULTIFILES > 0 Then - If USER_LANGUAGE = "de-DE" Then - checkMultiindex.Text = "Multi-Indexing - Alle nachfolgenden Dateien (" & MULTIFILES & ") identisch indexieren" - Else - checkMultiindex.Text = "Multi-Indexing - All following files (" & MULTIFILES & ") will be indexed identically" - End If + Load_String() + MULTIFILES = ClassDatabase.Execute_Scalar("SELECT COUNT(*) FROM TBGI_FILES_USER WHERE WORKED = 0 AND GUID <> " & CURRENT_WORKFILE_GUID & " AND UPPER(USER@WORK) = UPPER('" & Environment.UserName & "')", MyConnectionString, True) + MULTIINDEXING_ACTIVE = False + If MULTIFILES > 0 Then + If USER_LANGUAGE = "de-DE" Then + checkMultiindex.Text = "Multi-Indexing - Alle nachfolgenden Dateien (" & MULTIFILES & ") identisch indexieren" + Else + checkMultiindex.Text = "Multi-Indexing - All following files (" & MULTIFILES & ") will be indexed identically" + End If - checkMultiindex.Checked = False - checkMultiindex.Visible = True + checkMultiindex.Checked = False + checkMultiindex.Visible = True - BarButtonItem1.Visibility = DevExpress.XtraBars.BarItemVisibility.Always - Else - checkMultiindex.Visible = False + BarButtonItem1.Visibility = DevExpress.XtraBars.BarItemVisibility.Always + Else + checkMultiindex.Visible = False - BarButtonItem1.Visibility = DevExpress.XtraBars.BarItemVisibility.Never + BarButtonItem1.Visibility = DevExpress.XtraBars.BarItemVisibility.Never + End If End If + + Catch ex As Exception LOGGER.Info(" - Unexpected error in Öffnen des Formulares - Fehler: " & vbNewLine & ex.Message) LOGGER.Error(ex.Message) @@ -1785,6 +1794,10 @@ Public Class frmIndex LOGGER.Info(" oSqlResult afrer first Replace: " & oSqlResult) End If + 'TODO: Replace Windream Patterns? + oSqlResult = ClassPatterns.ReplaceControlValues(oSqlResult, pnlIndex) + oSqlResult = ClassPatterns.ReplaceInternalValues(oSqlResult) + ' Ergebnis: Es wurden alle einfachen Platzhalter ersetzt, jetzt haben wir einen SQL Befehl, ' der nur noch vektorfelder-platzhalter enthält