diff --git a/app/DD_PM_WINDREAM/ClassPMWindream.vb b/app/DD_PM_WINDREAM/ClassPMWindream.vb new file mode 100644 index 0000000..26ebceb --- /dev/null +++ b/app/DD_PM_WINDREAM/ClassPMWindream.vb @@ -0,0 +1,628 @@ +Imports WINDREAMLib +Imports WMOSRCHLib + +Public Class ClassPMWindream + + Inherits ClassWindream_allgemein + Dim clsWM As ClassWindream_allgemein + 'Private email As New ClassNIEmail + Private allgFunk As New ClassAllgemeineFunktionen +#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 + + Const WMObjectEditModeIndexEdit = &H3DA +#End Region + +#Region "+++++ Variablen +++++" + Private oController As New WMOSearchController +#End Region + +#Region "+++++ Allgemeine Methoden und Funktionen +++++" + Sub New() + MyBase.New() + End Sub + Private Function IsNotEmpty(ByVal aValue As Object) + If aValue IsNot Nothing Then + Return True + + 'If TypeOf aValue Is String Then + ' ' Änderung 28.08.2018: Auch ein leerer String gilt als Wert, damit indexfelder auch geleert werden können + ' '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 GetValuesfromAuswahlliste(ByVal listname As String) + Try + 'Dim oAttribute = Me.oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, listname) + 'Dim vType = oAttribute.getVariableValue("vItems") + 'Return vType + Dim oChoiceList = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityChoiceList, listname) + If Err.Number = 0 And TypeName(oChoiceList) <> "Nothing" Then + Dim Values = oChoiceList + Values = oChoiceList.GetVariableValue("vItems") + Dim anz As Integer = 0 + + For Each CLItem In Values + If oChoiceList.aName IsNot Nothing Then + anz += 1 + End If + Next + Dim strListe(anz - 1) + Dim zahl As Integer = 0 + For Each CLItem In Values + If oChoiceList.aName IsNot Nothing Then + strListe(zahl) = CLItem + zahl += 1 + End If + Next + Return strListe + Else + MsgBox("Auswahlliste: " & listname & " nicht gefunden!", MsgBoxStyle.Critical, "Fehler:") + Return Nothing + End If + + Catch ex As Exception + LOGGER.Error(ex) + MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler in GetValuesfromAuswahlliste:") + Return Nothing + End Try + End Function + Public Function Return_Type(Indexname As String) + Try + ' das entsprechende Attribut aus windream auslesen + Dim oAttribute = Me.oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, Indexname) + ' den Variablentyp (String, Integer, ...) auslesen + Dim vType = oAttribute.getVariableValue("dwAttrType") + Return vType.ToString + Catch ex As Exception + LOGGER.Error(ex) + MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler in Return_Type:") + Return "" + End Try + End Function + + Public Function RunIndexing(ByVal oDocument As WMObject, ByVal Indizes() As String, ByVal aValues() As Object) + Dim vType + Try + If Indizes IsNot Nothing And aValues IsNot Nothing Then + If Not oDocument.aLocked Then + + ' 02.07. Änderung der Lock Methode, um eine Validierung auch zuzulassen, wenn das Recht "Datei ändern" + ' nicht gesetzt ist + 'oDocument.lock() + + Try + oDocument.LockFor(WMObjectEditModeIndexEdit) + Catch ex As Exception + LOGGER.Error(ex) + frmValidator.idxerr_message = "Could not lock WMFile - Check Your rights and inform the admin!" + Return False + End Try + + 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 + 'Jetzt jeden Indexwert durchlaufen + For Each aName As String In Indizes + indexname = aName + ' das entsprechende Attribut aus windream auslesen + Dim oAttribute = Me.oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, Indizes(i)) + ' den Variablentyp (String, Integer, ...) auslesen + 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 convertValue + Dim vektor 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") + convertValue = CStr(value) + Case WMObjectVariableValueTypeInteger + LOGGER.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeInteger") + If IsNumeric(value) = False Then + frmValidator.idxerr_message = "Unerlaubte Eingabe in Numerisches Feld: " & value + LOGGER.Debug("Achtung: Value " & value & " kann nicht in Zahl konvertiert werden!") + oDocument.Save() + oDocument.unlock() + Return False + End If + convertValue = CInt(value) + _int = True + Case WMObjectVariableValueTypeFloat + LOGGER.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFloat") + Try + convertValue = CDbl(value) + Catch ex As Exception + LOGGER.Error(ex) + frmValidator.idxerr_message = "Could't convert value '" & value & "' to double!" + oDocument.Save() + oDocument.unlock() + Return False + End Try + + Case WMObjectVariableValueTypeFixedPoint + LOGGER.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFixedPoint") + Try + convertValue = CDbl(value) + Catch ex As Exception + LOGGER.Error(ex) + frmValidator.idxerr_message = "Could't convert value '" & value & "' to double!" + oDocument.Save() + oDocument.unlock() + Return False + End Try + + _dbl = True + Case WMObjectVariableValueTypeBoolean + LOGGER.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeBoolean") + convertValue = CBool(value) + _bool = True + Case WMObjectVariableValueTypeDate + LOGGER.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeDate") + _date = True + 'Dim _date As Date = value + convertValue = value + Case WMObjectVariableValueTypeTimeStamp + LOGGER.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeTimeStamp") + convertValue = CInt(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.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeTime", False) + 'If ((value)) Then + ' convertValue = CDate(value) + 'Else + ' convertValue = "" + 'End If + 'Dim _date As Date = value + convertValue = convertValue '*_date.ToShortTimeString + Case WMObjectVariableValueTypeFloat + LOGGER.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFloat", False) + convertValue = CStr(value) + Case WMObjectVariableValueTypeVariant + LOGGER.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeVariant", False) + convertValue = CStr(value) + Case WMObjectVariableValueTypeFulltext + LOGGER.Debug("Typ des windream-Indexes: WMObjectVariableValueTypeFulltext", False) + convertValue = CStr(value) + Case 4100 + LOGGER.Debug("Typ des windream-Indexes: 4100 Vektor Boolean", False) + vektor = True + Case 4101 + LOGGER.Debug("Typ des windream-Indexes: 4101 Vektor Date", False) + vektor = True + Case 4104 + LOGGER.Debug("Typ des windream-Indexes: 4104 Vektor Currency", False) + vektor = True + Case 4097 + LOGGER.Debug("Typ des windream-Indexes: 4097 Vektor alphanumerisch", False) + vektor = True + Case 4098 + LOGGER.Debug("Typ des windream-Indexes: 4098 Vektor Numerisch", False) + vektor = True + Case 4099 + LOGGER.Debug("Typ des windream-Indexes: 4099 Vektor Kommazahl", False) + vektor = True + Case 36865 + LOGGER.Debug("Typ des windream-Indexes: 36865 Vektor alphanumerisch", False) + vektor = True + Case Else + LOGGER.Debug("Typ des windream-Indexes konnte nicht bestimmt werden!", False) + LOGGER.Debug("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.Debug("Konvertierter Wert: '" & convertValue.ToString & "'", False) + End If + End If + '############################################################################################ + '####################### Der eigentliche Indexierungsvorgang ################################ + '############################################################################################ + If vektor = False Then + If convertValue.ToString Is Nothing = False Then + Try + LOGGER.Debug("Jetzt indexieren: oDocument.SetVariableValue(" & aName & ", " & convertValue.ToString & ")", False) + Catch ex As Exception + LOGGER.Error(ex) + LOGGER.Info(" >> Unexpected Error in Logging SetVariableValue for " & aName & ": " & ex.Message, False) + End Try + + 'Dim ArrValues() + 'ReDim ArrValues(0) + 'ArrValues(0) = convertValue + 'Dim ArrName() + 'ReDim ArrName(0) + 'ArrName(0) = "Tournr" + 'oDocument.SetValues(ArrName, ArrValues) + If _int = True Then + 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 + oDocument.SetVariableValue(aName, CDbl(convertValue)) + Else + oDocument.SetVariableValue(aName, convertValue) + End If + LOGGER.Debug("Index '" & aName & "' wurde geschrieben", False) + Else + LOGGER.Info(" >> Kein Indexwert vorhanden", False) + End If + Else + 'VEKTORFELDER, ALSO ÜBERPRÜFEN OB ERGEBNIS-ARRAY GEFÜLLT IST + LOGGER.Debug("VEKTORFELD: Vorbereiten des Arrays", False) + Dim myArray() + 'Dim anz As Integer = 0 + 'For Each obj In aValues + 'ReDim Preserve myArray(anz) + Select Case vType + Case 4100 + 'Vektortyp Boolean + 'Umwandeln in Boolean + 'Die Größe des Arrays festlegen + ReDim myArray(aValues.Length - 1) + Dim i1 As Integer = 0 + 'Das Array durchlaufen und Werte für den Index in Array schreiben + For Each obj In aValues + Select Case obj.ToString.ToLower + Case "falsch" + obj = False + Case "wahr" + obj = True + Case "nein" + obj = False + Case "ja" + obj = True + End Select + myArray(i1) = CBool(obj) + i1 = i1 + 1 + Next + Case 4101 + 'Vektortyp Date + 'Umwandeln in String + 'Die Größe des Arrays festlegen + ReDim myArray(aValues.Length - 1) + Dim i1 As Integer = 0 + 'Das Array durchlaufen und Werte für den Index in Array schreiben + For Each obj In aValues + myArray(i1) = CDate(obj) + i1 = i1 + 1 + Next + Case 4104 + 'Vektortyp Currency + 'Die Größe des Arrays festlegen + ReDim myArray(aValues.Length - 1) + Dim i1 As Integer = 0 + 'Das Array durchlaufen und Werte für den Index in Array schreiben + For Each obj In aValues + Dim aValueWrapper As System.Runtime.InteropServices.CurrencyWrapper = New System.Runtime.InteropServices.CurrencyWrapper(CDec(obj)) + myArray(i1) = aValueWrapper + i1 = i1 + 1 + Next + Case 4097 + 'Vektortyp ALPHANUMERISCH + 'Umwandeln in String + 'Die Größe des Arrays festlegen + ReDim myArray(aValues.Length - 1) + Dim i1 As Integer = 0 + 'Das Array durchlaufen und Werte für den Index in Array schreiben + For Each obj In aValues + myArray(i1) = CStr(obj) + i1 = i1 + 1 + Next + + Case 4098 + 'Umwandeln in Integer + 'Die Größe des Arrays festlegen + ReDim myArray(aValues.Length - 1) + Dim i1 As Integer = 0 + 'Das Array durchlaufen und Werte für den Index in Array schreiben + For Each obj In aValues + myArray(i1) = CInt(obj) + i1 = i1 + 1 + Next + Case 4099 + 'Umwandeln in Double + 'Die Größe des Arrays festlegen + ReDim myArray(aValues.Length - 1) + Dim i1 As Integer = 0 + 'Das Array durchlaufen und Werte für den Index in Array schreiben + For Each obj In aValues + Dim Str As String = obj + myArray(i1) = CDbl(Str.Replace(".", ",")) + i1 = i1 + 1 + Next + + Case 36865 + 'Umwandeln in String + 'Die Größe des Arrays festlegen + ReDim myArray(aValues.Length - 1) + Dim i1 As Integer = 0 + 'Das Array durchlaufen und Werte für den Index in Array schreiben + For Each obj In aValues + myArray(i1) = CStr(obj) + i1 = i1 + 1 + Next + Case Else + 'Umwandeln in String + 'Die Größe des Arrays festlegen + ReDim myArray(aValues.Length - 1) + Dim i1 As Integer = 0 + 'Das Array durchlaufen und Werte für den Index in Array schreiben + For Each obj In aValues + myArray(i1) = CStr(obj) + i1 = i1 + 1 + Next + End Select + + 'Jetzt die Nachindexierung für Vektor-Felder + oDocument.SetVariableValue(aName, myArray) + LOGGER.Debug("'SetVariableValue' für VEKTOR erfolgreich", False) + End If + End If + i += 1 + + Next + + ' oDocument.LockRights() + + 'SetRights(WMObject, User) + oDocument.Save() + oDocument.unlock() + LOGGER.Debug(" ### Indexierung erfolgreich beendet (Save und Unlock durchgeführt) ###", False) + Return True + Else + LOGGER.Info(" ### Dokument ist gesperrt, Indexierung nicht möglich! ###", False) + frmValidator.idxerr_message = "Dokument " & oDocument.aName & " ist gesperrt, Indexierung nicht möglich" + Return False + End If + End If + Catch ex As Exception + LOGGER.Error(ex) + LOGGER.Info("ClassSearchResult.RunIndexing - " & ex.Message, True) + frmValidator.idxerr_message = "Unvorhergesehener Fehler in Indexing: " & ex.Message & vbNewLine & "vType: " & vType.ToString + allgFunk.Insert_LogEntry($"ERROR RunIndexing>> {ex.Message}") + oDocument.Save() + oDocument.unlock() + Return False + End Try + End Function + + Public Sub SetfinalIndex(ByVal oDocument As WMObject, ByVal Indexname As String, ByVal _state As Boolean) + Try + If Indexname IsNot Nothing Then + If Not oDocument.aLocked Then + oDocument.LockFor(WMObjectEditModeIndexEdit) + Dim i As Integer = 0 + + ' das entsprechende Attribut aus windream auslesen + Dim oAttribute = Me.oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, Indexname) + ' den Variablentyp (String, Integer, ...) auslesen + Dim vType = oAttribute.getVariableValue("dwAttrType") + 'MsgBox("Typ: " & vType.ToString, MsgBoxStyle.Critical, "_state: " & _state.ToString) + ' wenn in aValues an Position i ein Wert steht + 'MsgBox(oDocument.aName & vbNewLine & aValues(i) & vbNewLine & vType, MsgBoxStyle.Exclamation, "Zeile 87") + Dim value = _state + Dim convertValue + 'Den Typ des Index-Feldes auslesen + LOGGER.Debug(">> Typ des windream-Indexes: " & vType.ToString) + Select Case (vType) + Case WMObjectVariableValueTypeBoolean + convertValue = CBool(value) + Case Else + LOGGER.Info(">> Typ des windream-Indexes ist nicht BOOLEAN also Abbruch:") + End Select + '############################################################################################ + '####################### Der eigentliche Indexierungsvorgang ################################ + + oDocument.SetVariableValue(Indexname, convertValue) + LOGGER.Debug(">> Index '" & Indexname & "' wurde gesetzt") + oDocument.Save() + oDocument.unlock() + LOGGER.Info(">> DATEI wurde erfolgreich als fertig nachindexiert gekennzeichnet") + Else + LOGGER.Info(">> Dokument ist gesperrt, Indexierung erst im nächsten Durchlauf!") + End If + End If + + + Catch ex As Exception + LOGGER.Error(ex) + LOGGER.Info("ClassSearchResult.SetfinalIndex - " & ex.Message, True) + 'If My.Settings.vNIMailsenden = True Then + ' email.Send_EMail("Fehler bei SetfinalIndex - Datei: " & oDocument.aName.ToString & " - Fehler: " & ex.Message) + 'End If + oDocument.Save() + oDocument.unlock() + End Try + End Sub +#End Region + + +#Region "+++++ Allgemeine Funktionen die Informationen zurückliefern +++++" + + Public Function Get_No_Documents(Profil As String, WD_Search As String) + Try + Dim wmsearch_exists As Boolean + Try + wmsearch_exists = System.IO.File.Exists(WD_Search) + Catch ex As Exception + LOGGER.Error(ex) + wmsearch_exists = clsWM.CheckFileExists(WD_Search) + + End Try + If wmsearch_exists = False Then + + LOGGER.Info(">> Windream Suche für Profil: '" & Profil & "' konnte nicht ausgeführt werden! Die Datei '" & WD_Search & "' existiert nicht!", False) + MsgBox("Windream Suche für Profil: '" & Profil & "' konnte nicht ausgeführt werden!" & vbNewLine & "Die Datei '" & WD_Search & "' existiert nicht!", MsgBoxStyle.Exclamation, "Achtung:") + 'wenn die gesuchte File eine Suche ist: per MAil informierne und Indexierung abbrechen + 'If My.Settings.vNIMailsenden = True Then + ' email.Send_EMail("Fehler bei Nachindexierung:
>> Profil: " & Me.aktivesProfil.Profilname & "
>> die windream-Suche : " & Me.aktivesProfil.WindreamSuche & " konnte nicht gefunden werden!" & _ + ' "
>> Mögliche Fehlerursache: Das W-Laufwerk ist nicht verfügbar!") + 'End If + Return 0 + Else + ' windream-Suche für Profil starten + Dim windreamSucheErgebnisse As WMObjects = Me.GetSearchDocuments(WD_Search) + + If windreamSucheErgebnisse.Count > 0 Then + ' neue Anzahl von Dateien + Return windreamSucheErgebnisse.Count + Else + ' keine Dateien zum Importieren + Return 0 + End If + End If + Catch ex As Exception + LOGGER.Error(ex) + LOGGER.Info(ex.Message) + Return 0 + End Try + + End Function + + Public Function GetSearchDocuments(ByVal wdfLocation As String) + + If clsWM.CheckFileExists(wdfLocation) = True 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 srchQuick As WMOSRCHLib.WMQuickSearch = CreateObject("WMOSrch.WMQuickSearch") + Dim srchIndex As WMOSRCHLib.WMIndexSearch = CreateObject("WMOSrch.WMIndexSearch") + Dim srchObjectType As WMOSRCHLib.WMObjectTypeSearch = CreateObject("WMOSrch.WMObjectTypeSearch") + + 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 + LOGGER.Info("KEIN GÜLTIGER WINDREAM-SUCHTYP") + Return Nothing + End Select + Dim WMObjects As Object + WMObjects = oSearch.Execute + Return oSearch.execute + + Catch ex As Exception + LOGGER.Error(ex) + ' bei einem Fehler einen Eintrag in der Logdatei machen + LOGGER.Info("Fehler in GetSearchDocuments - " & ex.Message, True) + 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 + LOGGER.Error(ex) + 'MsgBox(ex.Message) + Return Nothing + End Try + End Function +#End Region +End Class