diff --git a/Global_Indexer/ClassWindream.vb b/Global_Indexer/ClassWindream.vb
new file mode 100644
index 0000000..f2c220a
--- /dev/null
+++ b/Global_Indexer/ClassWindream.vb
@@ -0,0 +1,1775 @@
+
+Imports WINDREAMLib
+Imports WINDREAMLib.WMCOMEvent
+Imports WINDREAMLib.WMEntity
+Imports WINDREAMLib.WMObjectEditMode
+Imports WINDREAMLib.WMSearchOperator
+Imports WINDREAMLib.WMSearchRelation
+Imports WMOBRWSLib
+Imports WMOSRCHLib
+Imports System.IO
+Imports System.Text.RegularExpressions
+
+Public Class ClassWindream
+
+#Region "+++++ Konstanten +++++"
+ Const DEBUG = AUS
+ Const AUS = 0
+ Const WINDREAM = 1
+ Const VARIABLEN = 2
+ Const WMObjectStreamOpenModeReadWrite = 2
+
+ Const STREAM_BinaryObject = "BinaryObject"
+
+ Public Const WMObjectVariableValueTypeUndefined = 0
+ Public Const WMObjectVariableValueTypeString = 1
+ Public Const WMObjectVariableValueTypeInteger = 2
+ Public Const WMObjectVariableValueTypeFloat = 3
+ Public Const WMObjectVariableValueTypeBoolean = 4
+ Public Const WMObjectVariableValueTypeDate = 5
+ Public Const WMObjectVariableValueTypeFixedPoint = 6
+ Public Const WMObjectVariableValueTypeTimeStamp = 7
+ Public Const WMObjectVariableValueTypeCurrency = 8
+ Public Const WMObjectVariableValueTypeTime = 9
+ Public Const WMObjectVariableValueTypeVariant = 10
+ Public Const WMObjectVariableValueTypeMask = &HFFF
+ Public Const WMObjectVariableValueFlagMask = &HFFFFF000
+ Public Const WMObjectVariableValueTypeVector = &H1000
+ Public Const WMObjectVariableValueTypeFulltext = &H2000
+ Public Const WMObjectVariableValueTypeDefaultValue = &H4000
+#End Region
+
+#Region "+++++ Variablen +++++"
+ Public Shared oConnect ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht)
+ Public Shared _session 'As WINDREAMLib.WMSession ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht)
+ Public Shared oBrowser As New WMOBRWSLib.ServerBrowser
+ Public Shared _DocumentTypes As WINDREAMLib.WMObjects
+ Private _SearchController As New WMOSearchController
+ Public Shared _WDObjekttyp As String
+ Private Shared _currentWMObject As WINDREAMLib.WMObject
+#End Region
+
+
+#Region "+++++ Allgemeine Methoden und Funktionen +++++"
+
+ '''
+ ''' Konstruktor für die windream-Klasse
+ '''
+ '''
+ Sub New()
+ ' wenn ein Unexpected error in der Initialisierung auftrat
+ If Not ClassWindream.Init() Then
+ ' Nachricht ausgeben
+ MsgBox("Es trat ein Unexpected error in der Initialisierung der Klasse windream auf. Bitte prüfen Sie ob der windream-Server aktiv ist und alle Dienste gestartet sind.", MsgBoxStyle.Exclamation, "Unexpected error in Initialisierung")
+
+ ' das Programm "abschießen"
+ Process.GetCurrentProcess.Kill()
+ End If
+ End Sub
+ Public Function GetSearchDocuments(ByVal wdfLocation As String)
+
+ If System.IO.File.Exists(wdfLocation) Then
+
+ Try
+ Dim ProfileName = wdfLocation.Substring(wdfLocation.LastIndexOf("\") + 1)
+ Dim ProfilePath = wdfLocation.Substring(0, wdfLocation.Length - ProfileName.Length)
+
+ _SearchController = New WMOSearchController
+
+ Me._SearchController.CheckSearchProfile(wdfLocation.ToLower)
+ Dim suchTyp = Me._SearchController.SearchProfileTargetProgID
+ Dim ExSettings As Object
+ Dim oSearch As Object
+ ExSettings = Me._SearchController.SearchProfileExSettings
+ If ExSettings = 0 Then ExSettings = 7
+
+ Dim srchQuick As WMOSRCHLib.WMQuickSearch = CreateObject("WMOSrch.WMQuickSearch")
+ Dim srchIndex As WMOSRCHLib.WMIndexSearch = CreateObject("WMOSrch.WMIndexSearch")
+ Dim srchObjectType As WMOSRCHLib.WMObjectTypeSearch = CreateObject("WMOSrch.WMObjectTypeSearch")
+
+ '' Der öffentliche Member CheckSearchProfile für den Typ IWMQuickSearch7 wurde nicht gefunden. [Microsoft.VisualBasic] => GetSearchDocuments()
+ Select Case suchTyp.ToString.ToUpper
+ Case "WMOSRCH.WMQUICKSEARCH"
+ srchQuick.WMSession = CreateObject("Windream.WMSession", Me.GetCurrentServer)
+
+ Me.oConnect.LoginSession(srchQuick.WMSession)
+
+ srchQuick.ClearSearch()
+ srchQuick.SearchProfilePath = ProfilePath
+ srchQuick.LoadSearchProfile(ProfileName)
+
+ oSearch = srchQuick.GetSearch()
+
+ Case "WMOSRCH.WMINDEXSEARCH"
+ srchIndex.WMSession = CreateObject("Windream.WMSession", Me.GetCurrentServer)
+
+ Me.oConnect.LoginSession(srchIndex.WMSession)
+
+ srchIndex.ClearSearch()
+ srchIndex.SearchProfilePath = ProfilePath
+ srchIndex.LoadSearchProfile(ProfileName)
+
+ oSearch = srchIndex.GetSearch()
+
+ Case "WMOSRCH.WMOBJECTTYPESEARCH"
+ srchObjectType.WMSession = CreateObject("Windream.WMSession", Me.GetCurrentServer)
+
+ Me.oConnect.LoginSession(srchObjectType.WMSession)
+
+ srchObjectType.ClearSearch()
+ srchObjectType.SearchProfilePath = ProfilePath
+ srchObjectType.LoadSearchProfile(ProfileName)
+
+ oSearch = srchObjectType.GetSearch()
+
+ Case Else
+ MsgBox("KEIN GÜLTIGER WINDREAM-SUCHTYP")
+ Return Nothing
+ End Select
+ Dim WMObjects As Object
+ WMObjects = oSearch.Execute
+ Return oSearch.execute
+
+ Catch ex As Exception
+ ' bei einem Fehler einen Eintrag in der Logdatei machen
+ MsgBox("Fehler in GetSearchDocuments: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
+ Return Nothing
+ End Try
+
+ End If
+
+ Return Nothing
+
+ End Function
+ Public Function GetSearchDocuments_Objekttype(ByVal wdfLocation As String)
+
+ If System.IO.File.Exists(wdfLocation) Then
+
+ Try
+ Dim ProfileName = wdfLocation.Substring(wdfLocation.LastIndexOf("\") + 1)
+ Dim ProfilePath = wdfLocation.Substring(0, wdfLocation.Length - ProfileName.Length)
+
+
+
+ ' Me.oController.CheckSearchProfile(wdfLocation.ToLower)
+ ' Dim suchTyp = Me.oController.SearchProfileTargetProgID
+ 'Dim ExSettings As Object
+ Dim oSearch As Object
+ 'ExSettings = Me.oController.SearchProfileExSettings
+ 'If ExSettings = 0 Then ExSettings = 7
+
+ Dim srchObjectType As WMOSRCHLib.WMObjectTypeSearch = CreateObject("WMOSrch.WMObjectTypeSearch")
+
+ '' Der öffentliche Member CheckSearchProfile für den Typ IWMQuickSearch7 wurde nicht gefunden. [Microsoft.VisualBasic] => GetSearchDocuments()
+
+ srchObjectType.WMSession = CreateObject("Windream.WMSession", Me.GetCurrentServer)
+
+ Me.oConnect.LoginSession(srchObjectType.WMSession)
+
+ srchObjectType.ClearSearch()
+ srchObjectType.SearchProfilePath = ProfilePath
+ srchObjectType.LoadSearchProfile(ProfileName)
+
+ oSearch = srchObjectType.GetSearch()
+
+
+ Dim WMObjects As Object
+ WMObjects = oSearch.Execute
+ Return oSearch.execute
+
+ Catch ex As Exception
+ ' bei einem Fehler einen Eintrag in der Logdatei machen
+ MsgBox("Fehler in GetSearchDocuments()" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
+ Return Nothing
+ End Try
+
+ End If
+
+ Return Nothing
+
+ End Function
+
+ '''
+ ''' Initialisiert die statische Klasse (Login, Session starten, usw.)
+ '''
+ ''' Liefert True wenn das Anmelden erfolgreich war, sonst False
+ '''
+ Public Shared Function Init() As Boolean
+ Try
+ Try
+ ' Session-Objekt instanziieren und mit dem im Client ausgewählten Server belegen
+ _session = CreateObject("Windream.WMSession", GetCurrentServer)
+ LOGGER.Info(" ...windream-Server: '" & GetCurrentServer() & "'")
+ ' Connection-Objekt instanziieren
+ oConnect = CreateObject("Windream.WMConnect")
+ 'MsgBox("windrem init 'ed")
+ Catch ex As Exception
+ LOGGER.Info("Windream konnte nicht initiiert werden: " & ex.Message)
+ LOGGER.Error(ex.Message)
+ Return False
+ End Try
+
+
+ ' wenn windream nicht angemeldet ist
+ If Not IsLoggedIn() Then
+
+ ' Art der Anmeldung an windream festlegen
+ ' 0x0L (also 0) = Standard windream Benutzer
+ ' WM_ODULE_ID_DOCTYPEEDITOR_LIC = ermöglicht Zugriff auf die windream Management Funktionen (Z.B. zur Verwaltung der windream Dokumententypen, Auswahllisten, etc.)
+ ' WM_MODULE_ID_INDEXSERVICE = ermöglicht der Session die Indexierungs-Events vom windream DMS-Service zu empfangen
+ oConnect.ModuleID = 0
+
+ ' setzt die minimal erwartete windream-Version
+ oConnect.MinReqVersion = "4"
+
+ ' -- Impersonifizierung nur möglich mit registry-eintrag --
+ ' oConnect.UserName "\schulung\windream"
+ ' oConnect.Password "windream"
+
+ ' Verbindung mit Session-Objekt (und dem ausgewählten Server) aufbauen
+ oConnect.LoginSession(_session)
+ If _session.aLoggedin = False Then
+ MsgBox("Es konnte keine Verbindung mit dem windream-Server hergestellt werden", MsgBoxStyle.Exclamation, "Verbindung konnte nicht hergestellt werden")
+ Return False
+ End If
+
+ 'If My.Settings.vDetailLog Then
+ ' LOGGER.Info(" >> windream-Version: '" & oSession.GetSystemInfo("WindreamVersion") & "'")
+ 'End If
+
+ ' AUSGABE VON SYSTEMINFORMATIONEN
+ ' Gibt die Versionsart (Lizenztyp) also Small-Business-Edition (SBE), Small-Business-Extension (SBX)
+ ' oder Business-Edition (BE) aus
+ 'MsgBox("WindreamVersion: " & oSession.GetSystemInfo("WindreamVersion") & vbNewLine & "LicenceKey: " & oSession.GetSystemInfo("LicenceKey") & vbNewLine & _
+ ' vbNewLine & "LicenceName: " & oSession.GetSystemInfo("LicenceName"))
+
+ 'Dim WMCtrl As AISCONTROLDATACOMLib.AISControlData
+ 'WMCtrl = New AISCONTROLDATACOMLib.AISControlData
+
+ '' liefert die Versionsnummer des Clients
+
+ 'MsgBox(WMCtrl.WMWorkstationBuildNo)
+ 'MsgBox(WMCtrl.W
+ '' liefert den Servernamen des angemeldeten windreams
+ 'MsgBox(WMCtrl.WMServerName)
+
+ Try
+ _session.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
+ ' der Parameter WMEntityDocument definiert, dass nur Dokumenttypen und keine
+ ' Ordnertypen ausgelesen werden
+ _DocumentTypes = _session.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument)
+ Catch ex As Exception
+ Return False
+ End Try
+
+ End If
+
+ Return True
+
+ Catch ex As Exception
+ If Err.Number = -2147220985 Then
+ MsgBox("Die installierte windream-Version ist nicht ausreichend für den Betrieb der Tool Collection für windream." & vbNewLine &
+ "Bitte kontaktieren Sie Digital Data." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & Err.Description, MsgBoxStyle.Exclamation, "Unzureichende windream-Version")
+ Else
+ MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Login an windream")
+ End If
+ Return False
+ End Try
+
+ End Function
+
+#End Region
+
+
+
+#Region "+++++ Funktionen die für den Objekttyp relevate Informationen zurückliefern +++++"
+
+ '''
+ ''' Liefert alle Objekttypen des aktuellen Servers als windream-Objekte.
+ '''
+ ''' Alle Objekttypen als WMObjects-Objekt
+ '''
+ Public Shared Function GetObjecttypesAsObjects() As WMObjects
+ Try
+ Return _DocumentTypes
+ Catch ex As Exception
+ MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Auslesen der Objekttypen")
+ Return Nothing
+ End Try
+ End Function
+
+
+ '''
+ ''' Liefert alle Indexe eines Objekttypen.
+ '''
+ ''' Name des Objekttyps
+ ''' Array mit allen Objekttyp zugeordneten Indexen als String
+ '''
+ Public Shared Function GetIndicesByObjecttype(ByVal Objecttype_name As String) As String()
+ Try
+ Dim oObjectType As WMObject
+ Dim oIndexAttributes As WMObjectRelation
+ Dim oIndexAttribute As WMObject
+ Dim oIndex As WMObject
+ Dim oRelProperties As WMObjectRelationClass
+
+ ' den Objekttyp laden
+ oObjectType = _session.GetWMObjectByName(WMEntityObjectType, Objecttype_name)
+
+ ' Beziehung zu Indizes des Objekttyp auslesen
+ oIndexAttributes = oObjectType.GetWMObjectRelationByName("TypeAttributes")
+
+ ' Array für Indizes vorbereiten
+ Dim aIndexNames(oIndexAttributes.Count - 1) As String
+
+ ' alle Indizes durchlaufen
+ For j As Integer = 0 To oIndexAttributes.Count - 1
+
+ ' aktuellen Index auslesen
+ oIndexAttribute = oIndexAttributes.Item(j)
+
+ ' Eigenschaften des Index auslesen
+ oRelProperties = oIndexAttribute.GetWMObjectRelationByName("Attribute")
+
+ ' Index aus den Eigenschaften auslesen
+ oIndex = oRelProperties.Item(0)
+ 'Dim o = oRelProperties.Item(2)
+ ' Indexname speichern
+ aIndexNames(j) = oIndex.aName
+ Next
+ 'Indexarray sortiert zurückgeben
+ Array.Sort(aIndexNames)
+ ' Indexarray zurückgeben
+ Return aIndexNames
+
+ Catch ex As Exception
+ MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Auslesen der windream-Indexe")
+ Return Nothing
+ End Try
+ End Function
+
+ '''
+ ''' Überprüft ob der angegebene Index im Objekttyp existiert
+ '''
+ ''' Name des zu durchsuchenden Objekttyps
+ ''' Name des zu suchenden Indexes
+ ''' Liefert True wenn der Index im Objekttyp existiert, sonst False
+ '''
+ Public Shared Function ExistIndexInObjekttyp(ByVal objekttyp As String, ByVal indexname As String) As Boolean
+ Try
+ Dim indexnamen() As String = GetIndicesByObjecttype(objekttyp)
+
+ If indexnamen Is Nothing Then Return False
+
+ Return indexnamen.Contains(indexname)
+ Catch ex As Exception
+ MsgBox("Beim Prüfen ob ein Index für einen Objekttypen existiert, ist ein Fehler aufgetreten." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Prüfen auf Existenz eines Index in einem Objekttyp")
+ End Try
+
+ Return False
+
+ End Function
+
+#End Region
+
+
+
+#Region "+++++ Allgemeine Funktionen die Informationen zurückliefern +++++"
+
+ '''
+ ''' Liefert True wenn die windream-Session angemeldet ist und False für den Fall, dass die Session nicht eingeloggt ist.
+ '''
+ ''' Anmeldestatus als Boolean
+ '''
+ Public Shared Function IsLoggedIn() As Boolean
+ Try
+ Return _session.aLoggedin
+ Catch ex As Exception
+ MsgBox("Es konnte nicht erfolgreich geprüft werden, ob das Programm am windream-Server angemeldted ist." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error in Loggedin-Prüfung")
+ End Try
+
+ Return False
+ End Function
+
+ '''
+ ''' Liefert den Servernamen an dem windream aktuell angemeldet ist.
+ '''
+ ''' Servername als String
+ '''
+ Public Shared Function GetCurrentServer() As String
+ Try
+ Return oBrowser.GetCurrentServer 'ClassWindream.oBrowser.GetCurrentServer
+ Catch ex As Exception
+ MsgBox("Der aktuell gewählte windream-Server konnte nicht ausgelesen werden." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Auslesen des windream-Servers")
+ End Try
+
+ Return ""
+ End Function
+
+#End Region
+ Public Shared Function Stream_File(ByVal SourceFilePath As String, ByVal NewFileName As String)
+ _currentWMObject = Nothing
+
+ Dim oWindreamFilename As String = NewFileName
+ Dim oFileName As String = NewFileName
+ Dim oWDriveRegex As New Regex("^\w{1}:")
+
+ 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)
+
+ If My.Computer.FileSystem.DirectoryExists(oDestination) = False Then
+ My.Computer.FileSystem.CreateDirectory(oDestination)
+ LOGGER.Info(" - Zielverzeichnis neu erzeugt!")
+ End If
+
+ LOGGER.Info(" ...Stream_File wurde gestartet")
+
+ ' Objekt für Datei und Zielverzeichnis anlegen
+
+
+ LOGGER.Info(" ...Quelldatei gelesen")
+
+ If My.Computer.FileSystem.DirectoryExists(oDestination) Then
+ LOGGER.Info(" ...targetPath existiert")
+ ' Überprüfen ob der zu Kopieren notwendige Speicherplatz auf Ziellaufwerk vorhanden ist
+
+ Dim oFileInfo As New FileInfo(SourceFilePath)
+ Dim oFileLength As Long = oFileInfo.Length
+
+
+ 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
+
+ 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")
+
+ '==================================================================
+ ' 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)
+ CURRENT_NEWFILENAME = oWindreamFilename
+ Case "Question"
+ Dim oMessage = $"Eine Datei mit identischem Namen {vbNewLine}'{NewFileName}'{vbNewLine}existiert bereits!{vbNewLine}Wollen Sie die bestehende Datei ersetzen?"
+ If USER_LANGUAGE <> "de-DE" Then
+ oMessage = $"There is already a file with the name {NewFileName}!{vbNewLine}Would You like to replace the file?"
+ End If
+
+ Dim oResult = MessageBox.Show(oMessage, "File exists", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
+
+ If oResult = DialogResult.No Then
+ oWindreamFilename = ClassFilehandle.Versionierung_Datei(NewFileName).ToString.Substring(2)
+ Else
+ If Delete_WDFile(oWindreamFilename) = False Then
+ Return False
+ End If
+ End If
+ Case Else
+ If Delete_WDFile(oWindreamFilename) = False Then
+ Return False
+ End If
+ 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")
+ 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)
+
+ 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
+ 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
+
+ CURRENT_NEWFILENAME = oFileName
+
+ LOGGER.Info(" >> Datei '" & CURRENT_NEWFILENAME & "' wurde erfolgreich importiert!")
+ _currentWMObject = WMObject
+ Return True
+ Else
+ Delete_WDFile(oWindreamFilename)
+ 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")
+ Return False
+ End If
+
+ End Function
+ Public Shared Function Delete_WDFile(ByVal WD_File As String)
+ Try
+ If Not WD_File.StartsWith("\") Then
+ WD_File = WD_File.Substring(2)
+ End If
+ Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject
+ Try
+ WMObject = _session.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File) 'WINDREAMLib.WMEntity.WMEntityDocument
+ Catch ex As Exception
+ LOGGER.Info(">> Could not create WMObject for file '" & WD_File & "' - so it is not existing")
+ LOGGER.Error(ex.Message)
+ Return False
+ End Try
+
+ LOGGER.Info(" >> Deleting started - Object created")
+ WMObject.Delete()
+ Return True
+ Catch ex As Exception
+ MsgBox("Unexpected Error in Delete_WDFile: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
+ LOGGER.Info("Unexpected Error in Delete_WDFile: " & ex.Message)
+ Return False
+ End Try
+ End Function
+ '''
+ ''' Übergibt einer in windream gespeicherten Datei Indexwerte
+ '''
+ ''' Name der zu indexierenden Datei
+ ''' neuer Name der zu indexierenden Datei
+ ''' Liefert True wenn das Indexieren erfolgreich war, sonst False
+ '''
+ Public Shared Function DateiIndexieren(ByVal WD_File As String, ByVal _Indexname As String, ByVal _Value As String)
+ Try
+
+ LOGGER.Info(" ...DateiIndexieren wurde aufgerufen")
+ WD_File = WD_File.Substring(2)
+ Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject
+ 'MsgBox("DateiIndexieren:" & vbNewLine & ClassDateiimportWindream.GetWindreamDriveLetter & filenameZiel & vbNewLine & Me.selectedProfile.DokumenttypString)
+ ' den Dokumenttyp schreiben
+ LOGGER.Info(" ## Indexieren wird gestartet ##")
+ ' ein windream-Objekt der Datei anlegen
+ WMObject = _currentWMObject 'oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File)
+ Try
+ LOGGER.Info(" ...Datei wird gesperrt")
+ ' die Datei sperren
+ WMObject.lock()
+ Catch ex As Exception
+ LOGGER.Info(" ...Datei ist bereits gesperrt")
+ ' nichts tun (Datei ist bereits gesperrt)
+ End Try
+
+ If IsNothing(WMObject) Then
+ LOGGER.Info(" ...Windream Object ist nothing, Indexierung wird abgebrochen")
+ Return False
+ End If
+
+ If IsNothing(WMObject.aObjectType) Then
+ LOGGER.Info(" ...Kein Objekttyp gesetzt, Indexierung wird abgebrochen")
+ Return False
+ End If
+
+ LOGGER.Info($" ...Objekttyp wird gesetzt: " & _WDObjekttyp)
+ ' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
+ If WMObject.aObjectType.aName = "Standard" Then
+
+ ' ihr den entsprechenden Dokumenttyp zuweisen
+ WMObject.aObjectType = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp)
+ ' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
+ LOGGER.Info(" ...Objekttyp wurde gesetzt")
+ Else
+ LOGGER.Info(" ...Objekttyp war bereits gesetzt")
+ End If
+
+ Try
+ WMObject.Save()
+ Catch ex As Exception
+ ' wenn es einen Unexpected error inm speichern gab, dann konnte auch kein Dokumenttyp gesetzt werden -> es kann also auch keine
+ ' Indexierung stattfinden und die Indexierung muss nicht fortgesetzt werden
+ Return False
+ End Try
+
+ Try
+ WMObject.unlock()
+ Catch ex As Exception
+ ' wenn das entsperren nicht geklappt hat, dann war die Datei auch nicht gesperrt
+ End Try
+ LOGGER.Info(" ...Datei wurde gespeichert / Unlock wurde durchgeführt")
+ ' wenn bis hierher alles geklappt hat wurde ein Dokumenttyp übergeben
+
+ LOGGER.Info(" ...Objekttyp: " & _WDObjekttyp)
+
+
+ ' wenn keine Werte vorhanden sind, soll wenigstens der Dokumenttyp eingetragen werden
+
+ Dim indexe As String = ""
+
+ LOGGER.Info(" ...Indexname: '" & _Indexname & "'")
+ Dim werte = New ArrayList
+ If (GetTypeOfIndexAsIntByName(_Indexname) = WMObjectVariableValueTypeVector) Or GetTypeOfIndexAsIntByName(_Indexname) = 4097 Then
+ LOGGER.Info(" ...Es handelt sich um ein Vektor-Feld")
+
+
+ 'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
+ LOGGER.Info(" ...Wert vor Überprüfung: " & _Value)
+ _Value = CheckIndexValue(_Value)
+ 'Ausstieg da Fehler in der Überprüfung
+ If _Value Is Nothing Then
+ Return False
+ End If
+ LOGGER.Info(" ...Value für Indexierung: " & _Value)
+ werte.Add(_Value)
+
+ LOGGER.Info(" ...Werte zu Array hinzugefügt!")
+ Else
+ 'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
+ LOGGER.Info(" ...Value vor Überprüfung: " & _Value)
+ _Value = CheckIndexValue(_Value)
+ 'Ausstieg da Fehler in der Überprüfung
+ If _Value Is Nothing Then
+ Return False
+ End If
+ LOGGER.Info(" ...Value für Indexierung: " & _Value)
+ werte.Add(_Value)
+
+ End If
+
+ Dim arrIndex() As String = Nothing
+ Dim arrValue() As String = Nothing
+ ReDim Preserve arrIndex(0)
+ ReDim Preserve arrValue(0)
+ arrIndex(0) = _Indexname
+ arrValue(0) = _Value
+ Return RunIndexing(WMObject, arrIndex, arrValue)
+
+ Catch ex As Exception
+ LOGGER.Info("Hinweis: Die Datei " & WD_File & " konnte nicht indexiert werden.")
+ LOGGER.Error(ex.Message)
+ LOGGER.Info("Fehler: " & ex.Message)
+ ' Me.TreeNodeInfos.Add(temp)
+ Return False
+ End Try
+ End Function
+ Private Shared Function RunIndexing(ByVal oDocument As WMObject, ByVal Indizes() As String, ByVal aValues() As Object)
+ Dim vektInsState As Integer = 1
+ Try
+ If Indizes IsNot Nothing And aValues IsNot Nothing Then
+ If Not oDocument.aLocked Then
+ oDocument.lock()
+ Dim i As Integer = 0
+ Dim indexname As String
+ If aValues.Length = 1 And aValues(0) = "" Then
+ LOGGER.Info(" ...Indexwert ist leer/Nothing - Keine Nachindexierung")
+ End If
+ ' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
+ If oDocument.aObjectType.aName <> _WDObjekttyp Then
+ ' ihr den entsprechenden Dokumenttyp zuweisen
+ oDocument.aObjectType = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp)
+ ' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
+ LOGGER.Info(" ...Objekttyp '" & oDocument.aObjectType.aName & "' wurde in '" & _WDObjekttyp & "' geändert.")
+ Else
+ LOGGER.Info(" ...Objekttyp war bereits gesetzt")
+ End If
+
+ Try
+ oDocument.Save()
+ Catch ex As Exception
+ ' wenn es einen Unexpected error inm speichern gab, dann konnte auch kein Dokumenttyp gesetzt werden -> es kann also auch keine
+ ' Indexierung stattfinden und die Indexierung muss nicht fortgesetzt werden
+ Return False
+ End Try
+
+ 'Jetzt jeden Indexwert durchlaufen
+ For Each aName As String In Indizes
+ indexname = aName
+ If LogErrorsOnly = False Then
+ LOGGER.Info(" ")
+ LOGGER.Info(" >> Indexierung von Index '" & indexname & "'")
+ End If
+ ' das entsprechende Attribut aus windream auslesen
+ Dim oAttribute = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, Indizes(i))
+ ' den Variablentyp (String, Integer, ...) auslesen
+ Dim vType = oAttribute.getVariableValue("dwAttrType")
+ ' wenn in aValues an Position i ein Wert steht
+ If IsNotEmpty(aValues(i)) Then
+ Dim _int As Boolean = False
+ Dim _date As Boolean = False
+ Dim _dbl As Boolean = False
+ Dim _bool As Boolean = False
+ 'If indexname = "Tournr" Then
+ ' MsgBox("Index: " & indexname & vbNewLine & "wert: " & aValues(i), MsgBoxStyle.Information, "Index: " & aName.ToString)
+ 'End If
+
+
+ 'MsgBox(oDocument.aName & vbNewLine & aValues(i) & vbNewLine & vType, MsgBoxStyle.Exclamation, "Zeile 87")
+ Dim value = aValues(i)
+ Dim convertValue
+ Dim vektor As Boolean = False
+ 'Den Typ des Index-Feldes auslesen
+ 'MsgBox(value.GetType.ToString)
+ Select Case (vType)
+ 'Case WMObjectVariableValueTypeUndefined
+ Case WMObjectVariableValueTypeString
+ LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeString")
+ convertValue = CStr(value)
+ Case WMObjectVariableValueTypeInteger
+ LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeInteger")
+ value = value.ToString.Replace(" ", "")
+ If IsNumeric(value) = False Then
+ LOGGER.Info(" ...Achtung: Value '" & value & "' kann nicht in Zahl konvertiert werden!")
+ End If
+ value = value.ToString.Replace(" ", "")
+ convertValue = CInt(value)
+ _int = True
+ Case WMObjectVariableValueTypeFloat
+ LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFloat")
+ value = value.ToString.Replace(" ", "")
+ convertValue = CDbl(value)
+ Case WMObjectVariableValueTypeFixedPoint
+ LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFixedPoint")
+ value = value.ToString.Replace(" ", "")
+ convertValue = CDbl(value)
+ _dbl = True
+ Case WMObjectVariableValueTypeBoolean
+ LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeBoolean")
+ convertValue = CBool(value)
+ _bool = True
+ Case WMObjectVariableValueTypeDate
+ LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeDate")
+ _date = True
+ 'Dim _date As Date = value
+ convertValue = value
+ Case WMObjectVariableValueTypeTimeStamp
+ LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeTimeStamp")
+ convertValue = value
+ Case WMObjectVariableValueTypeCurrency
+ LOGGER.Info(" - Typ des windream-Indexes: WMObjectVariableValueTypeCurrency")
+ 'Wegen currency muß ein eigenes Objekt vom typ Variant erzeugt werden
+ Dim aValueWrapper As System.Runtime.InteropServices.CurrencyWrapper = New System.Runtime.InteropServices.CurrencyWrapper(CDec(value))
+ convertValue = aValueWrapper
+ Case WMObjectVariableValueTypeTime
+ LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeTime")
+ 'If ((value)) Then
+ ' convertValue = CDate(value)
+ 'Else
+ ' convertValue = ""
+ 'End If
+ 'Dim _date As Date = value
+ convertValue = convertValue '*_date.ToShortTimeString
+ Case WMObjectVariableValueTypeFloat
+ LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFloat")
+ convertValue = CStr(value)
+ Case WMObjectVariableValueTypeVariant
+ LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeVariant")
+ convertValue = CStr(value)
+ Case WMObjectVariableValueTypeFulltext
+ LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFulltext")
+ convertValue = CStr(value)
+ Case 4097
+ vektor = True
+ LOGGER.Info(" ...Typ des windream-Indexes: 4097 Vektor alphanumerisch")
+ 'Vektor alphanumerisch
+ convertValue = CStr(value)
+ Case 4098
+ vektor = True
+ LOGGER.Info(" ...Typ des windream-Indexes: 4098 Vektor Numerisch")
+ 'Vektor Numerisch
+ convertValue = CStr(value)
+ Case 4099
+ vektor = True
+ LOGGER.Info(" ...Typ des windream-Indexes: 4099 Vektor Kommazahl")
+ 'Vektor Kommazahl
+ convertValue = CStr(value)
+ Case 4100
+ vektor = True
+ LOGGER.Info(" ...Typ des windream-Indexes: 4100 Vektor Boolean")
+ 'Vektor Kommazahl
+ convertValue = ToBoolean(value)
+ Case 4101
+ vektor = True
+ LOGGER.Info(" ...Typ des windream-Indexes: 4101 Vektor Date")
+ 'Vektor Kommazahl
+ convertValue = CStr(value)
+ Case 4103
+ vektor = True
+ LOGGER.Info(" ...Typ des windream-Indexes: 4103 Vektor DateTime")
+ 'Vektor DateTime
+ convertValue = CStr(value)
+ Case 4107
+ vektor = True
+ LOGGER.Info(" ...Typ des windream-Indexes: 4107 Integer 64bit")
+ convertValue = CStr(value)
+ Case 36865
+ vektor = True
+ LOGGER.Info(" ...Typ des windream-Indexes: 36865 Vektor alphanumerisch")
+ 'Vektor Kommazahl
+ convertValue = CStr(value)
+ Case Else
+ LOGGER.Info(" ...Typ des windream-Indexes konnte nicht bestimmt werden!")
+ LOGGER.Info(" ...Versuch des Auslesens (vType): " & vType)
+ 'MsgBox(vType & vbNewLine & CStr(value), MsgBoxStyle.Exclamation, "Marlon-Case Else")
+ convertValue = ""
+ End Select
+ If vektor = False Then
+ If convertValue.ToString Is Nothing = False Then
+ LOGGER.Info(" ...Konvertierter Wert: '" & convertValue.ToString & "'")
+ End If
+ End If
+ '############################################################################################
+ '####################### Der eigentliche Indexierungsvorgang ################################
+ '############################################################################################
+ If vektor = False Then
+ If convertValue.ToString Is Nothing = False Then
+ LOGGER.Info(" ...Versuch dem Dok einen Index zuzuweisen: oDocument.SetVariableValue(" & aName & ", " & convertValue & ")")
+ If _int = True Then
+ convertValue = convertValue.ToString.Replace(" ", "")
+ oDocument.SetVariableValue(aName, CInt(convertValue))
+ ElseIf _date = True Then
+ oDocument.SetVariableValue(aName, CDate(convertValue))
+ ElseIf _bool Then
+ oDocument.SetVariableValue(aName, CBool(convertValue))
+ ElseIf _dbl Then
+ convertValue = convertValue.ToString.Replace(" ", "")
+ oDocument.SetVariableValue(aName, CDbl(convertValue))
+ Else
+ oDocument.SetVariableValue(aName, convertValue)
+ End If
+ 'Die Datei speichern
+ oDocument.Save()
+
+ If LogErrorsOnly = False Then
+ LOGGER.Info(" ...Index '" & aName & "' wurde geschrieben")
+ LOGGER.Info("")
+ End If
+ Else
+ LOGGER.Info(" >> Kein Indexwert vorhanden")
+ End If
+ Else
+ 'VEKTORFELDER, ALSO ÜBERPRÜFEN OB ERGEBNIS-ARRAY GEFÜLLT IST
+ LOGGER.Info(" >> VEKTORFELD: Vorbereiten des Arrays")
+
+ Dim myArray()
+
+
+
+ 'For Each row As DataRow In DT.Rows
+ 'MsgBox(aName & vbNewLine & row.Item("Indexname") & vbNewLine & CStr(row.Item("Wert")))
+ 'Next
+ Dim Anzahl As Integer = aValues.Length
+ 'Vektorfeld wird mit EINEM Wert gefüllt
+ If Anzahl = 1 Then
+ LOGGER.Info(" >> Vektorfeld wird mit EINEM Wert gefüllt ")
+ ReDim myArray(0)
+ Select Case vType
+ Case 36865
+ 'Umwandeln in String
+ myArray(0) = CStr(value)
+ Case 4097
+ 'Umwandeln in String
+ myArray(0) = CStr(value)
+ Case 4098
+ 'Umwandeln in Integer
+ value = value.ToString.Replace(" ", "")
+ myArray(0) = CInt(value)
+ Case 4099
+ Dim Str As String = value
+ Str = Str.ToString.Replace(" ", "")
+ 'Umwandeln in Double
+ myArray(0) = CDbl(Str.Replace(".", ","))
+
+ Case 4100
+ ' Umwandeln in Boolean
+ myArray(0) = ToBoolean(value)
+ Case 4101
+ 'Umwandeln in Date
+ myArray(0) = CDate(value)
+ Case 4107
+ myArray(0) = Convert.ToInt64(value)
+ Case 4103
+ 'Umwandeln in Datum Uhrzeit
+ myArray(0) = value
+ Case Else
+ 'Umwandeln in String
+ myArray(0) = CStr(value)
+ End Select
+
+ 'Jetzt überprüfen ob Werte in Vektorfeld angefügt oder überschrieben werden sollen
+ LOGGER.Info(" >> Konvertierter Wert: " & myArray(0).ToString)
+
+ Dim VektorArray()
+
+ 'Immer anfügen
+ LOGGER.Info(" >> Check Existing Vektorvalues")
+
+ Dim indicies As New List(Of Object)
+
+ For Each element In myArray
+ If TypeOf element Is String Then
+ Dim splitted = element.ToString.Split(ClassConstants.VECTORSEPARATOR)
+ For Each s In splitted
+ indicies.Add(s)
+ Next
+ Else
+ indicies.Add(element)
+ End If
+ Next
+
+ myArray = indicies.ToArray()
+
+ VektorArray = Return_VektorArray(oDocument, aName, myArray)
+
+ If VektorArray Is Nothing = False Then
+ ReDim myArray(VektorArray.Length - 1)
+ Array.Copy(VektorArray, myArray, VektorArray.Length)
+
+ 'Jetzt die Nachindexierung für Vektor-Felder
+ oDocument.SetVariableValue(aName, myArray)
+ 'myArray)
+ LOGGER.Info(" >> 'SetVariableValue' für VEKTOR mit einem Wert erfolgreich")
+
+ 'Die Änderungen festsschreiben/speichern
+ oDocument.Save()
+
+ End If
+ Else
+ LOGGER.Info(" >> Vektorfeld wird mit MEHREREN Werten gefüllt ")
+ ' das ausgewählte Profil in _selectedProfile laden
+
+
+ 'Die Größe des Arrays festlegen
+ ReDim myArray(Anzahl - 1)
+ Dim i1 As Integer = 0
+ 'Die Datatable durchlaufen und Werte für den Index in Array schreiben
+ For Each obj In myArray
+ myArray(i1) = CStr(obj)
+ LOGGER.Info(" >> Wert (" & i1 & ") aus Datatable: '" & myArray(i1).ToString & "'")
+ i1 = i1 + 1
+ Next
+ LOGGER.Info(" >> Array wurde erfolgreich erzeugt")
+
+
+ Dim VektorArray()
+
+ VektorArray = Return_VektorArray(oDocument, aName, myArray)
+
+ If VektorArray Is Nothing = False Then
+ 'Das Array wieder anpassen
+ ReDim myArray(VektorArray.Length - 1)
+ 'Array.Copy(VektorArray, myArray, VektorArray.Length)
+ i1 = 0
+ For Each _value As Object In VektorArray
+ Select Case vType
+ Case 36865
+ myArray(i1) = CStr(_value)
+ Case 4097
+ myArray(i1) = CStr(_value)
+ Case 4098
+ Dim v As String = _value.ToString.Replace(" ", "")
+ myArray(i1) = CInt(v)
+ Case 4099
+ 'Vektroryp Double
+ Dim Str As String = _value
+ Str = Str.ToString.Replace(" ", "")
+ myArray(i1) = CDbl(Str.Replace(".", ","))
+ Case 4101
+ 'Vektortyp DATE
+ Dim dat As String = _value
+ myArray(i1) = CDate(dat.Replace(".", ","))
+ Case 4107
+ myArray(i1) = Convert.ToInt64(_value)
+ Case Else
+ 'Vektortyp ALPHANUMERISCH
+ 'Die Größe des Arrays festlegen
+ myArray(i1) = CStr(myArray(0))
+ End Select
+ LOGGER.Info(" >> Konvertierter Wert (" & i1 & ") : '" & myArray(i1).ToString & "'")
+ i1 += 1
+ Next
+ 'Jetzt die Nachindexierung für Vektor-Felder
+ Try
+ oDocument.SetVariableValue(aName, myArray)
+ Catch ex As Exception
+ LOGGER.Info("RunIndexing -Unexpected error in indexing Vectorfield: " & ex.Message)
+ LOGGER.Error(ex.Message)
+ oDocument.Save()
+ oDocument.unlock()
+ Return False
+ End Try
+
+ LOGGER.Info(" >> 'SetVariableValue' für VEKTOR erfolgreich")
+
+ ' oDocument.LockRights()
+
+ 'Die Änderungen festsschreiben/speichern
+ oDocument.Save()
+ LOGGER.Info(">> Indexierung erfolgreich beendet (Save ...")
+ Else
+ LOGGER.Info(" - Achtung: VektorArray Is NOTHING")
+ oDocument.Save()
+ Return True
+ End If
+ End If
+ End If
+ End If
+
+ i += 1
+
+ Next
+ oDocument.unlock()
+ If LogErrorsOnly = False Then
+ LOGGER.Info(">> ...und Unlock durchgeführt)")
+ LOGGER.Info("")
+ End If
+ Return True
+ Else
+ LOGGER.Info(" >> Dokument ist gesperrt, Indexierung erst im nächsten Durchlauf!")
+ 'oDocument.unlock()
+ Return False
+ End If
+ End If
+ Catch ex As Exception
+ LOGGER.Info("ClassNiWindream.RunIndexing: " & ex.Message)
+ LOGGER.Error(ex.Message)
+ oDocument.Save()
+ oDocument.unlock()
+ Return False
+ End Try
+ End Function
+ Private Shared Function Return_VektorArray(ByVal oDocument As WMObject, vktIndexName As String, NIIndexe As Object)
+ Try
+ Dim missing As Boolean = False
+ Dim Anzahl As Integer = 0
+ Dim ValueArray()
+ 'Jeden Wert des Vektorfeldes durchlaufen
+ Dim wertWD = oDocument.GetVariableValue(vktIndexName)
+ If wertWD Is Nothing = False Then
+ 'Nochmals prüfen ob wirklich Array
+ If wertWD.GetType.ToString.Contains("System.Object") Then
+ 'Keine Duplikatprüfung also einfach neues Array füllen
+ LOGGER.Info(" >> Duplikatprüfung soll durchgeführt werden.")
+ 'Duplikat Prüfung an, also nur anhängen wenn Wert <>
+ For Each WDValue As Object In wertWD
+ If WDValue Is Nothing = False Then
+ 'Erst einmal die ALten Werte schreiben
+ ReDim Preserve ValueArray(Anzahl)
+ 'Den Wert im Array speichern
+ ValueArray(Anzahl) = WDValue.ToString
+ Anzahl += 1
+ End If
+ Next
+ 'Jetzt die Neuen Werte auf Duplikate überprüfen
+ For Each NewValue As Object In NIIndexe
+ If NewValue Is Nothing = False Then
+ If ValueArray.Contains(NewValue) = False Then
+ 'Das Array anpassen
+ ReDim Preserve ValueArray(Anzahl)
+ 'Den Wert im Array speichern
+ ValueArray(Anzahl) = NewValue.ToString
+ Anzahl += 1
+ Else
+ LOGGER.Info(" >> Value '" & NewValue.ToString & "' bereits in Vektorfeld enthalten")
+ End If
+ End If
+ Next
+
+ End If
+ Else
+ LOGGER.Info(" >> Vektorfeld ist noch leer....")
+ 'Den/die Neuen Wert(e) anfügen
+ For Each NewValue As Object In NIIndexe
+ If NewValue Is Nothing = False Then
+
+ If ValueArray Is Nothing = False Then
+ If ValueArray.Contains(NewValue) = False Then
+ 'Das Array anpassen
+ ReDim Preserve ValueArray(Anzahl)
+ 'Den Wert im Array speichern
+ ValueArray(Anzahl) = NewValue '.ToString
+ Anzahl += 1
+ Else
+ LOGGER.Info(" >> Value '" & NewValue.ToString & "' bereits in Array enthalten")
+ End If
+ Else 'Dererste Wert, also hinzufügen
+ 'Das Array anpassen
+ ReDim Preserve ValueArray(Anzahl)
+ 'Den Wert im Array speichern
+ ValueArray(Anzahl) = NewValue '.ToString
+ Anzahl += 1
+
+ End If
+
+ End If
+ Next
+ End If
+
+ Return ValueArray
+ Catch ex As Exception
+ LOGGER.Info("Unexpected Error in ClassWindream.Return_VektorArray: " & ex.Message)
+ LOGGER.Error(ex.Message)
+ End Try
+
+
+ End Function
+ Private Shared Function IsNotEmpty(ByVal aValue As Object)
+
+ If aValue IsNot Nothing Then
+ Dim itsType As Type = aValue.GetType
+ If itsType Is GetType(String) Then
+
+ If Not aValue = "" Then
+ Return True
+ End If
+
+ Return False
+ Else
+ Return True
+ End If
+ Else
+ Return False
+ End If
+
+ End Function
+ '''
+ ''' Führt das eigendliche Indexieren aus
+ '''
+ '''
+ ''' der zu indexierenden Datei
+ ''' Name des zu indexierenden Indexfeldes
+ ''' Der Wert/die Werte die dem Index zugewiesen werden sollen
+ ''' Liefert True wenn das Indexieren erfolgreich war, sonst False
+ '''
+ Public Shared Function Indexiere(ByVal filenameZiel As String, ByVal index As String, ByVal werte As Object) As Boolean
+ LOGGER.Info(" - In Indexierungsvorgang für: " & filenameZiel)
+ Try
+ Dim WMObject As WINDREAMLib.WMObject = Nothing '= CreateObject("WINDREAMLib.WMObject") '= New WINDREAMLib.WMObject 'CreateObject("WINDREAMLib.WMObject")
+ 'MsgBox("Indexiere: " & vbNewLine & filenameZiel)
+ 'werte Is Nothing Or _
+ ' überprüfen ob alle notwendigen Informationen angegeben wurden (sonst abbrechen)
+ If filenameZiel Is Nothing Or
+ filenameZiel = "" Or
+ index Is Nothing Or
+ index = "" Or
+ Not ExistIndexInObjekttyp(_WDObjekttyp, index) Then
+ LOGGER.Info("=> Hinweis: Die Datei wurde auf Grund eines Problems in der Initialisierung nicht vollständig indexiert.")
+ Return False
+ End If
+
+ Dim fileExists As Boolean
+
+ ' prüfen ob die zu indexierende Datei existiert
+ fileExists = My.Computer.FileSystem.FileExists(vWLaufwerk & ":" & filenameZiel) '_windream.GetWindreamDriveLetter
+
+ Dim an As Integer = 0
+ Do While My.Computer.FileSystem.FileExists(vWLaufwerk & ":" & filenameZiel) = False
+ If an > 500 Then
+ fileExists = False
+ Exit Do
+ Else
+ LOGGER.Info(" Achtung: Datei exisitiert noch nicht: " & My.Computer.Clock.LocalTime)
+ End If
+ an = an + 1
+ Loop
+ ' wenn die Datei existiert
+ If fileExists Then
+ WMObject = _session.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, filenameZiel)
+
+ ' eine Variable für den umgewandelten Indexwert anlegen (kein Typ, da noch unklar ist was reingeschrieben wird)
+ 'Dim convertValue = Nothing
+
+ ' den Typ des Zielindexes auslesen
+ Dim TypDesIndexes As Integer
+
+ Try
+
+ ' ein windream-Objekt der Datei anlegen
+ WMObject = _session.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, filenameZiel)
+ If LogErrorsOnly = False Then
+ LOGGER.Info(" - windream-Objekt der Datei erzeugt")
+ LOGGER.Info(" - Ziel: W:\" & filenameZiel)
+ End If
+
+ 'Me.singleInfoNode.Add("Ziel: " & ClassDateiimportWindream.GetWindreamDriveLetter & filenameZiel)
+
+ Try
+ ' die Datei sperren
+ WMObject.lock()
+
+ 'WMObject.LockFor(WINDREAMLib.WMObjectEditMode.WMObjectEditModeObject)
+ Catch ex As Exception
+
+ End Try
+
+ ' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
+ If WMObject.aObjectType.aName = "Standard" Then
+ ' ihr den entsprechenden Dokumenttyp zuweisen
+ WMObject.aObjectType = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp)
+ ' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
+ End If
+
+
+ ' wenn keine Werte vorhanden sind, soll wenigstens der Dokumenttyp eingetragen werden
+ If werte Is Nothing Then
+
+ Try
+ WMObject.Save()
+ WMObject.unlock()
+ Catch ex As Exception
+
+ End Try
+
+ Return Nothing
+ End If
+
+ ' den Typ des Zielindexes auslesen
+ TypDesIndexes = GetTypeOfIndexAsIntByName(index)
+
+ ' wenn es sich bei dem Index NICHT um ein Vektorfeld handelt
+ If TypDesIndexes < WMObjectVariableValueTypeVector Then
+ LOGGER.Info(" - Bei dem Zielindex handelt es sich um einen Einzelindex.")
+ Else
+ LOGGER.Info(" Bei dem Zielindex handelt es sich um ein Vektorfeld.")
+ ' ein Backup der Indexwerte anlegen
+ Dim temp As Object = werte
+ ' und die eigendliche Variable zurücksetzen
+ werte = Nothing
+ ' dann soll nur der letzte Wert des Arrays übernommen werden, damit nicht versucht wird ein
+ ' Array in einen Einzelindex zu speichern
+ werte = temp
+ LOGGER.Info(" - Array geleert und erneuert!")
+ End If
+ Catch ex As Exception
+ LOGGER.Info("Hinweis: Beim Initialisieren der Datei auf dem windream-Laufwerk ist ein Fehler aufgetreten.")
+ LOGGER.Error(ex.Message)
+ Return False
+ End Try
+
+
+ 'Try
+ ' den Typ des Zielindexes
+ LOGGER.Info(" - Typ des Indexes: " & TypDesIndexes.ToString)
+ Select Case (TypDesIndexes)
+ Case WMObjectVariableValueTypeUndefined ' zu klären !!!!
+ 'convertValue = vbEmpty
+ Case WMObjectVariableValueTypeString
+ ''Führende Nullen Entfernen
+ 'If werte.ToString.StartsWith("0") Then
+ ' Dim wert As String = CStr(CInt(werte.ToString))
+ ' convertValue = wert
+ ' LOGGER.Info(" - Führende Nullen wurden entfernt")
+ 'Else
+ ' Dim wert As String = CStr(CInt(werte.ToString))
+ ' convertValue = wert
+ 'End If
+ 'If convertValue.ToString.Contains("~1") Then
+ ' convertValue = convertValue.ToString.Replace("~1", "")
+ 'End If
+ 'If convertValue.ToString.Contains("~2") Then
+ ' convertValue = convertValue.ToString.Replace("~2", "")
+ 'End If
+ 'If convertValue.ToString.Contains("~3") Then
+ ' convertValue = convertValue.ToString.Replace("~3", "")
+ 'End If
+ 'If convertValue.ToString.Contains("~4") Then
+ ' convertValue = convertValue.ToString.Replace("~4", "")
+ 'End If
+
+ Case WMObjectVariableValueTypeInteger
+ ' convertValue = CInt(werte)
+ Case WMObjectVariableValueTypeFloat
+ werte = werte.ToString.Replace(".", ",")
+ 'convertValue = CDbl(werte)
+
+ Case WMObjectVariableValueTypeBoolean
+ Try
+ ' convertValue = CBool(werte)
+ Catch ex As Exception
+ ' Nothing zuweisen damit SetVariableValue nicht ausgeführt wird
+ 'convertValue = Nothing
+ End Try
+ Case WMObjectVariableValueTypeDate
+ If (IsDate(werte)) Then
+ ' convertValue = CDate(werte)
+ Else
+ ' convertValue = vbEmpty
+ End If
+
+ Case WMObjectVariableValueTypeFixedPoint
+ werte = werte.ToString.Replace(".", ",")
+ ' convertValue = CDbl(werte)
+
+ Case WMObjectVariableValueTypeTimeStamp
+ Dim timestamp As Integer = GetTimestamp(werte)
+ If timestamp > 0 Then
+ ' convertValue = timestamp
+ Else
+ ' convertValue = vbEmpty
+ End If
+
+ Case WMObjectVariableValueTypeCurrency
+ Dim aValue As System.Runtime.InteropServices.CurrencyWrapper = New System.Runtime.InteropServices.CurrencyWrapper(werte)
+ ' convertValue = aValue
+
+ Case WMObjectVariableValueTypeTime
+ If (IsDate(werte)) Then
+ ' convertValue = CDate(werte) ' ggf. aber nur die Zeit
+ Else
+ ' convertValue = vbEmpty
+ End If
+
+ Case WMObjectVariableValueTypeVariant
+ ' convertValue = werte
+
+ Case WMObjectVariableValueTypeMask ' zu klären !!!!
+ ' convertValue = vbEmpty
+
+ Case WMObjectVariableValueFlagMask ' zu klären !!!!
+ ' convertValue = vbEmpty
+
+
+ Case WMObjectVariableValueTypeFulltext
+ 'convertValue = CStr(werte)
+
+ Case WMObjectVariableValueTypeDefaultValue ' zu klären !!!!
+ ' convertValue = vbEmpty
+
+ Case Else
+ ' wenn es sich um einen TypVektorIndex handelt
+ If TypDesIndexes >= 4096 And TypDesIndexes < 8192 Then
+ LOGGER.Info("- Es handelt sich um einen Vektorindex")
+ 'Dim temp_arr As New ArrayList
+
+ Dim arrayIndex = 0
+ Dim temp_arr As Object
+ Dim arrayLength As Integer = 0
+ For Each element In werte
+ arrayLength = arrayLength + 1
+ Next
+
+ ReDim temp_arr(arrayLength - 1)
+
+ Select Case (TypDesIndexes - WMObjectVariableValueTypeVector)
+ 'VektorIndex vom Typ String 64'
+ Case 1
+ LOGGER.Info("- VektorIndex vom Typ String 1")
+
+ For Each wert As Object In werte
+ 'Führende Nullen Entfernen
+ If werte.ToString.StartsWith("0") Then
+ Dim werteString As String = CStr(CInt(wert.ToString))
+ wert = werteString
+ temp_arr(arrayIndex) = CStr(wert)
+ LOGGER.Info("- Führende Nullen wurden entfernt")
+ Else
+ temp_arr(arrayIndex) = CStr(wert)
+
+ End If
+
+ arrayIndex = arrayIndex + 1
+
+ LOGGER.Info("- Wert " & CStr(wert) & " konvertiert")
+ Next
+ Case WMObjectVariableValueTypeUndefined
+ ' convertValue = ""
+
+ Case WMObjectVariableValueTypeString
+ LOGGER.Info("- VektorIndex vom Typ String 2")
+ For Each wert As Object In werte
+ 'Führende Nullen Entfernen
+ If werte.ToString.StartsWith("0") Then
+ wert = CInt(wert)
+ temp_arr(arrayIndex) = CStr(wert)
+ LOGGER.Info("- Führende Nullen wurden entfernt")
+ Else
+ temp_arr(arrayIndex) = CStr(wert)
+ End If
+
+ arrayIndex = arrayIndex + 1
+
+ LOGGER.Info("- Wert " & CStr(wert) & " konvertiert")
+ Next
+
+ Case WMObjectVariableValueTypeInteger
+ LOGGER.Info("- VektorIndex vom Typ Integer")
+ For Each wert As Object In werte
+ temp_arr(arrayIndex) = CInt(wert)
+ arrayIndex = arrayIndex + 1
+ Next
+
+ Case WMObjectVariableValueTypeFloat
+ For Each wert As Object In werte
+ wert = wert.ToString.Replace(".", ",")
+ temp_arr(arrayIndex) = CDbl(wert)
+ arrayIndex = arrayIndex + 1
+ Next
+
+ Case WMObjectVariableValueTypeBoolean
+ For Each wert As Object In werte
+ Try
+ temp_arr(arrayIndex) = CBool(wert)
+ Catch ex As Exception
+ ' Nothing zuweisen damit SetVariableValue nicht ausgeführt wird
+ temp_arr = Nothing
+ End Try
+ arrayIndex = arrayIndex + 1
+ Next
+
+ Case WMObjectVariableValueTypeDate
+ For Each wert As Object In werte
+ 'wert =
+ temp_arr(arrayIndex) = CDate(wert)
+ arrayIndex = arrayIndex + 1
+ Next
+
+ Case WMObjectVariableValueTypeFixedPoint
+ For Each wert As Object In werte
+ temp_arr(arrayIndex) = CDbl(wert)
+ arrayIndex = arrayIndex + 1
+ Next
+
+ Case WMObjectVariableValueTypeTimeStamp
+ For Each wert As Object In werte
+ temp_arr(arrayIndex) = CInt(wert)
+ arrayIndex = arrayIndex + 1
+ Next
+
+ Case WMObjectVariableValueTypeCurrency
+ For Each wert As Object In werte
+ Dim aValue As System.Runtime.InteropServices.CurrencyWrapper = New System.Runtime.InteropServices.CurrencyWrapper(werte)
+ temp_arr(arrayIndex) = aValue
+ arrayIndex = arrayIndex + 1
+ Next
+
+ Case WMObjectVariableValueTypeTime
+ For Each wert As Object In werte
+ temp_arr(arrayIndex) = CDate(wert)
+ arrayIndex = arrayIndex + 1
+ Next
+
+ Case WMObjectVariableValueTypeVariant
+ ' dann bleiben alle Werte wie sie sind
+
+ End Select
+
+ werte = temp_arr
+
+ LOGGER.Info("- Werte erfolgreich konvertiert")
+ Else
+ ' convertValue = vbEmpty
+ End If
+
+ End Select
+
+ 'Catch ex As Exception
+ ' ' einen Hinweis über einen aufgetretenen Fehler an das Array für den TreeView-Log anhängen
+ ' LOGGER.Info("Unexpected error in Auswerten/Konvertieren des Typs!", ex.Message)
+ ' ' die Indexierungsinformationen für den TreeView-Log zurückgeben
+ ' Return False
+ 'End Try
+
+
+ ' Try
+ ' ***** Anmerkung: das Nachindexieren mit vbEmpty ist möglich (siehe oben) jedoch nicht *****
+ ' ***** das Indexieren mit einem Nothing-Wert !!! *****
+ ' wenn das Konvertieren soweit gut gelaufen ist (also kein Nothing-Wert zugewiesen wurde)
+ ' If (convertValue Is Nothing) = False Then
+ ' den konvertierten Indexwert dem entsprechenden Index zuweisen
+ WMObject.SetVariableValue(index, werte)
+ If LogErrorsOnly = False Then
+ LOGGER.Info(" - den konvertierten Indexwert dem entsprechenden Index zuweisen")
+ LOGGER.Info(" - Indexname: " & index.ToString)
+ LOGGER.Info(" - Indexwert: " & werte.ToString)
+ End If
+ 'End If
+
+ ' die Indexinformationen des Dokuments speichern
+ WMObject.Save()
+ LOGGER.Info(" - die Indexinformationen des Dokuments speichern")
+ ' Unlock in einem unbehandelten Try-Block um Fehler abzufangen,
+ ' wenn eine Datei nicht gesperrt ist
+ Try
+ ' die Sperrung des Dokuments aufheben
+ WMObject.unlock()
+ LOGGER.Info(" - die Sperrung des Dokuments aufheben")
+ Catch ex As Exception
+
+ ' nichts tun (Datei war nicht gesperrt)
+ End Try
+
+ ' die Indexierungsinformationen für den TreeView-Log zurückgeben
+ Return True
+ Else
+ ' die Indexierungsinformationen für den TreeView-Log zurückgeben
+ LOGGER.Info(" Hinweis: Die Datei hat zum Zeitpunkt der Indexierung noch nicht auf dem windream-Laufwerk existiert.")
+ End If
+
+ Catch ex As Exception
+ LOGGER.Info(" Hinweis: Unbekannter Unexpected error inm Indexieren der Datei.")
+ LOGGER.Error(ex.Message)
+ LOGGER.Info(ex.Message)
+ End Try
+
+ Return True
+
+ End Function
+
+ '''
+ ''' Diese Funktion überprüft ob eine Variable ein Array ist, oder nicht.
+ '''
+ ''' Variable die überprüft werden soll
+ ''' Liefert True wenn es sich um ein Array handelt, sonst False
+ '''
+ Private Shared Function IsArray(ByVal arrayOrNot As Object)
+
+ Dim arrayType As String = UCase(arrayOrNot.GetType.ToString)
+
+ ' überprüft an welcher Stelle sich ein '['-Zeichen befindet
+ Dim position = InStr(arrayType, "[")
+
+ ' existiert ein '['-Zeichen, so handelt es sich um ein Array (GetType wäre System.Object[])
+ If Not position = 0 Then
+ Return True
+ Else
+ Return False
+ End If
+ End Function
+
+
+ '''
+ ''' Diese Funktion überprüft ob eine Variable eine ArrayList ist, oder nicht.
+ '''
+ ''' Variable die überprüft werden soll
+ ''' Liefert True wenn es sich um eine ArrayList handelt, sonst False
+ '''
+ Private Shared Function IsArrayList(ByVal arrayOrNot As Object)
+
+ Dim arrayType As String = UCase(arrayOrNot.GetType.ToString)
+
+ ' überprüft an welcher Stelle sich ein '['-Zeichen befindet
+ Dim position = InStr(arrayType, "[")
+
+ ' existiert ein '['-Zeichen, so handelt es sich um ein Array (GetType wäre System.Object[])
+ If arrayOrNot.GetType.ToString = "System.Collections.ArrayList" Then
+ Return True
+ Else
+ Return False
+ End If
+ End Function
+ '''
+ ''' Diese Funktion errechnet aus einem Datum den Unix-Timestamp
+ '''
+ ''' Datum, für das der Timestamp errechnet werden soll
+ ''' Liefert den Timestamp als Integer
+ '''
+ Private Shared Function GetTimestamp(ByVal FromDateTime As DateTime) As Integer
+
+ If IsDate(FromDateTime) Then
+ Dim Startdate As DateTime = #1/1/1970#
+ Dim Spanne As TimeSpan
+
+ ' vom Datum das Datum des "Beginns der Zeitrechnung" abziehen
+ Spanne = FromDateTime.Subtract(Startdate)
+
+ ' die Zeitspanne in einen Integer umwandeln
+ Return CType(Math.Abs(Spanne.TotalSeconds()), Integer)
+ Else
+ Return 0
+ End If
+ End Function
+ '''
+ ''' Liefert den Typen eines Indexes als Integer.
+ '''
+ ''' Name des zu überprüfenden Indexfeldes
+ ''' Liefert eine Zahl, die einen Typen beschreibt
+ '''
+ Public Shared Function GetTypeOfIndexAsIntByName(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
+ Private Shared Function CheckIndexValue(ByVal input)
+ Try
+ 'Ersetzt die Versionierungen Tilde(~) und Klammern ((1))
+ For i As Integer = 1 To 20
+ If input.ToString.EndsWith("~" & i.ToString) Then
+ input = input.ToString.Replace("~" & i.ToString, "")
+ ElseIf input.ToString.EndsWith("(" & i.ToString & ")") Then
+ input = input.ToString.Replace("(" & i.ToString & ")", "")
+ End If
+
+ Next
+
+ Return input
+ Catch ex As Exception
+ LOGGER.Info("Fehler in CheckIndexValue: " & ex.Message)
+ LOGGER.Error(ex.Message)
+ Return Nothing
+ End Try
+
+ End Function
+
+ Private Shared Function ToBoolean(input As String) As Boolean
+ If String.IsNullOrEmpty(input) Then Return False
+ Return (input.Trim().ToLower() = "true") OrElse (input.Trim() = "1")
+ End Function
+
+End Class
diff --git a/Global_Indexer/My Project/AssemblyInfo.vb b/Global_Indexer/My Project/AssemblyInfo.vb
index b4ec23b..f613f92 100644
--- a/Global_Indexer/My Project/AssemblyInfo.vb
+++ b/Global_Indexer/My Project/AssemblyInfo.vb
@@ -33,7 +33,7 @@ Imports System.Runtime.InteropServices
' übernehmen, indem Sie "*" eingeben:
'
-
+
\ No newline at end of file
diff --git a/Global_Indexer/frmAdministration.Designer.vb b/Global_Indexer/frmAdministration.Designer.vb
index 601054d..e85e15e 100644
--- a/Global_Indexer/frmAdministration.Designer.vb
+++ b/Global_Indexer/frmAdministration.Designer.vb
@@ -118,10 +118,6 @@ Partial Class frmAdministration
Me.BarButtonItem26 = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItem27 = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItem28 = New DevExpress.XtraBars.BarButtonItem()
- Me.RibbonPageUserGroups = New DevExpress.XtraBars.Ribbon.RibbonPage()
- Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
- Me.RibbonPageEmail = New DevExpress.XtraBars.Ribbon.RibbonPage()
- Me.RibbonPageGroup4 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageStart = New DevExpress.XtraBars.Ribbon.RibbonPage()
Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
@@ -129,6 +125,8 @@ Partial Class frmAdministration
Me.RibbonPageGroupManualIndexFunctions = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroupAutoIndex = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonPageGroupProfileRegex = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
+ Me.RibbonPageEmail = New DevExpress.XtraBars.Ribbon.RibbonPage()
+ Me.RibbonPageGroup4 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
Me.Label12 = New System.Windows.Forms.Label()
Me.XtraTabControl3 = New DevExpress.XtraTab.XtraTabControl()
@@ -525,7 +523,7 @@ Partial Class frmAdministration
resources.ApplyResources(Me.RibbonControl1, "RibbonControl1")
Me.RibbonControl1.MaxItemId = 38
Me.RibbonControl1.Name = "RibbonControl1"
- Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPageStart, Me.RibbonPageUserGroups, Me.RibbonPageEmail})
+ Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPageStart, Me.RibbonPageEmail})
Me.RibbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
Me.RibbonControl1.ShowToolbarCustomizeItem = False
Me.RibbonControl1.StatusBar = Me.RibbonStatusBar1
@@ -747,35 +745,6 @@ Partial Class frmAdministration
Me.BarButtonItem28.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem28.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.BarButtonItem28.Name = "BarButtonItem28"
'
- 'RibbonPageUserGroups
- '
- Me.RibbonPageUserGroups.Appearance.BackColor = System.Drawing.Color.SeaGreen
- Me.RibbonPageUserGroups.Appearance.Options.UseBackColor = True
- Me.RibbonPageUserGroups.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup3})
- Me.RibbonPageUserGroups.Name = "RibbonPageUserGroups"
- resources.ApplyResources(Me.RibbonPageUserGroups, "RibbonPageUserGroups")
- '
- 'RibbonPageGroup3
- '
- Me.RibbonPageGroup3.ItemLinks.Add(Me.BarButtonItem6)
- Me.RibbonPageGroup3.Name = "RibbonPageGroup3"
- resources.ApplyResources(Me.RibbonPageGroup3, "RibbonPageGroup3")
- '
- 'RibbonPageEmail
- '
- Me.RibbonPageEmail.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup4})
- Me.RibbonPageEmail.Name = "RibbonPageEmail"
- resources.ApplyResources(Me.RibbonPageEmail, "RibbonPageEmail")
- '
- 'RibbonPageGroup4
- '
- Me.RibbonPageGroup4.ItemLinks.Add(Me.BarButtonItem9)
- Me.RibbonPageGroup4.ItemLinks.Add(Me.BarButtonItem10)
- Me.RibbonPageGroup4.ItemLinks.Add(Me.BarButtonItem11)
- Me.RibbonPageGroup4.ItemLinks.Add(Me.BarButtonItem12)
- Me.RibbonPageGroup4.Name = "RibbonPageGroup4"
- resources.ApplyResources(Me.RibbonPageGroup4, "RibbonPageGroup4")
- '
'RibbonPageStart
'
Me.RibbonPageStart.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup2, Me.RibbonPageGroup1, Me.RibbonPageGroupManualIndex, Me.RibbonPageGroupManualIndexFunctions, Me.RibbonPageGroupAutoIndex, Me.RibbonPageGroupProfileRegex})
@@ -839,6 +808,21 @@ Partial Class frmAdministration
Me.RibbonPageGroupProfileRegex.Name = "RibbonPageGroupProfileRegex"
resources.ApplyResources(Me.RibbonPageGroupProfileRegex, "RibbonPageGroupProfileRegex")
'
+ 'RibbonPageEmail
+ '
+ Me.RibbonPageEmail.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup4})
+ Me.RibbonPageEmail.Name = "RibbonPageEmail"
+ resources.ApplyResources(Me.RibbonPageEmail, "RibbonPageEmail")
+ '
+ 'RibbonPageGroup4
+ '
+ Me.RibbonPageGroup4.ItemLinks.Add(Me.BarButtonItem9)
+ Me.RibbonPageGroup4.ItemLinks.Add(Me.BarButtonItem10)
+ Me.RibbonPageGroup4.ItemLinks.Add(Me.BarButtonItem11)
+ Me.RibbonPageGroup4.ItemLinks.Add(Me.BarButtonItem12)
+ Me.RibbonPageGroup4.Name = "RibbonPageGroup4"
+ resources.ApplyResources(Me.RibbonPageGroup4, "RibbonPageGroup4")
+ '
'RibbonStatusBar1
'
Me.RibbonStatusBar1.ItemLinks.Add(Me.txtStatus)
@@ -2925,8 +2909,6 @@ Partial Class frmAdministration
Friend WithEvents RibbonPage2 As DevExpress.XtraBars.Ribbon.RibbonPage
Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem
Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem
- Friend WithEvents RibbonPageUserGroups As DevExpress.XtraBars.Ribbon.RibbonPage
- Friend WithEvents RibbonPageGroup3 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents BarButtonItem6 As DevExpress.XtraBars.BarButtonItem
Friend WithEvents SplitContainerControl1 As DevExpress.XtraEditors.SplitContainerControl
Friend WithEvents Label12 As Label
diff --git a/Global_Indexer/frmAdministration.resx b/Global_Indexer/frmAdministration.resx
index 25c778b..d179874 100644
--- a/Global_Indexer/frmAdministration.resx
+++ b/Global_Indexer/frmAdministration.resx
@@ -841,12 +841,6 @@
Profil-Verwaltung
-
- Gruppenzuordnung
-
-
- Profil-Zuordnung
-
E-Mail Indexierung
@@ -7500,30 +7494,6 @@ Die erhaltenen Werte können in Indizes geschrieben oder zur Benennung der Datei
DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-
- RibbonPageUserGroups
-
-
- DevExpress.XtraBars.Ribbon.RibbonPage, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-
-
- RibbonPageGroup3
-
-
- DevExpress.XtraBars.Ribbon.RibbonPageGroup, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-
-
- RibbonPageEmail
-
-
- DevExpress.XtraBars.Ribbon.RibbonPage, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-
-
- RibbonPageGroup4
-
-
- DevExpress.XtraBars.Ribbon.RibbonPageGroup, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-
RibbonPageStart
@@ -7566,6 +7536,18 @@ Die erhaltenen Werte können in Indizes geschrieben oder zur Benennung der Datei
DevExpress.XtraBars.Ribbon.RibbonPageGroup, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
+ RibbonPageEmail
+
+
+ DevExpress.XtraBars.Ribbon.RibbonPage, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
+
+ RibbonPageGroup4
+
+
+ DevExpress.XtraBars.Ribbon.RibbonPageGroup, DevExpress.XtraBars.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
+
viewAssignedGroups
diff --git a/Global_Indexer/frmStart.Designer.vb b/Global_Indexer/frmStart.Designer.vb
index 6afc7c8..a51498b 100644
--- a/Global_Indexer/frmStart.Designer.vb
+++ b/Global_Indexer/frmStart.Designer.vb
@@ -1,9 +1,9 @@
- _
+
Partial Class frmStart
Inherits DevExpress.XtraEditors.XtraForm
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
- _
+
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
@@ -20,7 +20,7 @@ Partial Class frmStart
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
- _
+
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmStart))
@@ -52,7 +52,6 @@ Partial Class frmStart
Me.TBHOTKEY_USER_PROFILETableAdapter = New Global_Indexer.MyDatasetTableAdapters.TBHOTKEY_USER_PROFILETableAdapter()
Me.TableAdapterManager = New Global_Indexer.MyDatasetTableAdapters.TableAdapterManager()
Me.btnChoosefiles = New System.Windows.Forms.Button()
- Me.Button1 = New System.Windows.Forms.Button()
Me.MenuStrip1.SuspendLayout()
Me.StatusStrip1.SuspendLayout()
CType(Me.MyDataset, System.ComponentModel.ISupportInitialize).BeginInit()
@@ -221,24 +220,18 @@ Partial Class frmStart
Me.btnChoosefiles.Name = "btnChoosefiles"
Me.btnChoosefiles.UseVisualStyleBackColor = True
'
- 'Button1
- '
- resources.ApplyResources(Me.Button1, "Button1")
- Me.Button1.Name = "Button1"
- Me.Button1.UseVisualStyleBackColor = True
- '
'frmStart
'
Me.AllowDrop = True
+ Me.Appearance.Options.UseFont = True
resources.ApplyResources(Me, "$this")
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
- Me.BackColor = System.Drawing.SystemColors.ControlLight
- Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.btnChoosefiles)
Me.Controls.Add(Me.LabelControl1)
Me.Controls.Add(Me.StatusStrip1)
Me.Controls.Add(Me.MenuStrip1)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
+ Me.IconOptions.Icon = CType(resources.GetObject("frmStart.IconOptions.Icon"), System.Drawing.Icon)
Me.MaximizeBox = False
Me.Name = "frmStart"
Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide
@@ -280,5 +273,4 @@ Partial Class frmStart
Friend WithEvents LabelLoggedIn As DevExpress.XtraBars.BarStaticItem
Friend WithEvents LabelVersion As DevExpress.XtraBars.BarStaticItem
Friend WithEvents RibbonMiniToolbar1 As DevExpress.XtraBars.Ribbon.RibbonMiniToolbar
- Friend WithEvents Button1 As Button
End Class
diff --git a/Global_Indexer/frmStart.resx b/Global_Indexer/frmStart.resx
index efd9f6b..4e15bef 100644
--- a/Global_Indexer/frmStart.resx
+++ b/Global_Indexer/frmStart.resx
@@ -121,43 +121,6 @@
400, 17
-
- 0, 0
-
-
- 295, 24
-
-
-
- 5
-
-
- MenuStrip1
-
-
- MenuStrip1
-
-
- System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- $this
-
-
- 3
-
-
- 108, 20
-
-
- Konfiguration
-
-
- 221, 22
-
-
- Administration
-
232, 22
@@ -170,6 +133,12 @@
Hotkey - Einstellungen
+
+ 221, 22
+
+
+ Administration
+
218, 6
@@ -197,9 +166,49 @@
Info
+
+ 108, 20
+
+
+ Konfiguration
+
+
+ 0, 0
+
+
+ 295, 24
+
+
+
+ 5
+
+
+ MenuStrip1
+
+
+ MenuStrip1
+
+
+ System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ $this
+
+
+ 3
+
515, 17
+
+ 133, 17
+
+
+ FolderWatch ist aktiv
+
+
+ False
+
0, 137
@@ -224,15 +233,6 @@
2
-
- 133, 17
-
-
- FolderWatch ist aktiv
-
-
- False
-
1072, 17
@@ -639,7 +639,7 @@ auf dieses Fenster oder...
Segoe UI, 8.25pt
-
+
AAABAAEAgIUAAAEAGAD4zwAAFgAAACgAAACAAAAACgEAAAEAGAAAAAAAAAAAAEgAAABIAAAAAAAAAAAA
AAAAAABGHqpGHqpGHqpGHqpGHqpGHqpGHqpGHqpGHqpGHqpGHqpGHqpGHqpGHqpGHqpGHqpGHqpGHqoA
@@ -1682,6 +1682,6 @@ auf dieses Fenster oder...
frmStart
- System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+ DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v19.2, Version=19.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
\ No newline at end of file