diff --git a/Modules.Windream/ConnectionBuilder.vb b/Modules.Windream/ConnectionBuilder.vb
new file mode 100644
index 00000000..99b6c326
--- /dev/null
+++ b/Modules.Windream/ConnectionBuilder.vb
@@ -0,0 +1,48 @@
+Public Class ConnectionBuilder
+ Implements IConnectionBuilder
+
+ Private LogFactory As NLog.LogFactory
+ Private SessionReconnect As Boolean = False
+ Private DriveLetter As String = "W"
+ Private Support64Bit As Boolean = False
+ Private ServerName As String = Nothing
+ Private UserName As String = Nothing
+ Private Password As String = Nothing
+ Private Domain As String = Nothing
+
+ Public Sub New(LogFactory As NLog.LogFactory)
+ Me.LogFactory = LogFactory
+ End Sub
+
+ Public Function WithSessionReconnect() As IConnectionBuilder Implements IConnectionBuilder.WithSessionReconnect
+ SessionReconnect = True
+ Return Me
+ End Function
+
+ Public Function WithDriveLetter(driveLetter As String) As IConnectionBuilder Implements IConnectionBuilder.WithDriveLetter
+ Me.DriveLetter = driveLetter
+ Return Me
+ End Function
+
+ Public Function With64BitSupport() As IConnectionBuilder Implements IConnectionBuilder.With64BitSupport
+ Support64Bit = True
+ Return Me
+ End Function
+
+ Public Function WithServerName(serverName As String) As IConnectionBuilder Implements IConnectionBuilder.WithServerName
+ Me.ServerName = serverName
+ Return Me
+ End Function
+
+ Public Function WithImpersonation(userName As String, password As String, domain As String) As IConnectionBuilder Implements IConnectionBuilder.WithImpersonation
+ Me.UserName = userName
+ Me.Password = password
+ Me.Domain = domain
+ Return Me
+ End Function
+
+ Public Function Connect() As Windream2 Implements IConnectionBuilder.Connect
+ Return New Windream2(LogFactory, SessionReconnect, DriveLetter, Support64Bit, ServerName, UserName, Password, Domain)
+ End Function
+
+End Class
diff --git a/Modules.Windream/Constants.vb b/Modules.Windream/Constants.vb
index 68f5ce14..bb4573cf 100644
--- a/Modules.Windream/Constants.vb
+++ b/Modules.Windream/Constants.vb
@@ -36,4 +36,8 @@
'Single Index Types
Public Const WMObjectVariableValueTypeUndefined = 0
+ 'History Tags
+ Public Const HISTORY_NEW_FROM_VERSION = "HISTORY_New_From_Version"
+ Public Const HISTORY_USER_DEFINED = "HISTORY_User_Defined"
+
End Class
diff --git a/Modules.Windream/Exceptions.vb b/Modules.Windream/Exceptions.vb
new file mode 100644
index 00000000..4d124e18
--- /dev/null
+++ b/Modules.Windream/Exceptions.vb
@@ -0,0 +1,18 @@
+Imports System.Runtime.InteropServices
+
+Public Class Exceptions
+ Public Class SessionException
+ Inherits Exception
+
+ Public Sub New()
+ End Sub
+
+ Public Sub New(message As String)
+ MyBase.New(message)
+ End Sub
+
+ Public Sub New(message As String, innerException As Exception)
+ MyBase.New(message, innerException)
+ End Sub
+ End Class
+End Class
diff --git a/Modules.Windream/IConnectionBuilder.vb b/Modules.Windream/IConnectionBuilder.vb
new file mode 100644
index 00000000..93b8456a
--- /dev/null
+++ b/Modules.Windream/IConnectionBuilder.vb
@@ -0,0 +1,8 @@
+Public Interface IConnectionBuilder
+ Function WithSessionReconnect() As IConnectionBuilder
+ Function WithDriveLetter(driveLetter As String) As IConnectionBuilder
+ Function With64BitSupport() As IConnectionBuilder
+ Function WithServerName(serverName As String) As IConnectionBuilder
+ Function WithImpersonation(userName As String, password As String, domain As String) As IConnectionBuilder
+ Function Connect() As Windream2
+End Interface
diff --git a/Modules.Windream/Windream.vb b/Modules.Windream/Windream.vb
index 97799f2e..a6be1b19 100644
--- a/Modules.Windream/Windream.vb
+++ b/Modules.Windream/Windream.vb
@@ -7,6 +7,7 @@ Imports WINDREAMLib.WMSearchRelation
Imports WMOBRWSLib
Imports WMOSRCHLib
Imports WMCNNCTDLLLib
+Imports WMOTOOLLib
Public Class Windream
Inherits Constants
#Region "+++++ Variables +++++"
@@ -20,25 +21,38 @@ Public Class Windream
Private CurrentServer As String
Private CurrentObjecttypes As WMObjects
- Private ReconnectSession As Boolean
- Private DriveLetter As String
-
- Public LoggedInSession As Boolean = False
+ Public ReadOnly Property ReconnectSession As Boolean
+ Public ReadOnly Property DriveLetter As String
+ Public ReadOnly Property Support64Bit As Boolean
+ Public Property LoggedInSession As Boolean = False
#End Region
#Region "+++++ Init +++++"
'''
''' Initializes windream and creates a windream session with the actual user
'''
'''
- Public Sub New(Optional DriveLetter As String = "W", Optional ReconnectSession As Boolean = False)
+ Public Sub New(
+ Optional DriveLetter As String = "W",
+ Optional ReconnectSession As Boolean = False,
+ Optional Support64Bit As Boolean = False,
+ Optional ServerName As String = Nothing,
+ Optional UserName As String = Nothing,
+ Optional UserPass As String = Nothing,
+ Optional UserDomain As String = Nothing
+ )
Try
Me.DriveLetter = DriveLetter
Me.ReconnectSession = ReconnectSession
+ Me.Support64Bit = Support64Bit
- If Not NewSession() Then
- Logger.Warn("Session could not be created")
+ Dim session As WMSession = NewSession(ServerName, UserName, UserPass, UserDomain)
+
+ If session Is Nothing Then
+ Throw New Exception("Login failed")
End If
+ CurrentSession = session
+ CurrentServer = ServerName
CurrentObjecttypes = GetObjectTypes()
Catch ex As Exception
@@ -46,6 +60,137 @@ Public Class Windream
End Try
End Sub
+ Public Function NewSession(Optional serverName As String = Nothing) As WMSession
+ Dim browser As ServerBrowser
+ Dim connect As WMConnect
+ Dim session As WMSession
+ Dim credentials As WMUserIdentity
+
+ Try
+ browser = New ServerBrowser()
+ connect = New WMConnect()
+ Logger.Info("Successfully created windream objects")
+ Catch ex As Exception
+ Logger.Error(ex, "Error while creating windream objects")
+ Return Nothing
+ End Try
+
+ Try
+ If serverName Is Nothing OrElse serverName.Length = 0 Then
+ serverName = browser.GetCurrentServer()
+ End If
+ Catch ex As Exception
+ Logger.Error(ex, "Error while getting current server")
+ Return Nothing
+ End Try
+
+ Try
+ credentials = New WMUserIdentity() With {
+ .aServerName = serverName
+ }
+ Catch ex As Exception
+ Logger.Error(ex, "Error while creating user identity")
+ Return Nothing
+ End Try
+
+ Try
+ session = connect.Login(credentials)
+ 'LoggedInSession = True
+ CurrentServer = serverName
+
+ Return session
+ Catch ex As Exception
+ Logger.Error(ex, "Error while logging in")
+ Return Nothing
+ End Try
+ End Function
+
+ Public Function NewSession(Optional serverName As String = Nothing, Optional userName As String = Nothing, Optional password As String = Nothing, Optional domain As String = Nothing) As WMSession
+ Dim browser As ServerBrowser
+ Dim connect As WMConnect
+ Dim session As WMSession
+ Dim credentials As WMUserIdentity
+
+ Dim impersonation As Boolean
+ Dim serverNameFromClient As Boolean
+
+ Try
+ browser = New ServerBrowser()
+ connect = New WMConnect()
+ Logger.Info("Successfully created windream objects")
+ Catch ex As Exception
+ Logger.Error(ex, "Error while creating windream objects")
+ Return Nothing
+ End Try
+
+ ' If no server was supplied, try to get the current server set in the client
+ Try
+ If serverName Is Nothing OrElse serverName.Length = 0 Then
+ serverName = browser.GetCurrentServer
+ serverNameFromClient = True
+ Else
+ serverNameFromClient = False
+ End If
+ Catch ex As Exception
+ Logger.Error(ex, "Error while getting Servername")
+ Return Nothing
+ End Try
+
+ Logger.Info("Servername: {0}", serverName)
+ Logger.Info("Servername aquired from client: {0}", serverNameFromClient)
+
+ 'TODO: Test connection to windream server
+
+ ' If username, password and domain are set, login with impersonation
+ ' Else, login with current credentials
+ If userName IsNot Nothing And password IsNot Nothing And domain IsNot Nothing Then
+ impersonation = True
+ credentials = New WMUserIdentity() With {
+ .aServerName = serverName,
+ .aUserName = userName,
+ .aPassword = password,
+ .aDomain = domain
+ }
+
+ connect.ModuleId = 9
+
+ Logger.Info("Impersonated Login: True")
+ Logger.Info("Username: {0}", userName)
+ Logger.Info("Domain: {0}", domain)
+ Else
+ impersonation = False
+ credentials = New WMUserIdentity() With {
+ .aServerName = serverName
+ }
+
+ Logger.Info("Impersonated Login: False")
+ Logger.Info("Username: {0}", Environment.UserName)
+ Logger.Info("Domain: {0}", Environment.UserDomainName)
+ End If
+
+ Try
+ session = connect.Login(credentials)
+ Catch ex As Exception
+ Logger.Error(ex, "Error while logging in")
+ Return Nothing
+ End Try
+
+ Try
+ ' Standardmässig hinterlegen dass abgelegte Dateien keine Indexmaske öffnet
+ session.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
+ Catch ex As Exception
+ Logger.Error(ex, "Could not SwitchEvents")
+ Return Nothing
+ End Try
+
+ If session.aLoggedin = False Then
+ Logger.Warn("Session created but user {0} could not be logged in", Environment.UserName)
+ Return Nothing
+ End If
+
+ Return session
+ End Function
+
Private Function GetObjectTypes() As WMObjects
Dim objectTypes As WMObjects
@@ -88,59 +233,60 @@ Public Class Windream
Return normalizedPath
End Function
+
'''
- ''' Creates a windream session with the actual user
+ ''' Creates a windream session with the current user and the current server
'''
''' Returns true when created, false if not
'''
- 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
- End Try
+ '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
+ ' End Try
- Try
- ' Create Connect Object for Session
- CurrentConnect = New WMConnect
- Catch ex As Exception
- Logger.Error(ex, "Could not create WMConnect")
- Return False
- End Try
+ ' Try
+ ' ' Create Connect Object for Session
+ ' CurrentConnect = New WMConnect
+ ' Catch ex As Exception
+ ' Logger.Error(ex, "Could not create WMConnect")
+ ' Return False
+ ' End Try
- Try
- ' 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
- End Try
+ ' Try
+ ' ' 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
+ ' End Try
- Try
- CurrentConnect.LoginSession(CurrentSession)
- LoggedInSession = True
- Catch ex As Exception
- Logger.Error(ex, "Could not login session")
- Return False
- End Try
+ ' Try
+ ' CurrentConnect.LoginSession(CurrentSession)
+ ' LoggedInSession = True
+ ' Catch ex As Exception
+ ' Logger.Error(ex, "Could not login session")
+ ' Return False
+ ' End Try
- Try
- ' Standardmässig hinterlegen dass abgelegte Dateien keine Indexmaske öffnet
- CurrentSession.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
- Catch ex As Exception
- Logger.Error(ex, "Could not SwitchEvents")
- Return False
- End Try
+ ' Try
+ ' ' Standardmässig hinterlegen dass abgelegte Dateien keine Indexmaske öffnet
+ ' CurrentSession.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
+ ' Catch ex As Exception
+ ' Logger.Error(ex, "Could not SwitchEvents")
+ ' Return False
+ ' End Try
- If TestLoggedInSession() = False Then
- Logger.Warn("Session created but user {0} could not be logged in", Environment.UserName)
- Return False
- End If
+ ' If TestLoggedInSession() = False Then
+ ' Logger.Warn("Session created but user {0} could not be logged in", Environment.UserName)
+ ' Return False
+ ' End If
- Return True
- End Function
+ ' Return True
+ 'End Function
#End Region
#Region "+++++ New +++++"
'''
@@ -688,7 +834,7 @@ Public Class Windream
If TestLoggedInSession() = False Then
Return False
End If
- Dim oAttribute = CurrentSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname)
+ Dim oAttribute = CurrentSession.GetWMObjectByName(WMEntityAttribute, indexname)
Dim vType = oAttribute.GetVariableValue("dwAttrType")
Return vType
Catch ex As Exception
diff --git a/Modules.Windream/Windream.vbproj b/Modules.Windream/Windream.vbproj
index e3ac90bb..9169b8e7 100644
--- a/Modules.Windream/Windream.vbproj
+++ b/Modules.Windream/Windream.vbproj
@@ -93,8 +93,11 @@
+
+
+
True
@@ -111,6 +114,7 @@
True
+
diff --git a/Modules.Windream/Windream2.vb b/Modules.Windream/Windream2.vb
new file mode 100644
index 00000000..5df18971
--- /dev/null
+++ b/Modules.Windream/Windream2.vb
@@ -0,0 +1,504 @@
+Imports WINDREAMLib
+Imports WINDREAMLib.WMCOMEvent
+Imports WINDREAMLib.WMEntity
+Imports WINDREAMLib.WMObjectEditMode
+Imports WINDREAMLib.WMSearchOperator
+Imports WINDREAMLib.WMSearchRelation
+Imports WMOBRWSLib
+Imports WMOSRCHLib
+Imports WMCNNCTDLLLib
+Imports WMOTOOLLib
+Imports NLog
+
+'''
+''' MODULE: Windream
+'''
+''' VERSION: 0.0.0.1
+'''
+''' DATE: 24.08.2018
+'''
+''' DESCRIPTION:
+'''
+''' DEPENDENCIES: NLog, >= 4.5.8
+'''
+''' PARAMETERS:
+'''
+''' PROPERTIES:
+'''
+''' EXAMPLES:
+'''
+''' REMARKS:
+'''
+Public Class Windream2
+#Region "Private Properties"
+ Private _logger As Logger
+ Private _loggerFactory As LogFactory
+
+ Private ReadOnly _sessionDomain As String
+ Private ReadOnly _sessionPassword As String
+ Private ReadOnly _sessionUsername As String
+#End Region
+#Region "Public Properties"
+ Public ReadOnly Property ClientDriveLetter As String
+ Public ReadOnly Property ClientSupport64Bit As Boolean
+
+ Public ReadOnly Property Session As WMSession
+ Public ReadOnly Property SessionLoggedin As Boolean
+ Public ReadOnly Property SessionReconnect As Boolean
+ Public ReadOnly Property SessionServername As String
+
+
+ ''' A list of object types that are available
+ Public ReadOnly Property ObjectTypes As List(Of String)
+ Get
+ Dim types As WMObjects = GetObjectTypes()
+ Dim list As New List(Of String)
+
+ For Each type As WMObject In types
+ list.Add(type.aName)
+ Next
+
+ Return list
+ End Get
+ End Property
+
+#End Region
+ '''
+ ''' Creates a new Windream object and connects to a server with the provided options and credentials
+ '''
+ '''
+ '''
+ '''
+ '''
+ '''
+ '''
+ '''
+ '''
+ '''
+ Public Sub New(LogFactory As LogFactory, SessionReconnect As Boolean, ClientDriveLetter As String, ClientSupport64Bit As Boolean, SessionServerName As String, SessionUserName As String, SessionPassword As String, SessionDomain As String)
+ _logger = LogFactory.GetCurrentClassLogger()
+ _loggerFactory = LogFactory
+
+ Dim oSession As WMSession = NewSession(SessionServerName, SessionUserName, SessionPassword, SessionDomain)
+
+ If oSession Is Nothing Then
+ Throw New Exceptions.SessionException()
+ End If
+
+ SessionLoggedin = True
+
+ Me.SessionReconnect = SessionReconnect
+ Me.ClientDriveLetter = ClientDriveLetter
+ Me.ClientSupport64Bit = ClientSupport64Bit
+ Me.SessionServername = SessionServerName
+
+ _sessionUsername = SessionUserName
+ _sessionPassword = SessionPassword
+ _sessionDomain = SessionDomain
+ End Sub
+
+ Public Function NewSession(Optional ServerName As String = Nothing, Optional UserName As String = Nothing, Optional Password As String = Nothing, Optional Domain As String = Nothing) As WMSession
+ Dim oBrowser As ServerBrowser
+ Dim oConnect As WMConnect
+ Dim oSession As WMSession
+ Dim oCredentials As WMUserIdentity
+
+ Dim oImpersonation As Boolean
+ Dim oServerNameFromClient As Boolean
+
+ Try
+ oBrowser = New ServerBrowser()
+ oConnect = New WMConnect()
+ _logger.Info("Successfully created windream objects")
+ Catch ex As Exception
+ _logger.Error(ex, "Error while creating windream objects")
+ Return Nothing
+ End Try
+
+ ' If no server was supplied, try to get the current server set in the client
+ Try
+ If ServerName Is Nothing OrElse ServerName.Length = 0 Then
+ ServerName = oBrowser.GetCurrentServer
+ oServerNameFromClient = True
+ Else
+ oServerNameFromClient = False
+ End If
+ Catch ex As Exception
+ _logger.Error(ex, "Error while getting Servername")
+ Return Nothing
+ End Try
+
+ _logger.Info("Servername: {0}", ServerName)
+ _logger.Info("Servername aquired from client: {0}", oServerNameFromClient)
+
+ 'TODO: Test connection to windream server
+
+ ' If username, password and domain are set, login with impersonation
+ ' Else, login with current credentials
+ If UserName IsNot Nothing And Password IsNot Nothing And Domain IsNot Nothing Then
+ oImpersonation = True
+ oCredentials = New WMUserIdentity() With {
+ .aServerName = ServerName,
+ .aUserName = UserName,
+ .aPassword = Password,
+ .aDomain = Domain
+ }
+
+ oConnect.ModuleId = 9
+ Else
+ oImpersonation = False
+ oCredentials = New WMUserIdentity() With {
+ .aServerName = ServerName
+ }
+ End If
+
+ _logger.Info("Impersonated Login: {0}", oImpersonation)
+ _logger.Info("Username: {0}", IIf(UserName IsNot Nothing, UserName, Environment.UserName))
+ _logger.Info("Domain: {0}", IIf(Domain IsNot Nothing, Domain, Environment.UserDomainName))
+
+ Try
+ oSession = oConnect.Login(oCredentials)
+ Catch ex As Exception
+ _logger.Error(ex, "Error while logging in")
+ Return Nothing
+ End Try
+
+ Try
+ ' Standardmässig hinterlegen dass abgelegte Dateien keine Indexmaske öffnet
+ oSession.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
+ Catch ex As Exception
+ _logger.Error(ex, "Could not SwitchEvents")
+ Return Nothing
+ End Try
+
+ If oSession.aLoggedin = False Then
+ _logger.Warn("Session created but user {0} could not be logged in", Environment.UserName)
+ Return Nothing
+ End If
+
+ Return oSession
+ End Function
+
+#Region "Public Methods"
+ Public Function NewFolder(Path As String) As Boolean
+ If Not TestSessionLoggedIn() Then
+ Return False
+ End If
+
+ Try
+ Path = GetNormalizedPath(Path)
+ Dim oFolders As List(Of String) = Path.Split().ToList()
+ Dim oTempSession As IWMSession2 = DirectCast(Session, IWMSession2)
+ Dim oFolderObject As WMObject
+
+ For Each oFolder In oFolders
+ If TestFolderExists(Path) = False Then
+ oFolderObject = oTempSession.GetNewWMObjectFS(WMEntityFolder, oFolder, WMObjectEditModeNoEdit)
+ End If
+ Next
+
+ Return True
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return False
+ End Try
+ End Function
+
+ Public Function NewFileVersion(Path As String, Comment As String) As Boolean
+ If Not TestSessionLoggedIn() Then
+ Return False
+ End If
+
+ Try
+ Path = GetNormalizedPath(Path)
+ Dim oFileObject As IWMObject6
+ oFileObject = Session.GetWMObjectByPath(WMEntityDocument, Path)
+ oFileObject.CreateVersion2(False, Constants.HISTORY_NEW_FROM_VERSION, Comment)
+ Return True
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return False
+ End Try
+ End Function
+
+ Public Function LockFile(FileObject As WMObject) As Boolean
+ Try
+ FileObject.lock()
+ Return True
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return False
+ End Try
+ End Function
+
+ Public Function UnlockFile(FileObject As WMObject) As Boolean
+ Try
+ FileObject.unlock()
+ Return True
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return False
+ End Try
+ End Function
+
+ Public Function GetChoiceLists() As List(Of String)
+ Dim oItems As New List(Of String)
+
+ If TestSessionLoggedIn() = False Then
+ Return oItems
+ End If
+
+ Try
+ Dim oChoiceLists As WMObjects
+ Dim oChoiceList As IWMObject2
+ 'load list of choicelists
+ oChoiceLists = Session.GetAllObjects(WMEntityChoiceList)
+
+ For Each oChoiceList In oChoiceLists
+ oItems.Add(oChoiceList.aName)
+ Next
+
+ Return oItems
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return oItems
+ End Try
+ End Function
+
+ Public Function GetChoiceListItems(ChoiceListName As String) As List(Of String)
+ Dim oItems As New List(Of String)
+ Dim oChoicelist As WMObject
+
+ If TestSessionLoggedIn() = False Then
+ Return oItems
+ End If
+
+ Try
+ Dim oTempSession As IWMSession2 = DirectCast(Session, IWMSession2)
+ oChoicelist = oTempSession.GetWMObjectByName(WMEntityChoiceList, ChoiceListName)
+ Catch ex As Exception
+ _logger.Error(ex, "Could not get choice list")
+ Return oItems
+ End Try
+
+ Try
+ Dim oChoiceListItems As Object = oChoicelist.GetVariableValue("vItems")
+
+ If oChoiceListItems Is Nothing Then
+ Return oItems
+ End If
+
+ For Each oChoiceListItem In oChoiceListItems
+ oItems.Add(oChoiceListItem)
+ Next
+
+ Return oItems
+ Catch ex As Exception
+ _logger.Error(ex, "Could not get choice list items")
+ Return oItems
+ End Try
+ End Function
+
+ Public Function GetIndiciesByObjecttype(ObjectTypeName As String) As List(Of String)
+ If TestSessionLoggedIn() = False Then
+ Return Nothing
+ End If
+
+ Dim oObjectType As WMObject
+ Dim oIndexAttributes As WMObjectRelation
+ Dim oIndexAttribute As WMObject
+ Dim oIndex As WMObject
+ Dim oRelProperties As WMObjectRelation
+ Dim oTempSession As IWMSession2
+ Dim oIndicies As New List(Of String)
+
+ Try
+ ' den Objekttyp laden
+ oTempSession = DirectCast(Session, IWMSession2)
+ oObjectType = Session.GetWMObjectByName(WMEntityObjectType, ObjectTypeName)
+
+ ' Beziehung zu Indizes des Objekttyp auslesen
+ oIndexAttributes = oObjectType.GetWMObjectRelationByName("TypeAttributes")
+
+ ' alle Indizes durchlaufen
+ For j As Integer = 0 To oIndexAttributes.Count - 1
+
+ ' aktuellen Index auslesen
+ oIndexAttribute = oIndexAttributes.Item(j)
+
+ ' Eigenschaften des Index auslesen
+ oRelProperties = oIndexAttribute.GetWMObjectRelationByName("Attribute")
+
+ ' Index aus den Eigenschaften auslesen
+ oIndex = oRelProperties.Item(0)
+
+ ' Indexname speichern
+ 'aIndexNames(j) = oIndex.aName
+ oIndicies.Add(oIndex.aName)
+ Next
+
+ ' Indexarray zurückgeben
+ 'Return aIndexNames
+ Return oIndicies
+
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return oIndicies
+ End Try
+ End Function
+
+ Public Function GetIndexType(IndexName As String) As Integer
+ If TestSessionLoggedIn() = False Then
+ Return Nothing
+ End If
+
+ Try
+ Dim oTempSession As IWMSession2 = DirectCast(Session, IWMSession2)
+ Dim oAttribute = oTempSession.GetWMObjectByName(WMEntityAttribute, IndexName)
+ Dim oType = oAttribute.GetVariableValue("dwAttrType")
+ Return oType
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+
+ Public Function RemoveFile(Path As String) As Boolean
+ If TestSessionLoggedIn() = False Then
+ Return Nothing
+ End If
+
+ Try
+ Dim oTempSession As IWMSession2 = DirectCast(Session, IWMSession2)
+ Dim oWMObject As WMObject = oTempSession.GetWMObjectByName(WMEntityAttribute, Path)
+
+ If oWMObject Is Nothing Then
+ Return False
+ End If
+
+ oWMObject.Delete()
+ Return True
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return False
+ End Try
+ End Function
+
+ 'Public Function RemoveVectorIndexValue(Path As String, IndexName As String, ValueToDelete As String) As Boolean
+ ' If TestSessionLoggedIn() = False Then
+ ' Return False
+ ' End If
+
+ ' Try
+ ' Dim oTempSession As IWMSession2 = DirectCast(Session, IWMSession2)
+ ' Dim oWMObject As WMObject = oTempSession.GetWMObjectByName(WMEntityAttribute, Path)
+
+ ' If oWMObject Is Nothing Then
+ ' _logger.Warn("Could not find document {0}", Path)
+ ' Return False
+ ' End If
+
+ ' Dim oVectorValues = oWMObject.GetVariableValue(IndexName)
+ ' Dim oType As Integer = GetIndexType(IndexName)
+
+ ' If oVectorValues Is Nothing Then
+ ' _logger.Warn("Could not values of index {0}", IndexName)
+ ' Return False
+ ' End If
+
+
+ ' Dim oValueFound As Boolean = False
+
+ ' For Each oVectorValue In oVectorValues
+ ' If oVectorValue = ValueToDelete Then
+ ' oValueFound = True
+ ' End If
+ ' Next
+
+ ' Dim oNewValues As New List(Of Object)
+
+ ' If oValueFound Then
+ ' oNewValues = oVectorValues
+ ' oNewValues = oNewValues.Except(New List(Of Object) From {ValueToDelete}).ToList()
+ ' End If
+
+
+ ' Catch ex As Exception
+ ' _logger.Error(ex)
+ ' Return Nothing
+ ' End Try
+ 'End Function
+
+ Public Function TestFolderExists(Path As String) As Boolean
+ Return TestObjectExists(GetNormalizedPath(Path), WMEntityFolder)
+ End Function
+
+ Public Function TestFileExists(Path As String) As Boolean
+ Return TestObjectExists(GetNormalizedPath(Path), WMEntityDocument)
+ End Function
+
+ Public Function TestUserExists(Username As String) As Boolean
+ Return TestObjectExists(Username, WMEntityUser)
+ End Function
+
+ Public Function TestGroupExists(Groupname As String) As Boolean
+ Return TestObjectExists(Groupname, WMEntityGroups)
+ End Function
+#End Region
+
+#Region "Private Methods"
+ Private Function GetNormalizedPath(Path As String) As String
+ Dim oNormalizedPath = Path
+
+ If Not Path.StartsWith("\") And Path.ToUpper().StartsWith(ClientDriveLetter.ToUpper) Then
+ oNormalizedPath = Path.Substring(2)
+ End If
+
+ Return oNormalizedPath
+ End Function
+
+ Private Function GetObjectTypes() As WMObjects
+ Dim oObjectTypes As WMObjects
+
+ Try
+ oObjectTypes = Session.GetWMObjectTypes(WMEntityDocument)
+ Return oObjectTypes
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return Nothing
+ End Try
+ End Function
+
+ Private Function TestSessionLoggedIn() As Boolean
+ Try
+ If Session.aLoggedin Then
+ Return True
+ Else
+ _logger.Warn("There is no active WM-Session!")
+ Return False
+ End If
+ Catch ex As Exception
+ _logger.Error(ex)
+ Return False
+ End Try
+ End Function
+
+ Public Function TestObjectExists(ObjectName As String, ObjectType As WMEntity) As Boolean
+ If TestSessionLoggedIn() = False Then
+ Return False
+ End If
+ Try
+ Dim oTempSession = DirectCast(Session, IWMSession2)
+ Dim oObjectId = 0
+ Dim oObjectDbId = 0
+
+ Return oTempSession.WMObjectExists(ObjectType, ObjectName, oObjectId, oObjectDbId)
+ Catch ex As Exception
+ _logger.Error(ex, "Error while checking existence of WMObject {0} of type {1}", ObjectName, ObjectType.ToString)
+ Return False
+ End Try
+ End Function
+#End Region
+End Class
+
+