Imports WINDREAMLib Imports WMOSRCHLib Imports DigitalData.Modules.Logging 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 Private Shared Logger As Logger 'Dim srchQuick = CreateObject("WMOSrch.WMQuickSearch") 'As WMOSRCHLib.WMQuickSearch #End Region #Region "+++++ Allgemeine Methoden und Funktionen +++++" Sub New(LogConf As LogConfig) MyBase.New(LogConf) Logger = LogConf.GetLogger LogConf.Debug = True End Sub Private 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 Function GetIndex_Type(idxName) As String Try Dim oAttribute = oWMSession.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 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 Logger.Warn("RunIndexing_Vektor: Indexwert ist leer/Nothing - Keine Nachindexierung") Else 'Jetzt jeden Indexwert durchlaufen Dim indexname As String indexname = Indizes(0) Logger.Debug("RunIndexing_Vektor: Indexname: " & indexname) 'VEKTORFELDER, ALSO ÜBERPRÜFEN OB ERGEBNIS-ARRAY GEFÜLLT IST Logger.Debug("RunIndexing_Vektor: VEKTORFELD-Indexierung: Vorbereiten des Arrays") ' das entsprechende Attribut aus windream auslesen Dim oAttribute = oWMSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname) ' den Variablentyp (String, Integer, ...) auslesen Dim vType = oAttribute.getVariableValue("dwAttrType") Select Case (vType) Case 4097 Logger.Debug("Typ des windream-Indexes: 4097 Vektor alphanumerisch") Case 4098 Logger.Debug("Typ des windream-Indexes: 4098 Vektor Numerisch") Case 4099 Logger.Debug("Typ des windream-Indexes: 4099 Vektor Kommazahl") Case 4100 Logger.Debug("Typ des windream-Indexes: 4100 Vektor Boolean") Case 4101 Logger.Debug("Typ des windream-Indexes: 4101 Vektor Date") Case 4103 Logger.Debug("Typ des windream-Indexes: 4103 Vektor DateTime") Case 4107 Logger.Debug("Typ des windream-Indexes: 4107 Vektor Integer(64bit)") Case 36865 Logger.Debug("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 Logger.Debug("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 4100 myArray(0) = CBool(aValues(0)) 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 Logger.Debug("RunIndexing_Vektor: Konvertierter Wert: " & myArray(0).ToString) Else Logger.Debug("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 OConvertValue If IsNumeric(wert) Then Try OConvertValue = CInt(wert) Catch ex As Exception Logger.Debug("Wert muss in Int64 konvertiert werden") OConvertValue = Convert.ToInt64(wert) 'ToInt64 End Try Else ' clsLoggerNI.Add("Indexierungswert '" & wert.ToString & "' kann nicht in Integer konvertiert werden") Return False End If myArray(i1) = OConvertValue Case 4099 myArray(i1) = CDbl(aValue.Replace(".", ",").Replace(" ", "")) Case 4100 myArray(i1) = CBool(aValue) 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) Logger.Debug("RunIndexing_Vektor: 'SetVariableValue' für VEKTOR erfolgreich") oDocument.Save() oDocument.unlock() Logger.Debug("RunIndexing_Vektor: Indexierung erfolgreich beendet (Save und Unlock durchgeführt)") Return True End If Else Logger.Warn("RunIndexing_Vektor: Dokument ist gesperrt, Indexierung erst im nächsten Durchlauf!") Return False End If End If Catch ex As Exception Logger.Error(ex) 'clsLogger.AddError("## Fehler in RunIndexing_Vektor - Fehler: " & ex.Message, "RunIndexingVektor") oDocument.Save() oDocument.unlock() Return False End Try End Function Public Function RunIndexing(ByVal oDocument As WMObject, ByVal Indizes() As String, ByVal aValues() As Object, 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 Logger.Debug("Indexwert ist leer/Nothing - Keine Indexierung") End If ' wenn der Datei noch kein Dokumenttyp zugewiesen wurde If oDocument.aObjectType.aName <> Objekttyp Then ' ihr den entsprechenden Dokumenttyp zuweisen oDocument.aObjectType = oWMSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, Objekttyp) ' WMObject.aObjectType = selectedProfile.Dokumenttyp Logger.Debug("Objekttyp war Standard und wurde in '" & Objekttyp & "' geändert.") Else Logger.Debug("Objekttyp war bereits gesetzt") 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 = oWMSession.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 Logger.Debug("Indexierung von Index '" & indexname & "'") 'MsgBox(oDocument.aName & vbNewLine & aValues(i) & vbNewLine & vType, MsgBoxStyle.Exclamation, "Zeile 87") Dim value = aValues(i) Dim OConvertValue Dim oIsVector As Boolean = False 'Den Typ des Index-Feldes auslesen 'MsgBox(value.GetType.ToString) Select Case (vType) 'Case WMObjectVariableValueTypeUndefined Case WMObjectVariableValueTypeString Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeString") OConvertValue = CStr(value) Logger.Debug($"OConvertValue.Length [{OConvertValue.ToString.Length}] - Content/Value: [{OConvertValue}]") Case WMObjectVariableValueTypeInteger Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeInteger") value = value.ToString.Replace(" ", "") If IsNumeric(value) = False Then Logger.Debug("Achtung: Value '" & value & "' kann nicht in Zahl konvertiert werden!") End If value = value.ToString.Replace(" ", "") OConvertValue = CInt(value) _int = True Case WMObjectVariableValueTypeFloat Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFloat") value = value.ToString.Replace(" ", "") OConvertValue = CDbl(value) Case WMObjectVariableValueTypeFixedPoint Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFixedPoint") value = value.ToString.Replace(" ", "") OConvertValue = CDbl(value) _dbl = True Case WMObjectVariableValueTypeBoolean Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeBoolean") OConvertValue = CBool(value) _bool = True Case WMObjectVariableValueTypeDate Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeDate") _date = True 'Dim _date As Date = value OConvertValue = value Case WMObjectVariableValueTypeTimeStamp Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeTimeStamp") OConvertValue = CDbl(value) Case WMObjectVariableValueTypeCurrency Logger.Debug("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)) OConvertValue = aValueWrapper Case WMObjectVariableValueTypeTime Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeTime") 'If ((value)) Then ' OConvertValue = CDate(value) 'Else ' OConvertValue = "" 'End If 'Dim _date As Date = value OConvertValue = OConvertValue '*_date.ToShortTimeString Case WMObjectVariableValueTypeFloat Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFloat") OConvertValue = CStr(value) Case WMObjectVariableValueTypeVariant Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeVariant") OConvertValue = CStr(value) Case WMObjectVariableValueTypeFulltext Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFulltext") OConvertValue = CStr(value) Case 4097 Logger.Debug("Typ des windream-Indexes: 4097 Vektor alphanumerisch") 'Vektor alphanumerisch oIsVector = True Case 4098 Logger.Debug("Typ des windream-Indexes: 4098 oIsVector Numerisch") 'Vektor Numerisch oIsVector = True Case 4099 Logger.Debug("Typ des windream-Indexes: 4099 Vektor Kommazahl") 'Vektor Kommazahl oIsVector = True Case 4100 Logger.Debug("Typ des windream-Indexes: 4100 Vektor Boolean") oIsVector = True Case 4101 Logger.Debug("Typ des windream-Indexes: 4101 Vektor Date") 'Vektor Kommazahl oIsVector = True Case 4103 Logger.Debug("Typ des windream-Indexes: 4103 Vektor DateTime") 'Vektor DateTime oIsVector = True Case 4107 Logger.Debug("Typ des windream-Indexes: 4107 Integer 64bit") oIsVector = True Case 36865 Logger.Debug("Typ des windream-Indexes: 36865 Vektor alphanumerisch") 'Vektor Kommazahl oIsVector = True Case Else Logger.Debug($"Typ des windream-Indexes [{indexname} - Typ: {vType.ToString} ] konnte nicht bestimmt werden!") Logger.Debug("Versuch des Auslesens (vType): " & vType) 'MsgBox(vType & vbNewLine & CStr(value), MsgBoxStyle.Exclamation, "Marlon-Case Else") OConvertValue = "" End Select If oIsVector = False Then If OConvertValue.ToString Is Nothing = False Then Logger.Debug("Konvertierter Wert: '" & OConvertValue.ToString & "'") End If End If '############################################################################################ '####################### Der eigentliche Indexierungsvorgang ################################ '############################################################################################ If oIsVector = False Then If OConvertValue.ToString Is Nothing = False Then Logger.Debug("Versuch dem Dok einen Index zuzuweisen: oDocument.SetVariableValue(" & aName & ", " & OConvertValue & ")") If _int = True Then OConvertValue = OConvertValue.ToString.Replace(" ", "") oDocument.SetVariableValue(aName, CInt(OConvertValue)) ElseIf _date = True Then oDocument.SetVariableValue(aName, CDate(OConvertValue)) ElseIf _bool Then oDocument.SetVariableValue(aName, CBool(OConvertValue)) ElseIf _dbl Then OConvertValue = OConvertValue.ToString.Replace(" ", "") oDocument.SetVariableValue(aName, CDbl(OConvertValue)) Else If OConvertValue.ToString.Length <= 512 Then oDocument.SetVariableValue(aName, OConvertValue) Else Logger.Info($"Will not set indexvalue of index [{aName}] with the full length as Length > 512 [{OConvertValue.ToString.Length}]") oDocument.SetVariableValue(aName, OConvertValue.ToString.Substring(0, 511)) End If End If Logger.Info(String.Format("Index '{0}' was written with value '{1}'", aName, OConvertValue)) Logger.Info("") Else Logger.Warn("Kein Indexwert vorhanden") End If Else 'VEKTORFELDER, ALSO ÜBERPRÜFEN OB ERGEBNIS-ARRAY GEFÜLLT IST Logger.Debug("VEKTORFELD: Vorbereiten des Arrays") Dim myArray() 'Dim DS As DataSet 'Dim DT As DataTable 'Dim DR As DataRow '' --- DataSet zuweisen 'DS = New MyDataset '' --- Zugriff auf Tabelle 'DT = DS.Tables("TBVEKTOR_INDEX") 'DT.Clear() 'For Each NewValue As Object In aValues 'Next '' --- 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 = aValues.Length 'Vektorfeld wird mit EINEM Wert gefüllt If Anzahl = 1 And vType = 4100 Then Logger.Debug("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 myArray(0) = CBool(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 Logger.Debug("Konvertierter Wert: " & myArray(0).ToString) Else Logger.Debug("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 NewValue As Object In aValues myArray(i1) = CStr(NewValue) Logger.Debug("Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString) i1 = i1 + 1 Next For Each NewValue As Object In aValues myArray(i1) = CStr(NewValue) Logger.Debug("Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString) i1 = i1 + 1 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 NewValue As Object In aValues myArray(i1) = CStr(NewValue) Logger.Debug("Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString) i1 = i1 + 1 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 NewValue As Object In aValues myArray(i1) = Convert.ToInt64((NewValue)) i1 = i1 + 1 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 NewValue As Object In aValues Dim v As String = NewValue.ToString.Replace(" ", "") myArray(i1) = CInt(v) Logger.Debug("Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString) i1 = i1 + 1 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 NewValue As Object In aValues Dim Str As String = NewValue Str = Str.ToString.Replace(" ", "") myArray(i1) = CDbl(Str.Replace(".", ",")) Logger.Debug("Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString) i1 = i1 + 1 Next Case 4100 ReDim myArray(Anzahl - 1) Dim i1 As Integer = 0 'Die Datatable durchlaufen und Werte für den Index in Array schreiben For Each NewValue As Object In aValues Dim Str As String = NewValue.ToString myArray(i1) = CBool(Str) Logger.Debug("Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString) i1 = i1 + 1 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 NewValue As Object In aValues Dim Str As String = NewValue.ToString myArray(i1) = CDate(Str.Replace(".", ",")) Logger.Debug("Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString) i1 = i1 + 1 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 NewValue As Object In aValues myArray(i1) = CStr(NewValue) Logger.Debug("Konvertierter Wert: (" & i1 & ")" & myArray(i1).ToString) i1 = i1 + 1 Next End Select End If 'Jetzt die Nachindexierung für Vektor-Felder oDocument.SetVariableValue(aName, myArray) Logger.Info(String.Format("Vektor-Index '{0}' was written!", aName)) Logger.Info("") Dim sm = oDocument.aName End If Else Logger.Debug("Array der Indexwerte ist leer/Nothing - Keine Nachindexierung") End If i += 1 Next ' oDocument.LockRights() 'SetRights(WMObject, User) oDocument.Save() oDocument.unlock() Logger.Debug("Indexierung erfolgreich beendet (Save und Unlock durchgeführt)") Logger.Debug("") Return True Else Logger.Warn("Dokument ist gesperrt, Indexierung erst im nächsten Durchlauf!") 'oDocument.unlock() Return False End If End If Catch ex As Exception Logger.Error(ex) 'clsLogger.AddError(ex.Message, "ClassSearchResult.RunIndexing") oDocument.Save() oDocument.unlock() Return False End Try End Function #End Region Public Function GetVektorArray(ByVal oDocument As WMObject, oIndexName As String, NIIndexe As Object, CheckDuplikat As Boolean) Try If GetCheckIsVector(oIndexName) = False Then Return Nothing End If Dim missing As Boolean = False Dim Anzahl As Integer = 0 Dim ValueArray() 'Jeden Wert des Vektorfeldes durchlaufen Dim wertWD = oDocument.GetVariableValue(oIndexName) 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 If CheckDuplikat = False Then For Each value As Object In wertWD 'Das Array anpassen ReDim Preserve ValueArray(Anzahl) 'Den Wert im Array speichern ValueArray(Anzahl) = value.ToString Anzahl += 1 Next 'Und jetzt den/die Neuen Wert(e) anfügen For Each NewValue As Object In NIIndexe If NewValue Is Nothing = False Then 'Das Array anpassen ReDim Preserve ValueArray(Anzahl) 'Den Wert im Array speichern ValueArray(Anzahl) = NewValue.ToString Anzahl += 1 End If Next Else Logger.Debug("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 Logger.Debug("Value (" & 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 Logger.Debug("New Value (" & Anzahl & ") " & NewValue.ToString) 'Das Array anpassen ReDim Preserve ValueArray(Anzahl) 'Den Wert im Array speichern ValueArray(Anzahl) = NewValue.ToString Anzahl += 1 Else Logger.Debug("Value '" & NewValue.ToString & "' bereits in Vektorfeld enthalten") End If End If Next End If End If Else Logger.Debug("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 CheckDuplikat = True 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.Debug("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 Else '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 Logger.Debug("Return ValueArray: length " & ValueArray.Length) Return ValueArray Catch ex As Exception Logger.Error(ex) ClassCurrent.MESSAGE_ERROR = True 'clsLogger.AddError(ex.Message, "Return_VektorArray") Return Nothing End Try End Function #Region "+++++ Allgemeine Funktionen die Informationen zurückliefern +++++" Public Function GetCheckIsVector(oIndexname As String) Dim oAttribute = oWMSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, oIndexname) ' den Variablentyp (String, Integer, ...) auslesen Dim vType = oAttribute.getVariableValue("dwAttrType") Select Case (vType) 'Case WMObjectVariableValueTypeUndefined Case WMObjectVariableValueTypeString Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeString") Case WMObjectVariableValueTypeInteger Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeInteger") Case WMObjectVariableValueTypeFloat Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFloat") Case WMObjectVariableValueTypeFixedPoint Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFixedPoint") Case WMObjectVariableValueTypeBoolean Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeBoolean") Case WMObjectVariableValueTypeDate Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeDate") Case WMObjectVariableValueTypeTimeStamp Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeTimeStamp") Case WMObjectVariableValueTypeCurrency Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeCurrency") Case WMObjectVariableValueTypeTime Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeTime") Case WMObjectVariableValueTypeFloat Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFloat") Case WMObjectVariableValueTypeVariant Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeVariant") Case WMObjectVariableValueTypeFulltext Logger.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFulltext") Case 4097 Logger.Debug("Typ des windream-Indexes: 4097 Vektor alphanumerisch") 'Vektor alphanumerisch Return True Case 4098 Logger.Debug("Typ des windream-Indexes: 4098 oIsVector Numerisch") Return True Case 4099 Logger.Debug("Typ des windream-Indexes: 4099 Vektor Kommazahl") Return True Case 4100 Logger.Debug("Typ des windream-Indexes: 4100 Vektor Boolean") Return True Case 4101 Logger.Debug("Typ des windream-Indexes: 4101 Vektor Date") Return True Case 4103 Logger.Debug("Typ des windream-Indexes: 4103 Vektor DateTime") Return True Case 4107 Logger.Debug("Typ des windream-Indexes: 4107 Integer 64bit") Return True Case 36865 Logger.Debug("Typ des windream-Indexes: 36865 Vektor alphanumerisch") Return True Case Else Logger.Debug($"GetCheckISVektor Typ des windream-Indexes [{oIndexname} - Typ: {vType.ToString} ] konnte nicht bestimmt werden!") End Select Return False 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 = oWMSession.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 ''' Liefert den Wert eines Indexes als String ''' _indexname = Name des zu überprüfenden Indexfeldes Public Function GetValueforIndex_WMFile(ByVal _dok As WMObject, _indexname As String) Try Const WMEntityDocument = 1 Dim IndexwertAusWindream As Object = Nothing IndexwertAusWindream = _dok.GetVariableValue(_indexname) Return IndexwertAusWindream.ToString Catch ex As Exception 'MsgBox(ex.Message) Return Nothing End Try End Function #End Region End Class