Imports WINDREAMLib
Imports WINDREAMLib.WMCOMEvent
Imports WINDREAMLib.WMEntity
Imports WINDREAMLib.WMObjectEditMode
Imports WINDREAMLib.WMSearchOperator
Imports WINDREAMLib.WMSearchRelation
Imports WMOBRWSLib

Public Class ClassWindream_allgemein

#Region "+++++ Konstanten +++++"
    Const DEBUG = AUS
    Const AUS = 0
    Const WINDREAM = 1
    Const VARIABLEN = 2
#End Region

#Region "+++++ Variablen +++++"
    Public oConnect ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht)
    Public oSession 'As WINDREAMLib.WMSession ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht)
    Public oBrowser As New WMOBRWSLib.ServerBrowser
    Public oDokumentTypen As WINDREAMLib.WMObjects
#End Region


#Region "+++++ Allgemeine Methoden und Funktionen +++++"

    ''' <summary>
    ''' Konstruktor für die windream-Klasse
    ''' </summary>
    ''' <remarks></remarks>
    Sub New()
        ' wenn ein Fehler bei der Initialisierung auftrat
        If Not Me.Init() Then
            ' Nachricht ausgeben
            clsLogger.Add("Es trat ein Fehler bei der Initialisierung der Klasse windream auf. Bitte prüfen Sie ob der windream-Server aktiv ist und alle Dienste gestartet sind.!", True)


            ' das Programm "abschießen"
            Process.GetCurrentProcess.Kill()
        End If
    End Sub


    ''' <summary>
    ''' Initialisiert die statische Klasse (Login, Session starten, usw.)
    ''' </summary>
    ''' <returns>Liefert True wenn das Anmelden erfolgreich war, sonst False</returns>
    ''' <remarks></remarks>
    Public Function Init() As Boolean
        Try
            Try
                ' Session-Objekt instanziieren und mit dem im Client ausgewählten Server belegen
                Me.oSession = CreateObject("Windream.WMSession", Me.GetCurrentServer)
                'If My.Settings.vDetailLog Then ClassLogger.Add(" >> windream-Server: '" & Me.GetCurrentServer & "'", False)
                ' Connection-Objekt instanziieren
                Me.oConnect = CreateObject("Windream.WMConnect")
                'MsgBox("windrem init 'ed")
            Catch ex As Exception
                Return False
            End Try


            ' wenn windream nicht angemeldet ist
            If Not Me.IsLoggedIn Then

                ' Art der Anmeldung an windream festlegen
                '   0x0L (also 0)                   = Standard windream Benutzer
                '   WM_MODULE_ID_DOCTYPEEDITOR_LIC  = ermöglicht Zugriff auf die windream Management Funktionen (Z.B. zur Verwaltung der windream Dokumententypen, Auswahllisten, etc.)
                '   WM_MODULE_ID_INDEXSERVICE       = ermöglicht der Session die Indexierungs-Events vom windream DMS-Service zu empfangen
                Me.oConnect.ModuleID = 0

                ' setzt die minimal erwartete windream-Version 
                Me.oConnect.MinReqVersion = "3"

                ' -- Impersonifizierung nur möglich mit registry-eintrag --
                ' oConnect.UserName "\schulung\windream"
                ' oConnect.Password "windream"

                ' Verbindung mit Session-Objekt (und dem ausgewählten Server) aufbauen
                Me.oConnect.LoginSession(Me.oSession)
                If Me.oSession.aLoggedin = False Then
                    clsLogger.Add("Es konnte keine Session aufgebaut werden!", True)

                    Return False
                End If

                'If My.Settings.vDetailLog Then
                '    ClassLogger.Add(" >> windream-Version: '" & oSession.GetSystemInfo("WindreamVersion") & "'", False)
                'End If

                ' AUSGABE VON SYSTEMINFORMATIONEN
                ' Gibt die Versionsart (Lizenztyp) also Small-Business-Edition (SBE), Small-Business-Extension (SBX) 
                ' oder Business-Edition (BE) aus
                'MsgBox("WindreamVersion: " & oSession.GetSystemInfo("WindreamVersion") & vbNewLine & "LicenceKey: " & oSession.GetSystemInfo("LicenceKey") & vbNewLine & _
                '       vbNewLine & "LicenceName: " & oSession.GetSystemInfo("LicenceName"))

                'Dim WMCtrl As AISCONTROLDATACOMLib.AISControlData
                'WMCtrl = New AISCONTROLDATACOMLib.AISControlData

                '' liefert die Versionsnummer des Clients

                'MsgBox(WMCtrl.WMWorkstationBuildNo)
                'MsgBox(WMCtrl.W
                '' liefert den Servernamen des angemeldeten windreams
                'MsgBox(WMCtrl.WMServerName)

                Try
                    Me.oSession.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
                    ' der Parameter WMEntityDocument definiert, dass nur Dokumenttypen und keine 
                    ' Ordnertypen ausgelesen werden
                    Me.oDokumentTypen = Me.oSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument)
                Catch ex As Exception
                    Return False
                End Try

            End If

            Return True

        Catch ex As Exception
            If Err.Number = -2147220985 Then
            Else
                clsLogger.Add(ex.Message & vbNewLine & "Fehler beim Login an windream!", True)

            End If
            Return False
        End Try

    End Function

#End Region



#Region "+++++ Funktionen die für den Objekttyp relevate Informationen zurückliefern +++++"



    Public Function GetTypeOfIndex(ByVal indexname As String) As Integer
        Try
            Dim oAttribute = Me.oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname)
            Dim vType = oAttribute.getVariableValue("dwAttrType")
            Return vType
        Catch ex As Exception
            Return Nothing
        End Try
    End Function


#End Region



#Region "+++++ Allgemeine Funktionen die Informationen zurückliefern +++++"

    ''' <summary>
    ''' Liefert True wenn die windream-Session angemeldet ist und False für den Fall, dass die Session nicht eingeloggt ist.
    ''' </summary>
    ''' <returns>Anmeldestatus als Boolean</returns>
    ''' <remarks></remarks>
    Public Function IsLoggedIn() As Boolean
        Try
            Return Me.oSession.aLoggedin
        Catch ex As Exception
            clsLogger.Add("Me.oSession.aLoggedin was ended with error: " & ex.Message, True)

        End Try

        Return False
    End Function

    ''' <summary>
    ''' Liefert den Servernamen an dem windream aktuell angemeldet ist.
    ''' </summary>
    ''' <returns>Servername als String</returns>
    ''' <remarks></remarks>
    Public Function GetCurrentServer() As String
        Try
            Return Me.oBrowser.GetCurrentServer 'ClassWindream.oBrowser.GetCurrentServer
        Catch ex As Exception
            clsLogger.Add(ex.Message & vbNewLine & "Der aktuell gewählte windream-Server konnte nicht ausgelesen werden!", True)

        End Try

        Return ""
    End Function




#End Region
End Class
