diff --git a/Modules.Windream/Windream.vb b/Modules.Windream/Windream.vb index 6c9bd42d..97799f2e 100644 --- a/Modules.Windream/Windream.vb +++ b/Modules.Windream/Windream.vb @@ -12,14 +12,12 @@ Public Class Windream #Region "+++++ Variables +++++" Private Shared Logger As NLog.Logger = NLog.LogManager.GetCurrentClassLogger - Private CurrentController As WMOSearchController - Private WMDriveLetter As String = "W" - Private ServerBrowser As IServerBrowser - Private CurrentSession As IWMSession6 - Private CurrentConnect As IWMConnect2 - Private CurrentWMServer As String + Private CurrentController As WMOSearchController + Private CurrentSession As WMSession + Private CurrentConnect As WMConnect + Private CurrentServer As String Private CurrentObjecttypes As WMObjects Private ReconnectSession As Boolean @@ -48,6 +46,7 @@ Public Class Windream End Try End Sub + Private Function GetObjectTypes() As WMObjects Dim objectTypes As WMObjects @@ -60,6 +59,25 @@ Public Class Windream End Try End Function + ''' + ''' Returns all Objecttypes of current server as list of strings + ''' + ''' List of String of all objecttypes + ''' + Public Function GetObjecttypeNames() As List(Of String) + Dim objectTypes As New List(Of String) + + Try + For i As Integer = 0 To CurrentObjecttypes.Count + objectTypes.Add(CurrentObjecttypes.Item(i).aName) + Next + Return objectTypes + Catch ex As Exception + Logger.Error(ex) + Return Nothing + End Try + End Function + Private Function NormalizePath(path As String) Dim normalizedPath = path @@ -78,6 +96,7 @@ Public Class Windream Public Function NewSession() As Boolean Try ServerBrowser = New ServerBrowser() + CurrentServer = ServerBrowser.GetCurrentServer Catch ex As Exception Logger.Error(ex, "Could not create ServerBrowser") Return False @@ -85,16 +104,15 @@ Public Class Windream Try ' Create Connect Object for Session - CurrentConnect = New WMConnect With { - .ModuleId = 9 - } + CurrentConnect = New WMConnect Catch ex As Exception Logger.Error(ex, "Could not create WMConnect") Return False End Try Try - CurrentSession = New WMSession() + ' Create session object with severname set + CurrentSession = CreateObject("Windream.WMSession", ServerBrowser.GetCurrentServer) Catch ex As Exception Logger.Error(ex, "Could not create WMConnect") Return False @@ -116,7 +134,7 @@ Public Class Windream Return False End Try - If Not CurrentSession.aLoggedin Then + If TestLoggedInSession() = False Then Logger.Warn("Session created but user {0} could not be logged in", Environment.UserName) Return False End If @@ -133,7 +151,7 @@ Public Class Windream ''' Public Function NewFolder(ByVal folderpath As String) Try - If CurrentSession.aLoggedin Then + If TestLoggedInSession() = False Then Return False End If folderpath = NormalizePath(folderpath) @@ -167,7 +185,7 @@ Public Class Windream ''' Returns true when folder was created, false if not ''' Public Function NewIndexFile(WMFile As String, ByVal indexname As String, ByVal aValues() As String) As Boolean - If TestSession() = False Then + If TestLoggedInSession() = False Then Return False End If Dim oWMFile As WMObject = GetWMObjectForFile(WMFile) @@ -196,7 +214,7 @@ Public Class Windream ' das entsprechende Attribut aus windream auslesen Dim oAttribute = CurrentSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname) ' den Variablentyp (String, Integer, ...) auslesen - oWMType = oAttribute.getVariableValue("dwAttrType") + oWMType = oAttribute.GetVariableValue("dwAttrType") Catch ex As Exception Logger.Error(ex) Return False @@ -359,7 +377,7 @@ Public Class Windream ''' Public Function NewObjecttypeForFolder(folderpath As String, folderObjecttype As String) As Boolean Try - If CurrentSession.aLoggedin Then + If TestLoggedInSession() = False Then Return False End If Dim result As Boolean = False @@ -419,14 +437,14 @@ Public Class Windream ''' Public Function NewVersion(ByVal WMPath As String, ByVal Comment As String) Try - If CurrentSession.aLoggedin Then + If TestLoggedInSession() = False Then Return False End If WMPath = NormalizePath(WMPath) - Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject + Dim WMObject As WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject Try - WMObject = CurrentSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WMPath) 'WINDREAMLib.WMEntity.WMEntityDocument + WMObject = CurrentSession.GetWMObjectByPath(WMEntityDocument, WMPath) 'WINDREAMLib.WMEntity.WMEntityDocument Catch ex As Exception Logger.Warn("Could not create WMObject in Create_Version for file '" & WMPath & "': " & ex.Message) Return False @@ -443,47 +461,43 @@ Public Class Windream ''' ''' Returns all choicelists ''' - ''' choicelists as String-Array - ''' - Public Function GetChoiceLists() As DataTable - Dim dtresult As New DataTable - dtresult.Columns.Add("RESULT", GetType(String)) - If CurrentSession.aLoggedin Then - Return dtresult + ''' Choicelists as List of Strings or empty list if no choice lists are found + Public Function GetChoiceLists() As List(Of String) + Dim items As New List(Of String) + + If TestLoggedInSession() = False Then + Return items End If + Try - Dim oChoiceLists As WMObjects - Dim oChoiceList As IWMObject2 - ' den Objekttyp laden - oChoiceLists = CurrentSession.GetAllObjects(WMEntityChoiceList) - 'Array für Indizes vorbereiten + Dim choiceLists As WMObjects + Dim choiceList As IWMObject2 + 'load list of choicelists + choiceLists = CurrentSession.GetAllObjects(WMEntityChoiceList) - - For j As Integer = 0 To oChoiceLists.Count() - 1 - - ' aktuellee Liste ausleseb auslesen - oChoiceList = oChoiceLists.Item(j) - dtresult.Rows.Add(oChoiceList.aName) + For Each choiceList In choiceLists + items.Add(choiceList.aName) Next - dtresult.AcceptChanges() - Return dtresult + Return items Catch ex As Exception Logger.Error(ex) - Return dtresult + Return items End Try End Function + ''' ''' Returns all indices for an objecttype ''' ''' Name of objecttype - ''' Name of containing indices as String-Array + ''' Names of indices as list of String ''' - Public Function GetIndicesByObjecttype(ByVal ObjecttypeName As String) As String() + Public Function GetIndicesByObjecttype(ByVal ObjecttypeName As String) As List(Of String) Try - If CurrentSession.aLoggedin Then + If TestLoggedInSession() = False Then Return Nothing End If + Dim oObjectType As WMObject Dim oIndexAttributes As WMObjectRelation Dim oIndexAttribute As WMObject @@ -497,7 +511,8 @@ Public Class Windream oIndexAttributes = oObjectType.GetWMObjectRelationByName("TypeAttributes") ' Array für Indizes vorbereiten - Dim aIndexNames(oIndexAttributes.Count - 1) As String + 'Dim aIndexNames(oIndexAttributes.Count - 1) As String + Dim indexNames As New List(Of String) ' alle Indizes durchlaufen For j As Integer = 0 To oIndexAttributes.Count - 1 @@ -512,81 +527,64 @@ Public Class Windream oIndex = oRelProperties.Item(0) ' Indexname speichern - aIndexNames(j) = oIndex.aName + 'aIndexNames(j) = oIndex.aName + indexNames.Add(oIndex.aName) Next ' Indexarray zurückgeben - Return aIndexNames + 'Return aIndexNames + Return indexNames Catch ex As Exception Logger.Error(ex) Return Nothing End Try End Function - '''' - '''' Returns all items of a choicelist - '''' - '''' name of choicelist - '''' items as String-Array - '''' - 'Public Function GetChoicelistItems(ByVal NameChoicelist As String) As DataTable - ' Dim dtresult As New DataTable - ' dtresult.Columns.Add("RESULT", GetType(String)) - ' Try - ' 'Dim oAttribute = Me.oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname) - ' 'Dim vType = oAttribute.getVariableValue("vItems") - ' 'Return vType - ' Dim oChoiceList = CurrentSession.GetWMObjectByName(WMEntityChoiceList, NameChoicelist) - ' If Err.Number = 0 And TypeName(oChoiceList) <> "Nothing" Then - ' Dim oValues = oChoiceList - ' oValues = oChoiceList.GetVariableValue("vItems") - ' Dim anz As Integer = 0 - ' For Each CLItem In oValues - ' If oChoiceList.aName IsNot Nothing Then - ' anz += 1 - ' End If - ' Next - ' Dim strListe(anz - 1) - ' Dim zahl As Integer = 0 - ' For Each CLItem In oValues - ' If oChoiceList.aName IsNot Nothing Then - ' dtresult.Rows.Add(CLItem) - ' strListe(zahl) = CLItem - ' zahl += 1 - ' End If - ' dtresult.AcceptChanges() - ' Next - ' Return dtresult - ' Else - ' Logger.Warn("WMchoicelist: " & NameChoicelist & " not found!") - ' Return dtresult - ' End If - - ' Catch ex As Exception - ' Logger.Error(ex) - ' Return Nothing - ' End Try - 'End Function ''' - ''' Returns all Objecttypes of current server as array of strings + ''' Returns all items of a choicelist ''' - ''' array(String) of all objecttypes + ''' name of choicelist + ''' Items as list of String ''' - Public Function GetObjecttypesAsStrings() As DataTable - Dim dtresult As New DataTable - dtresult.Columns.Add("RESULT", GetType(String)) + Public Function GetChoicelistItems(ByVal NameChoicelist As String) As List(Of String) + Dim items As New List(Of String) + + If TestLoggedInSession() = False Then + Return Nothing + End If + + Dim choiceList As WMObject + + ' Try to get the choicelist first and abort if an error occurs Try - For i As Integer = 0 To CurrentObjecttypes.Count - dtresult.Rows.Add(CurrentObjecttypes.Item(i).aName) - Next - dtresult.AcceptChanges() - Return dtresult + Dim session As IWMSession2 = DirectCast(CurrentSession, IWMSession2) + choiceList = session.GetWMObjectByName(WMEntityChoiceList, NameChoicelist) Catch ex As Exception Logger.Error(ex) - Return dtresult + Return Nothing End Try + + ' Try to get choicelist items + Try + Dim values As Object = choiceList.GetVariableValue("vItems") + + ' If values is nothing, the list is empty + If values Is Nothing Then + Return items + End If + + For Each value In values + items.Add(value) + Next + Catch ex As Exception + Logger.Error(ex) + Return Nothing + End Try + + Return items End Function + ''' ''' Returns the result of windream-search ''' @@ -598,7 +596,7 @@ Public Class Windream Dim dtresult As New DataTable dtresult.Columns.Add("DOC_ID", GetType(Integer)) dtresult.Columns.Add("PATH", GetType(String)) - If Not CurrentSession.aLoggedin Then + If Not TestLoggedInSession() = False Then Return dtresult End If If TestWMFileExists(wdfLocation) = False Then @@ -623,7 +621,7 @@ Public Class Windream '' 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", CurrentWMServer) + srchQuick.WMSession = CreateObject("Windream.WMSession", CurrentServer) CurrentConnect.LoginSession(srchQuick.WMSession) @@ -634,7 +632,7 @@ Public Class Windream oSearch = srchQuick.GetSearch() Case "WMOSRCH.WMINDEXSEARCH" - srchIndex.WMSession = CreateObject("Windream.WMSession", CurrentWMServer) + srchIndex.WMSession = CreateObject("Windream.WMSession", CurrentServer) CurrentConnect.LoginSession(srchIndex.WMSession) @@ -645,7 +643,7 @@ Public Class Windream oSearch = srchIndex.GetSearch() Case "WMOSRCH.WMOBJECTTYPESEARCH" - srchObjectType.WMSession = CreateObject("Windream.WMSession", CurrentWMServer) + srchObjectType.WMSession = CreateObject("Windream.WMSession", CurrentServer) CurrentConnect.LoginSession(srchObjectType.WMSession) @@ -687,7 +685,7 @@ Public Class Windream ''' Public Function GetTypeOfIndexAsInt(ByVal indexname As String) As Integer Try - If CurrentSession.aLoggedin Then + If TestLoggedInSession() = False Then Return False End If Dim oAttribute = CurrentSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname) @@ -707,12 +705,12 @@ Public Class Windream Public Function GetValueforIndex(ByVal WMFile As String, ByVal NameIndex As String) As DataTable Dim dt As New DataTable dt.Columns.Add("RESULT", GetType(String)) - If TestSession() = False Then + If TestLoggedInSession() = False Then Return dt End If Try - If Not WMFile.StartsWith("\") And WMFile.ToUpper.StartsWith(WMDriveLetter.ToUpper) Then + If Not WMFile.StartsWith("\") And WMFile.ToUpper.StartsWith(DriveLetter.ToUpper) Then WMFile = WMFile.Substring(2) End If Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject @@ -751,7 +749,7 @@ Public Class Windream ''' Public Function Return_VektorArray(ByVal oDocument As WMObject, vktIndexName As String, arrIndexwerte As Object, vType As Object) Try - If CurrentSession.aLoggedin Then + If TestLoggedInSession() = False Then Return False End If Dim missing As Boolean = False @@ -827,7 +825,7 @@ Public Class Windream ''' Public Function GetWMObjectForFile(ByVal WMPath As String) As WMObject Try - If CurrentSession.aLoggedin Then + If TestLoggedInSession() = False Then Return Nothing End If WMPath = NormalizePath(WMPath) @@ -854,7 +852,7 @@ Public Class Windream ''' Public Function TestFolderExists(folderpath As String) Try - If CurrentSession.aLoggedin Then + If TestLoggedInSession() = False Then Return False End If folderpath = NormalizePath(folderpath) @@ -877,7 +875,7 @@ Public Class Windream ''' Public Function TestWMFileExists(ByVal WMPath As String) Try - If CurrentSession.aLoggedin Then + If TestLoggedInSession() = False Then Return False End If WMPath = NormalizePath(WMPath) @@ -891,7 +889,9 @@ Public Class Windream Return False End Try End Function - Private Function TestSession() As Boolean + + + Private Function TestLoggedInSession() As Boolean Try If CurrentSession.aLoggedin Then Return True @@ -911,10 +911,10 @@ Public Class Windream ''' Public Function TestWMUSerExists(username As String) As Boolean Try - If TestSession() = False Then + If TestLoggedInSession() = False Then Return False End If - Return CurrentSession.WMObjectExists(WINDREAMLib.WMEntity.WMEntityUser, username, 0, 0) + Return CurrentSession.WMObjectExists(WMEntityUser, username, 0, 0) Catch ex As Exception Logger.Error(ex) Return False @@ -928,10 +928,10 @@ Public Class Windream ''' Public Function TestWMGroupExists(groupname As String) Try - If TestSession() = False Then + If TestLoggedInSession() = False Then Return False End If - Return CurrentSession.WMObjectExists(WINDREAMLib.WMEntity.WMEntityGroups, groupname, 0, 0) + Return CurrentSession.WMObjectExists(WMEntityGroups, groupname, 0, 0) Catch ex As Exception Logger.Error(ex) Return False @@ -972,7 +972,7 @@ Public Class Windream Public Function REMOVE_VEKTOR_LINK(ByVal WMPath As String, vktIndexName As String, deleteValue As String) Try Logger.Info("Removing Value '" & deleteValue & "' of Index '" & vktIndexName & "' " & WMPath) - Dim oWMFile As WINDREAMLib.WMObject = GetWMObjectForFile(WMPath) + Dim oWMFile As WMObject = GetWMObjectForFile(WMPath) If IsNothing(oWMFile) Then Logger.Warn("Exit from REMOVE_VEKTOR_LINK...") Return False @@ -985,7 +985,7 @@ Public Class Windream 'Nochmals prüfen ob wirklich Array If WMValue.GetType.ToString.Contains("System.Object") Then ' das entsprechende Attribut aus windream auslesen - Dim oAttribute = CurrentSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, vktIndexName) + Dim oAttribute = CurrentSession.GetWMObjectByName(WMEntityAttribute, vktIndexName) ' den Variablentyp (String, Integer, ...) auslesen Dim vType = oAttribute.getVariableValue("dwAttrType") Dim Anzahl As Integer = 0 @@ -1043,6 +1043,4 @@ Public Class Windream End Try End Function #End Region - - End Class