Imports WINDREAMLib
Imports WMOSRCHLib
Public Class clsWindream_Index
    Inherits clsWindream_allgemein
  
#Region "+++++ Konstanten +++++"
    Protected Const WMObjectEditModeObject = &H1F
    Protected Const WMObjectStreamOpenModeReadWrite = 2
    Protected Const WMEntityObjectType = 10
    Protected Const WMEntityDocument = 1

    Const WMObjectVariableValueTypeUndefined = 0
    Const WMObjectVariableValueTypeString = 1
    Const WMObjectVariableValueTypeInteger = 2
    Const WMObjectVariableValueTypeFloat = 3
    Const WMObjectVariableValueTypeBoolean = 4
    Const WMObjectVariableValueTypeDate = 5
    Const WMObjectVariableValueTypeFixedPoint = 6
    Const WMObjectVariableValueTypeTimeStamp = 7
    Const WMObjectVariableValueTypeCurrency = 8
    Const WMObjectVariableValueTypeTime = 9
    Const WMObjectVariableValueTypeVariant = 10
    Const WMObjectVariableValueTypeMask = &HFFF
    Const WMObjectVariableValueFlagMask = &HFFFFF000
    Const WMObjectVariableValueTypeVector = &H1000
    Const WMObjectVariableValueTypeFulltext = &H2000
    Const WMObjectVariableValueTypeDefaultValue = &H4000
#End Region

#Region "+++++ Variablen +++++"
    'Private oController = CreateObject("WMOSrch.WMQuickSearch") 'As New WMOSearchController
    'Private oController As New WMOSearchController
    Private oController As New WMOSearchController
    'Dim srchQuick = CreateObject("WMOSrch.WMQuickSearch") 'As WMOSRCHLib.WMQuickSearch
#End Region

#Region "+++++ Allgemeine Methoden und Funktionen +++++"
    Sub New()
        MyBase.New()
    End Sub
    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
    Private Function return_type(ByVal _wert As Object)
        Return _wert.GetType
    End Function
    Public Shared Function Run_indexing_Single(ByVal _value As String, ByVal _dok As WINDREAMLib.WMObject, ByVal _Indexname As String, dS As DataSet, profil As String, Objekttyp As String)
        'Überprüfen ob Validierung bereits gesetzt wurde?
        Dim aktvalue = _dok.GetVariableValue(_Indexname)
        If aktvalue <> _value Then
            'Validation muß angepasst werden
            ClassLogger.AddDetailLog(" - " & _Indexname & " NOCH NICHT auf '" & _value.ToString & "' gesetzt")
            Dim arrIndex() As String = Nothing
            Dim arrValue() As String = Nothing
            'Nun die Datei indexieren
            arrIndex = Nothing
            arrValue = Nothing
            ReDim Preserve arrIndex(0)
            ReDim Preserve arrValue(0)
            arrIndex(0) = _Indexname
            arrValue(0) = _value.ToString
            clsWindream_Index.RunIndexing(_dok, arrIndex, arrValue, profil, Objekttyp)
        Else
            'Validation muß nicht angepasst werden
            ClassLogger.AddDetailLog(" - " & _Indexname & " bereits auf '" & _value.ToString & "' gesetzt")
        End If

    End Function
    Public Function GetIndex_Type(idxName) As String
        Try
            Dim oAttribute = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, idxName)
            'den Variablentyp (String, Integer, ...) auslesen 
            Dim vType = oAttribute.getVariableValue("dwAttrType")
            Dim Type As String
            Select Case (vType)
                'Case WMObjectVariableValueTypeUndefined
                Case WMObjectVariableValueTypeString
                    Type = "String"
                Case WMObjectVariableValueTypeInteger
                    Type = "Integer"
                Case WMObjectVariableValueTypeFloat
                    Type = "Float"
                Case WMObjectVariableValueTypeFixedPoint
                    Type = "Point"
                Case WMObjectVariableValueTypeBoolean
                    Type = "Boolean"
                Case WMObjectVariableValueTypeDate
                    Type = "Date"
                Case WMObjectVariableValueTypeTimeStamp
                    Type = "Timestamp"
                Case WMObjectVariableValueTypeCurrency
                    Type = "Currency"
                Case WMObjectVariableValueTypeTime
                    Type = "Time"
                Case WMObjectVariableValueTypeFloat
                    Type = "Float"
                Case WMObjectVariableValueTypeVariant
                    Type = "Varia´nt"
                Case WMObjectVariableValueTypeFulltext
                    Type = "Fulltext"
                Case 4097
                    Type = "Vektor String"
                Case 4098
                    Type = "Vektor Numerisch"
                Case 4099
                    Type = "Vektor Float"
                Case 4101
                    Type = "Vektor Date"
                Case 4103
                    Type = "Vektor DateTime"
                Case 36865
                    Type = "Vektor Alpha"
                Case Else
                    Type = "String Else"
            End Select
            Return Type
        Catch ex As Exception

        End Try
    End Function
    Public Shared Function RunIndexing_Vektor(ByVal oDocument As WMObject, ByVal Indizes As String(), ByVal aValues As String())
        Try
            If Indizes IsNot Nothing And aValues IsNot Nothing Then
                If Not oDocument.aLocked Then
                    oDocument.lock()

                    If aValues.Length = 1 And aValues(0) = "" Then
                        ClassLogger.Add(" >> RunIndexing_Vektor: Indexwert ist leer/Nothing - Keine Nachindexierung", False)
                    Else
                        'Jetzt jeden Indexwert durchlaufen
                        Dim indexname As String
                        indexname = Indizes(0)
                        ClassLogger.AddDetailLog(" - RunIndexing_Vektor: Indexname: " & indexname)
                        'VEKTORFELDER, ALSO ÜBERPRÜFEN OB ERGEBNIS-ARRAY GEFÜLLT IST
                        ClassLogger.AddDetailLog(" - RunIndexing_Vektor: VEKTORFELD-Indexierung: Vorbereiten des Arrays")
                        ' das entsprechende Attribut aus windream auslesen
                        Dim oAttribute = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname)
                        ' den Variablentyp (String, Integer, ...) auslesen 
                        Dim vType = oAttribute.getVariableValue("dwAttrType")
                        Select Case (vType)
                            Case 4097
                                ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4097 Vektor alphanumerisch")
                            Case 4098
                                ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4098 Vektor Numerisch")
                            Case 4099
                                ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4099 Vektor Kommazahl")
                            Case 4101
                                ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4101 Vektor Date")
                            Case 4103
                                ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4103 Vektor DateTime")
                            Case 4107
                                ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4107 Vektor Integer(64bit)")
                            Case 36865
                                ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 36865 Vektor alphanumerisch")
                        End Select
                        Dim myArray
                        Dim Anzahl As Integer = aValues.Length - 1
                        'Vektorfeld wird mit EINEM Wert gefüllt
                        If Anzahl = 0 Then
                            ClassLogger.AddDetailLog(" - RunIndexing_Vektor: Vektorfeld wird mit EINEM Wert gefüllt ")
                            ReDim myArray(0)
                            Select Case (vType)
                                Case 4097
                                    myArray(0) = CStr(aValues(0))
                                Case 4098
                                    myArray(0) = CInt(aValues(0).Replace(" ", ""))
                                Case 4099
                                    Dim str As String = aValues(0)
                                    str = str.ToString.Replace(" ", "")
                                    myArray(0) = CDbl(str.Replace(".", ","))

                                Case 4101
                                    myArray(0) = CDate(aValues(0))
                                Case 4103
                                    myArray(0) = aValues(0)
                                Case 4107
                                    myArray(0) = Convert.ToInt64(aValues(0))
                                Case 36865
                                    myArray(0) = CStr(aValues(0))
                            End Select
                            ClassLogger.AddDetailLog(" - RunIndexing_Vektor: Konvertierter Wert: " & myArray(0).ToString)
                        Else
                            ClassLogger.AddDetailLog(" - RunIndexing_Vektor: Vektorfeld wird mit MEHREREN Werten gefüllt ")
                            'Die Größe des Arrays festlegen
                            ReDim myArray(Anzahl)
                            Dim i1 As Integer = 0
                            For Each aValue As String In aValues
                                Select Case (vType)
                                    Case 4107
                                        Dim wert = aValue.Replace(" ", "")
                                        wert = Convert.ToInt64(wert) 'ToInt64
                                        myArray(i1) = wert
                                    Case 4097
                                        myArray(i1) = CStr(aValue)
                                    Case 4098
                                        Dim wert = aValue.Replace(" ", "")
                                        Dim convertValue
                                        If IsNumeric(wert) Then
                                            Try
                                                convertValue = CInt(wert)
                                            Catch ex As Exception
                                                ClassLogger.AddDetailLog(" - Wert muss in Int64 konvertiert werden")
                                                convertValue = Convert.ToInt64(wert) 'ToInt64
                                            End Try
                                        Else
                                            '    ClassLoggerNI.Add(" - Indexierungswert '" & wert.ToString & "' kann nicht in Integer konvertiert werden")
                                            Return False
                                        End If

                                        myArray(i1) = convertValue
                                    Case 4099
                                        myArray(i1) = CDbl(aValue.Replace(".", ",").Replace(" ", ""))
                                    Case 4101
                                        myArray(i1) = CDate(aValue)
                                    Case 4103
                                        myArray(i1) = aValue
                                    Case 36865
                                        myArray(i1) = CStr(aValue)
                                    Case Else
                                        myArray(i1) = CStr(aValue)
                                End Select
                                i1 += 1
                            Next
                        End If
                        'Jetzt die Nachindexierung für Vektor-Felder
                        oDocument.SetVariableValue(indexname, myArray)
                        ClassLogger.AddDetailLog(" - RunIndexing_Vektor: 'SetVariableValue' für VEKTOR erfolgreich")

                        oDocument.Save()
                        oDocument.unlock()
                        ClassLogger.AddDetailLog(" - RunIndexing_Vektor: Indexierung erfolgreich beendet (Save und Unlock durchgeführt)")
                        Return True
                    End If
                Else
                    ClassLogger.Add(" >> RunIndexing_Vektor: Dokument ist gesperrt, Indexierung erst im nächsten Durchlauf!", True)
                    Return False
                End If
            End If
        Catch ex As Exception
            ClassLogger.Add("## Fehler in RunIndexing_Vektor - Fehler: " & ex.Message, True, "RunIndexingVektor")
            oDocument.Save()
            oDocument.unlock()
            Return False
        End Try


    End Function
    Public Shared Function RunIndexing(ByVal oDocument As WMObject, ByVal Indizes() As String, ByVal aValues() As Object, Profil As String, Objekttyp As String)
        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
                        ClassLogger.AddDetailLog(" - Indexwert ist leer/Nothing - Keine Nachindexierung")
                    End If
                    ' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
                    If oDocument.aObjectType.aName <> Objekttyp Then
                        ' ihr den entsprechenden Dokumenttyp zuweisen
                        oDocument.aObjectType = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, Objekttyp)
                        ' WMObject.aObjectType = selectedProfile.Dokumenttyp
                        ClassLogger.AddDetailLog(" - Objekttyp war '" & oDocument.aObjectType.aName & "' und wurde in '" & Objekttyp & "' geändert.")
                    Else
                        ClassLogger.AddDetailLog(" - Objekttyp war bereits gesetzts")
                    End If

                    Try
                        oDocument.Save()
                    Catch ex As Exception
                        ' wenn es einen Fehler beim 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
                        ' das entsprechende Attribut aus windream auslesen
                        Dim oAttribute = oSession.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
                            ClassLogger.AddDetailLog(" > Indexierung von Index '" & indexname & "'")
                            '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
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: WMObjectVariableValueTypeString")
                                    convertValue = CStr(value)
                                Case WMObjectVariableValueTypeInteger
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: WMObjectVariableValueTypeInteger")
                                    value = value.ToString.Replace(" ", "")
                                    If IsNumeric(value) = False Then
                                        ClassLogger.AddDetailLog(" >> Achtung: Value '" & value & "' kann nicht in Zahl konvertiert werden!")
                                    End If

                                    value = value.ToString.Replace(" ", "")
                                    convertValue = CInt(value)
                                    _int = True
                                Case WMObjectVariableValueTypeFloat
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: WMObjectVariableValueTypeFloat")
                                    value = value.ToString.Replace(" ", "")
                                    convertValue = CDbl(value)
                                Case WMObjectVariableValueTypeFixedPoint
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: WMObjectVariableValueTypeFixedPoint")
                                    value = value.ToString.Replace(" ", "")
                                    convertValue = CDbl(value)
                                    _dbl = True
                                Case WMObjectVariableValueTypeBoolean
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: WMObjectVariableValueTypeBoolean")
                                    convertValue = CBool(value)
                                    _bool = True
                                Case WMObjectVariableValueTypeDate
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: WMObjectVariableValueTypeDate")
                                    _date = True
                                    'Dim _date As Date = value
                                    convertValue = value
                                Case WMObjectVariableValueTypeTimeStamp
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: WMObjectVariableValueTypeTimeStamp")
                                    convertValue = CDbl(value)
                                Case WMObjectVariableValueTypeCurrency
                                    ClassLogger.AddDetailLog(" - 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
                                    ClassLogger.AddDetailLog(" - 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
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: WMObjectVariableValueTypeFloat")
                                    convertValue = CStr(value)
                                Case WMObjectVariableValueTypeVariant
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: WMObjectVariableValueTypeVariant")
                                    convertValue = CStr(value)
                                Case WMObjectVariableValueTypeFulltext
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: WMObjectVariableValueTypeFulltext")
                                    convertValue = CStr(value)
                                Case 4097
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4097 Vektor alphanumerisch")
                                    'Vektor alphanumerisch
                                    vektor = True
                                Case 4098
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4098 Vektor Numerisch")
                                    'Vektor Numerisch
                                    vektor = True
                                Case 4099
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4099 Vektor Kommazahl")
                                    'Vektor Kommazahl
                                    vektor = True
                                Case 4101
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4101 Vektor Date")
                                    'Vektor Kommazahl
                                    vektor = True
                                Case 4103
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4103 Vektor DateTime")
                                    'Vektor DateTime
                                    vektor = True
                                Case 4107
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 4107 Integer 64bit")
                                    vektor = True
                                Case 36865
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes: 36865 Vektor alphanumerisch")
                                    'Vektor Kommazahl
                                    vektor = True
                                Case Else
                                    ClassLogger.AddDetailLog(" - Typ des windream-Indexes konnte nicht bestimmt werden!")
                                    ClassLogger.AddDetailLog(" - 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
                                    ClassLogger.AddDetailLog(" - Konvertierter Wert: '" & convertValue.ToString & "'")
                                End If
                            End If
                            '############################################################################################
                            '####################### Der eigentliche Indexierungsvorgang ################################
                            '############################################################################################
                            If vektor = False Then
                                If convertValue.ToString Is Nothing = False Then
                                    ClassLogger.AddDetailLog(" - 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

                                    ClassLogger.Add(" >> Index '" & aName & "' wurde geschrieben", False)
                                    ClassLogger.Add("", False)
                                Else
                                    ClassLogger.Add(" >> Kein Indexwert vorhanden", False)
                                End If
                            Else
                                'VEKTORFELDER, ALSO ÜBERPRÜFEN OB ERGEBNIS-ARRAY GEFÜLLT IST
                                ClassLogger.AddDetailLog(" - VEKTORFELD: Vorbereiten des Arrays")

                                Dim myArray()
                                Dim DS As DataSet
                                Dim DT As DataTable
                                Dim DR As DataRow
                                ' --- DataSet zuweisen
                                DS = New windream_Result_Handler.MyDataset
                                ' --- Zugriff auf Tabelle
                                DT = DS.Tables("TBVEKTOR_INDEX")
                                ' --- den Filter auf den Indexnamen setzen
                                Dim expression As String
                                expression = "Indexname = '" & aName.ToString & "'"
                                Dim foundRows() As DataRow
                                ' Use the Select method to find all rows matching the filter.
                                foundRows = DT.Select(expression)
                                'For Each row As DataRow In DT.Rows
                                'MsgBox(aName & vbNewLine & row.Item("Indexname") & vbNewLine & CStr(row.Item("Wert")))
                                'Next
                                Dim Anzahl As Integer = foundRows.Count
                                'Vektorfeld wird mit EINEM Wert gefüllt
                                If Anzahl = 0 Then
                                    ClassLogger.AddDetailLog(" - 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 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
                                    ClassLogger.AddDetailLog(" - Konvertierter Wert: " & myArray(0).ToString)
                                Else
                                    ClassLogger.AddDetailLog(" - Vektorfeld wird mit MEHREREN Werten gefüllt ")
                                    Select Case vType
                                        Case 36865
                                            'Vektortyp ALPHANUMERISCH
                                            '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 DR In DT.Rows
                                                If DR.Item("Indexname") = aName.ToString Then
                                                    myArray(i1) = CStr(DR.Item("Value"))
                                                    ClassLogger.AddDetailLog(" - Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString)
                                                    i1 = i1 + 1
                                                End If
                                            Next
                                        Case 4097
                                            'Vektortyp ALPHANUMERISCH
                                            '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 DR In DT.Rows
                                                If DR.Item("Indexname") = aName.ToString Then
                                                    myArray(i1) = CStr(DR.Item("Value"))
                                                    ClassLogger.AddDetailLog(" - Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString)
                                                    i1 = i1 + 1
                                                End If
                                            Next
                                        Case 4107
                                            ReDim myArray(Anzahl - 1)
                                            Dim i1 As Integer = 0
                                            'Die Datatable durchlaufen und Werte für den Index in Array schreiben
                                            For Each DR In DT.Rows
                                                If DR.Item("Indexname") = aName.ToString Then
                                                    myArray(i1) = Convert.ToInt64((DR.Item("Value")))
                                                    i1 = i1 + 1
                                                End If
                                            Next
                                        Case 4098
                                            'Vektortyp NUMERISCH
                                            '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 DR In DT.Rows
                                                If DR.Item("Indexname") = aName.ToString Then
                                                    Dim v As String = DR.Item("Value").ToString.Replace(" ", "")
                                                    myArray(i1) = CInt(v)
                                                    ClassLogger.AddDetailLog(" - Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString)
                                                    i1 = i1 + 1
                                                End If
                                            Next
                                        Case 4099
                                            'Vektortyp FLOAT
                                            '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 DR In DT.Rows
                                                If DR.Item("Indexname") = aName.ToString Then
                                                    Dim Str As String = DR.Item("Value")
                                                    Str = Str.ToString.Replace(" ", "")
                                                    myArray(i1) = CDbl(Str.Replace(".", ","))
                                                    ClassLogger.AddDetailLog(" - Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString)
                                                    i1 = i1 + 1
                                                End If
                                            Next
                                        Case 4101
                                            'Vektortyp DATE
                                            '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 DR In DT.Rows
                                                If DR.Item("Indexname") = aName.ToString Then
                                                    Dim Str As String = DR.Item("Value")
                                                    myArray(i1) = CDate(Str.Replace(".", ","))
                                                    ClassLogger.AddDetailLog(" - Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString)
                                                    i1 = i1 + 1
                                                End If
                                            Next
                                        Case Else
                                            'Vektortyp ALPHANUMERISCH
                                            '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 DR In DT.Rows
                                                If DR.Item("Indexname") = aName.ToString Then
                                                    myArray(i1) = CStr(DR.Item("Value"))
                                                    ClassLogger.AddDetailLog(" - Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString)
                                                    i1 = i1 + 1
                                                End If
                                            Next
                                    End Select
                                End If
                                'Jetzt die Nachindexierung für Vektor-Felder
                                oDocument.SetVariableValue(aName, myArray)
                                ClassLogger.AddDetailLog(" - 'SetVariableValue' für VEKTOR erfolgreich")
                            End If
                        Else
                            ClassLogger.AddDetailLog(" >> Array der Indexwerte ist leer/Nothing - Keine Nachindexierung")
                        End If
                        i += 1

                    Next

                    ' oDocument.LockRights()

                    'SetRights(WMObject, User)
                    oDocument.Save()
                    oDocument.unlock()

                    ClassLogger.AddDetailLog(" > Indexierung erfolgreich beendet (Save und Unlock durchgeführt)")
                    ClassLogger.AddDetailLog("")


                    Return False
                Else
                    ClassLogger.Add(" >> Dokument ist gesperrt, Indexierung erst im nächsten Durchlauf!", False)
                    'oDocument.unlock()
                    Return True
                End If
            End If
        Catch ex As Exception
            ClassLogger.Add(ex.Message, True, "ClassSearchResult.RunIndexing")

            oDocument.Save()
            oDocument.unlock()
            Return True
        End Try
    End Function
#End Region


#Region "+++++ Allgemeine Funktionen die Informationen zurückliefern +++++"
    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)

                oController.CheckSearchProfile(wdfLocation.ToLower)
                Dim suchTyp = oController.SearchProfileTargetProgID
                Dim ExSettings As Object
                Dim oSearch As Object
                ExSettings = oController.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", GetCurrentServer)

                        oConnect.LoginSession(srchQuick.WMSession)

                        srchQuick.ClearSearch()
                        srchQuick.SearchProfilePath = ProfilePath
                        srchQuick.LoadSearchProfile(ProfileName)

                        oSearch = srchQuick.GetSearch()

                    Case "WMOSRCH.WMINDEXSEARCH"
                        srchIndex.WMSession = CreateObject("Windream.WMSession", GetCurrentServer)

                        oConnect.LoginSession(srchIndex.WMSession)

                        srchIndex.ClearSearch()
                        srchIndex.SearchProfilePath = ProfilePath
                        srchIndex.LoadSearchProfile(ProfileName)

                        oSearch = srchIndex.GetSearch()

                    Case "WMOSRCH.WMOBJECTTYPESEARCH"
                        srchObjectType.WMSession = CreateObject("Windream.WMSession", GetCurrentServer)

                        oConnect.LoginSession(srchObjectType.WMSession)

                        srchObjectType.ClearSearch()
                        srchObjectType.SearchProfilePath = ProfilePath
                        srchObjectType.LoadSearchProfile(ProfileName)

                        oSearch = srchObjectType.GetSearch()

                    Case Else
                        ClassLogger.Add("KEIN GÜLTIGER WINDREAM-SUCHTYP", True, "GetSearchDocuments")
                        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
                ClassLogger.Add("Unvorhergesehener Fehler: " & ex.Message, True, "GetSearchDocuments")
                Return Nothing
            End Try

        End If

        Return Nothing

    End Function
    ''' Liefert den Wert eines Indexes als String
    ''' _indexname = Name des zu überprüfenden Indexfeldes
    Public Function GetValueforIndex(ByVal _fullfilepath As String, _indexname As String)
        Try
            Const WMEntityDocument = 1
            Dim IndexwertAusWindream As Object = Nothing
            Dim _dok As WINDREAMLib.WMObject
            _dok = Nothing
            _dok = oSession.GetWMObjectByPath(WMEntityDocument, _fullfilepath) 'WINDREAMLib.WMEntity.WMEntityDocument
            IndexwertAusWindream = _dok.GetVariableValue(_indexname)
            Return IndexwertAusWindream.ToString
        Catch ex As Exception
            'MsgBox(ex.Message)
            Return Nothing
        End Try
    End Function
#End Region
End Class
