2095 lines
107 KiB
VB.net
2095 lines
107 KiB
VB.net
|
||
Imports WINDREAMLib
|
||
Imports WINDREAMLib.WMCOMEvent
|
||
Imports WINDREAMLib.WMEntity
|
||
Imports WINDREAMLib.WMObjectEditMode
|
||
Imports WINDREAMLib.WMSearchOperator
|
||
Imports WINDREAMLib.WMSearchRelation
|
||
Imports WMOBRWSLib
|
||
Imports WMOSRCHLib
|
||
Imports System.IO
|
||
|
||
Public Class ClassWindream
|
||
|
||
#Region "+++++ Konstanten +++++"
|
||
Const DEBUG = AUS
|
||
Const AUS = 0
|
||
Const WINDREAM = 1
|
||
Const VARIABLEN = 2
|
||
Const WMObjectStreamOpenModeReadWrite = 2
|
||
|
||
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 +++++"
|
||
Public Shared oConnect ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht)
|
||
Public Shared oSession 'As WINDREAMLib.WMSession ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht)
|
||
Public _inited
|
||
Public Shared oBrowser As New WMOBRWSLib.ServerBrowser
|
||
Public Shared oDokumentTypen As WINDREAMLib.WMObjects
|
||
Private Shared oController As New WMOSearchController
|
||
Public Shared _WDObjekttyp As String
|
||
Private Shared aktWMObject As WINDREAMLib.WMObject
|
||
Public Shared WD_SERVER
|
||
Public Shared CURRENT_WMObject As WMObject
|
||
#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 ClassWindream.Init() Then
|
||
' Nachricht ausgeben
|
||
MsgBox("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.", MsgBoxStyle.Exclamation, "Fehler bei Initialisierung")
|
||
|
||
' das Programm "abschießen"
|
||
'Process.GetCurrentProcess.Kill()
|
||
End If
|
||
End Sub
|
||
Public Shared Function GetSearchDocuments(ByVal wdfLocation As String)
|
||
|
||
If System.IO.File.Exists(wdfLocation) Then
|
||
|
||
Try
|
||
Dim ProfileName = wdfLocation.Substring(wdfLocation.LastIndexOf("\") + 1)
|
||
Dim ProfilePath = wdfLocation.Substring(0, wdfLocation.Length - ProfileName.Length)
|
||
|
||
oController = New WMOSearchController
|
||
|
||
oController.CheckSearchProfile(wdfLocation.ToLower)
|
||
Dim suchTyp = oController.SearchProfileTargetProgID
|
||
Dim ExSettings As Object
|
||
Dim oSearch As Object
|
||
ExSettings = 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")
|
||
Dim suchTyp1 = suchTyp.ToString.ToUpper
|
||
'' 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", WD_SERVER)
|
||
|
||
oConnect.LoginSession(srchQuick.WMSession)
|
||
|
||
srchQuick.ClearSearch()
|
||
srchQuick.SearchProfilePath = ProfilePath
|
||
srchQuick.LoadSearchProfile(ProfileName)
|
||
|
||
oSearch = srchQuick.GetSearch()
|
||
|
||
Case "WMOSRCH.WMINDEXSEARCH"
|
||
srchIndex.WMSession = CreateObject("Windream.WMSession", WD_SERVER)
|
||
|
||
oConnect.LoginSession(srchIndex.WMSession)
|
||
|
||
srchIndex.ClearSearch()
|
||
srchIndex.SearchProfilePath = ProfilePath
|
||
srchIndex.LoadSearchProfile(ProfileName)
|
||
|
||
oSearch = srchIndex.GetSearch()
|
||
|
||
Case "WMOSRCH.WMOBJECTTYPESEARCH"
|
||
srchObjectType.WMSession = CreateObject("Windream.WMSession", WD_SERVER)
|
||
|
||
oConnect.LoginSession(srchObjectType.WMSession)
|
||
|
||
srchObjectType.ClearSearch()
|
||
srchObjectType.SearchProfilePath = ProfilePath
|
||
srchObjectType.LoadSearchProfile(ProfileName)
|
||
|
||
oSearch = srchObjectType.GetSearch()
|
||
|
||
Case Else
|
||
MsgBox("KEIN GÜLTIGER WINDREAM-SUCHTYP")
|
||
Return Nothing
|
||
End Select
|
||
Dim WMObjects As Object
|
||
WMObjects = oSearch.Execute
|
||
Return oSearch.execute
|
||
|
||
Catch ex As Exception
|
||
' bei einem Fehler einen Eintrag in der Logdatei machen
|
||
MsgBox("Error in GetSearchDocuments: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
||
Return Nothing
|
||
End Try
|
||
|
||
End If
|
||
|
||
Return Nothing
|
||
|
||
End Function
|
||
Public Function GetSearchDocuments_Objekttype(ByVal wdfLocation As String)
|
||
|
||
If System.IO.File.Exists(wdfLocation) 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 srchObjectType As WMOSRCHLib.WMObjectTypeSearch = CreateObject("WMOSrch.WMObjectTypeSearch")
|
||
|
||
'' Der öffentliche Member CheckSearchProfile für den Typ IWMQuickSearch7 wurde nicht gefunden. [Microsoft.VisualBasic] => GetSearchDocuments()
|
||
|
||
srchObjectType.WMSession = CreateObject("Windream.WMSession", Me.GetCurrentServer)
|
||
|
||
Me.oConnect.LoginSession(srchObjectType.WMSession)
|
||
|
||
srchObjectType.ClearSearch()
|
||
srchObjectType.SearchProfilePath = ProfilePath
|
||
srchObjectType.LoadSearchProfile(ProfileName)
|
||
|
||
oSearch = srchObjectType.GetSearch()
|
||
|
||
|
||
Dim WMObjects As Object
|
||
WMObjects = oSearch.Execute
|
||
Return oSearch.execute
|
||
|
||
Catch ex As Exception
|
||
' bei einem Fehler einen Eintrag in der Logdatei machen
|
||
MsgBox("Error in GetSearchDocuments()" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
||
Return Nothing
|
||
End Try
|
||
|
||
End If
|
||
|
||
Return Nothing
|
||
|
||
End Function
|
||
|
||
''' <summary>
|
||
''' Initialisiert die statische Klasse (Login, Session starten, usw.)
|
||
''' </summary>
|
||
''' <returns>Liefert True wenn das Anmelden erfolgreich war, sonst False</returns>
|
||
''' <remarks></remarks>
|
||
Public Shared Function Init() As Boolean
|
||
Try
|
||
Try
|
||
' Session-Objekt instanziieren und mit dem im Client ausgewählten Server belegen
|
||
oSession = CreateObject("Windream.WMSession", GetCurrentServer)
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> windream-Server: '" & GetCurrentServer() & "'", False)
|
||
' Connection-Objekt instanziieren
|
||
oConnect = CreateObject("Windream.WMConnect")
|
||
'MsgBox("windrem init 'ed")
|
||
Catch ex As Exception
|
||
Return False
|
||
End Try
|
||
|
||
' wenn windream nicht angemeldet ist
|
||
If IsLoggedIn() = False Then
|
||
|
||
' Art der Anmeldung an windream festlegen
|
||
' 0x0L (also 0) = Standard windream Benutzer
|
||
' WM_ODULE_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
|
||
oConnect.ModuleID = 0
|
||
|
||
' setzt die minimal erwartete windream-Version
|
||
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
|
||
oConnect.LoginSession(oSession)
|
||
If oSession.aLoggedin = False Then
|
||
MsgBox("Es konnte keine Verbindung mit dem windream-Server hergestellt werden", MsgBoxStyle.Exclamation, "Verbindung konnte nicht hergestellt werden")
|
||
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
|
||
oSession.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
|
||
' der Parameter WMEntityDocument definiert, dass nur Dokumenttypen und keine
|
||
' Ordnertypen ausgelesen werden
|
||
oDokumentTypen = 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
|
||
MsgBox("Die installierte windream-Version ist nicht ausreichend für den Betrieb der Tool Collection für windream." & vbNewLine & _
|
||
"Bitte kontaktieren Sie Digital Data." & vbNewLine & vbNewLine & "Errormessage:" & vbNewLine & Err.Description, MsgBoxStyle.Exclamation, "Unzureichende windream-Version")
|
||
Else
|
||
ClassLogger.Add("Unexpected Error in windream init:" & ex.Message)
|
||
MsgBox("Unexpected Error in windream init:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
||
End If
|
||
Return False
|
||
End Try
|
||
|
||
End Function
|
||
|
||
#End Region
|
||
|
||
#Region "+++++ Funktionen die für den Objekttyp relevate Informationen zurückliefern +++++"
|
||
|
||
''' <summary>
|
||
''' Liefert alle Objekttypen des aktuellen Servers als windream-Objekte.
|
||
''' </summary>
|
||
''' <returns>Alle Objekttypen als WMObjects-Objekt</returns>
|
||
''' <remarks></remarks>
|
||
Public Shared Function GetObjecttypesAsObjects() As WMObjects
|
||
Try
|
||
|
||
Return oDokumentTypen
|
||
|
||
Catch ex As Exception
|
||
MsgBox("Errormessage:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Auslesen der Objekttypen")
|
||
Return Nothing
|
||
End Try
|
||
End Function
|
||
|
||
''' <summary>
|
||
''' Liefert alle Objekttypen des aktuellen Servers als Array aus Strings.
|
||
''' </summary>
|
||
''' <returns>Array mit allen Objekttypen als Strings</returns>
|
||
''' <remarks></remarks>
|
||
Public Function GetObjecttypesAsStrings() As String()
|
||
|
||
Try
|
||
Dim objektTypenStr(oDokumentTypen.Count) As String
|
||
|
||
For i As Integer = 0 To oDokumentTypen.Count
|
||
objektTypenStr(i) = oDokumentTypen.Item(i).aName
|
||
Next
|
||
|
||
Return objektTypenStr
|
||
|
||
Catch ex As Exception
|
||
MsgBox("Errormessage:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Error reading Objecttypes as string")
|
||
Return Nothing
|
||
End Try
|
||
|
||
End Function
|
||
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
|
||
''' <summary>
|
||
''' Liefert alle Indexe eines Objekttypen.
|
||
''' </summary>
|
||
''' <param name="name">Name des Objekttyps</param>
|
||
''' <returns>Array mit allen Objekttyp zugeordneten Indexen als String</returns>
|
||
''' <remarks></remarks>
|
||
Public Shared Function GetIndicesByObjecttype(ByVal Objecttype_name As String) As String()
|
||
Try
|
||
Dim oObjectType As WMObject
|
||
Dim oIndexAttributes As WMObjectRelation
|
||
Dim oIndexAttribute As WMObject
|
||
Dim oIndex As WMObject
|
||
Dim oRelProperties As WMObjectRelationClass
|
||
|
||
' den Objekttyp laden
|
||
oObjectType = oSession.GetWMObjectByName(WMEntityObjectType, Objecttype_name)
|
||
|
||
' Beziehung zu Indizes des Objekttyp auslesen
|
||
oIndexAttributes = oObjectType.GetWMObjectRelationByName("TypeAttributes")
|
||
|
||
' Array für Indizes vorbereiten
|
||
Dim aIndexNames(oIndexAttributes.Count - 1) As String
|
||
|
||
' 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
|
||
Next
|
||
|
||
' Indexarray zurückgeben
|
||
Return aIndexNames
|
||
|
||
Catch ex As Exception
|
||
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error Reading windream-indices")
|
||
Return Nothing
|
||
End Try
|
||
End Function
|
||
''' <summary>
|
||
''' Liefert einen Objekttyp als WMObject an Hand dessen Name.
|
||
''' </summary>
|
||
''' <param name="objekttypName">Name des Objekttyps</param>
|
||
''' <returns>Objekttyp als WMObject</returns>
|
||
''' <remarks></remarks>
|
||
Public Function GetObjecttypeByName(ByVal objekttypName As String) As WMObject
|
||
Try
|
||
' alle Objekttypen auslesen
|
||
Dim oObjectTypes As WMObjects = Me.oSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument)
|
||
|
||
' alle Objekttypen durchlaufen und nach dem mit dem angegebenen Namen suchen
|
||
For Each oObjectType As WMObject In oObjectTypes
|
||
If oObjectType.aName = objekttypName Then
|
||
Return oObjectType
|
||
End If
|
||
Next
|
||
|
||
Return Nothing
|
||
|
||
Catch ex As Exception
|
||
MsgBox("Es konnte ein Objekttyp nicht erstellt werden." & vbNewLine & vbNewLine & "Errormessage:" & vbNewLine & ex.Message, MsgBoxStyle.Exclamation, "Objekttyp konnte nicht erstellt werden")
|
||
Return Nothing
|
||
End Try
|
||
End Function
|
||
|
||
''' <summary>
|
||
''' Überprüft ob der angegebene Index im Objekttyp existiert
|
||
''' </summary>
|
||
''' <param name="objekttyp">Name des zu durchsuchenden Objekttyps</param>
|
||
''' <param name="indexname">Name des zu suchenden Indexes</param>
|
||
''' <returns>Liefert True wenn der Index im Objekttyp existiert, sonst False</returns>
|
||
''' <remarks></remarks>
|
||
Public Shared Function ExistIndexInObjekttyp(ByVal objekttyp As String, ByVal indexname As String) As Boolean
|
||
Try
|
||
Dim indexnamen() As String = GetIndicesByObjecttype(objekttyp)
|
||
|
||
If indexnamen Is Nothing Then Return False
|
||
|
||
For Each index As String In indexnamen
|
||
If index = indexname Then Return True
|
||
Next
|
||
|
||
Catch ex As Exception
|
||
MsgBox("Error while checking index exists in Objecttype:" & vbNewLine & vbNewLine & "Errormessage:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Prüfen auf Existenz eines Index in einem Objekttyp")
|
||
End Try
|
||
|
||
Return False
|
||
|
||
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 Shared Function IsLoggedIn() As Boolean
|
||
Try
|
||
Return oSession.aLoggedin
|
||
Catch ex As Exception
|
||
MsgBox("Error while checking session:" & vbNewLine & vbNewLine & "Errormessage:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
||
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 Shared Function GetCurrentServer() As String
|
||
Try
|
||
WD_SERVER = oBrowser.GetCurrentServer
|
||
Return oBrowser.GetCurrentServer 'ClassWindream.oBrowser.GetCurrentServer
|
||
Catch ex As Exception
|
||
MsgBox("Error while getting windream-Server:" & vbNewLine & vbNewLine & "Errormessage:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
||
End Try
|
||
|
||
Return ""
|
||
End Function
|
||
|
||
'Public Function GetSharedCurrentServer() As String
|
||
' Try
|
||
' Return ClassWindream.oBrowser.GetCurrentServer
|
||
' Catch ex As Exception
|
||
' MsgBox("Der aktuell gewählte windream-Server konnte nicht ausgelesen werden." & vbNewLine & vbNewLine & "Errormessage:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Auslesen des windream-Servers")
|
||
' End Try
|
||
|
||
' Return ""
|
||
'End Function
|
||
|
||
|
||
''' <summary>
|
||
''' Liefert das Windream-Laufwerk des windream-Servers, in Form '[Laufwerksbuchstabe]:'. (z.B. 'W:')
|
||
''' </summary>
|
||
''' <returns>Laufwerksbuchstabe mit Doppelpunkt als String</returns>
|
||
''' <remarks></remarks>
|
||
'Public Function GetWindreamDriveLetter() As String
|
||
|
||
' Try
|
||
' Dim oControl As AISCONTROLDATACOMLib.AISControlData
|
||
' Dim sDrive As String = ""
|
||
|
||
' oControl = New AISCONTROLDATACOMLib.AISControlData
|
||
|
||
' sDrive = oControl.GetStringValue(&H10040003)
|
||
|
||
' Return sDrive & ":"
|
||
|
||
' Catch ex As Exception
|
||
' MsgBox("Errormessage: " & ex.Message, MsgBoxStyle.Critical, "Fehler beim Auslesen des windream-Laufwerks")
|
||
' End Try
|
||
|
||
' Return ""
|
||
'End Function
|
||
|
||
''' <summary>
|
||
''' Liefert den Typen eines Indexes als Integer.
|
||
''' </summary>
|
||
''' <param name="indexname">Name des zu überprüfenden Indexfeldes</param>
|
||
''' <returns>Liefert eine Zahl, die einen Typen beschreibt</returns>
|
||
''' <remarks></remarks>
|
||
|
||
Public Function GetValuesfromAuswahlliste(ByVal _auswahlliste As String) As Object
|
||
Try
|
||
'Dim oAttribute = Me.oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname)
|
||
'Dim vType = oAttribute.getVariableValue("vItems")
|
||
'Return vType
|
||
Dim oChoiceList = oSession.GetWMObjectByName(WMEntityChoiceList, _auswahlliste)
|
||
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: " & _auswahlliste & " nicht gefunden!", MsgBoxStyle.Critical, "Fehler:")
|
||
Return Nothing
|
||
End If
|
||
|
||
Catch ex As Exception
|
||
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in GetValuesfromAuswahlliste:")
|
||
Return Nothing
|
||
End Try
|
||
End Function
|
||
#End Region
|
||
Public Shared Function GetWMSessionAsUser(Domain, ServerName, UserName, Password)
|
||
Try
|
||
Dim SessionAsUser
|
||
Dim aConnect, aUserId, aSession
|
||
|
||
' Hilfsobjekte erschaffen, um eine Verbindung zum windream Server herzustellen
|
||
' mit der gewünschten Benutzer-Identität
|
||
aConnect = CreateObject("Windream.WMConnect")
|
||
'Bei einer impersonifizierten Session ist zu beachten, dass die ModuleID 9 zu nutzen ist.
|
||
'Wird keine Session-ID angegeben, hat die Session die ID 0 (‚Default‘).
|
||
aConnect.ModuleId = 9
|
||
If Err.Number <> 0 Then
|
||
Dim msg = "Error in CreateObject (aConnect) - Err.Number: " & Err.Number & vbNewLine & Err.Description
|
||
ClassLogger.Add(msg, True)
|
||
Return Nothing
|
||
End If
|
||
|
||
aUserId = CreateObject("WMOTool.WMUserIdentity")
|
||
If Err.Number <> 0 Then
|
||
Dim msg = "Error in CreateObject('WMOTool.WMUserIdentity') - Err.Number: " & Err.Number & vbNewLine & Err.Description
|
||
ClassLogger.Add(msg, True)
|
||
Return Nothing
|
||
End If
|
||
|
||
aUserId.aDomain = Domain
|
||
aUserId.aServerName = ServerName
|
||
aUserId.aUserName = UserName
|
||
aUserId.aPassword = Password
|
||
|
||
aSession = aConnect.Login(aUserId)
|
||
|
||
|
||
If Err.Number <> 0 Then
|
||
Dim msg = "Error in Connect.Login(aUserId) - Err.Number: " & Err.Number & vbNewLine & Err.Description
|
||
ClassLogger.Add(msg, True)
|
||
Return Nothing
|
||
Else
|
||
SessionAsUser = aSession
|
||
If aSession.aLoggedin = True Then
|
||
Return SessionAsUser
|
||
End If
|
||
|
||
End If
|
||
Catch ex As Exception
|
||
Dim msg = "Unexpected Error in GetWMSessionAsUser: " & ex.Message
|
||
ClassLogger.Add(msg, True)
|
||
Return Nothing
|
||
End Try
|
||
|
||
End Function
|
||
Public Shared Function Stream_File(ByVal filenameQuelle As String, ByVal zielpfad As String, Optional ImportAll As Boolean = False)
|
||
Try
|
||
aktWMObject = Nothing
|
||
If My.Computer.FileSystem.DirectoryExists(zielpfad) = False Then
|
||
My.Computer.FileSystem.CreateDirectory(zielpfad)
|
||
ClassLogger.Add(">> Zielverzeichnis neu erzeugt!", False)
|
||
End If
|
||
|
||
Const STREAM_BinaryObject = "BinaryObject"
|
||
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Stream_File wurde gestartet", False)
|
||
Dim endgültigerDateiname As String = ""
|
||
' Objekt für Datei und Zielverzeichnis anlegen
|
||
' Dim Quelldatei_Name As String = Path.GetFileName(filenameQuelle)
|
||
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Quelldatei gelesen", False)
|
||
|
||
'########
|
||
Dim Zielverzeichnis As String = zielpfad
|
||
endgültigerDateiname = CURRENT_NEWFILENAME.Substring(2)
|
||
If My.Computer.FileSystem.DirectoryExists(Zielverzeichnis) Then
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> targetPath exisitiert", False)
|
||
' Überprüfen ob der zu Kopieren notwendige Speicherplatz auf Ziellaufwerk vorhanden ist
|
||
Dim dvr As New DriveInfo(vWLaufwerk & ":")
|
||
Dim freeSpace = dvr.TotalFreeSpace
|
||
|
||
Dim info As New FileInfo(filenameQuelle)
|
||
' Get length of the file.
|
||
Dim length As Long = info.Length
|
||
If freeSpace < length Then
|
||
MsgBox(" Auf dem Zielverzeichnis ist nicht genug Speicherplatz zum Übertragen frei.", MsgBoxStyle.Exclamation, "Nicht genug Speicherplatz")
|
||
Return -10
|
||
End If
|
||
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Datei kopieren von " & filenameQuelle & " nach " & endgültigerDateiname & ".", False)
|
||
Dim Connect
|
||
Dim Session
|
||
Dim WMObject
|
||
Dim aFileIO
|
||
Dim aWMStream
|
||
Dim wmbrwsr
|
||
Dim dmsServer As String
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Connect definieren: CreateObject('Windream.WMConnect')", False)
|
||
Connect = CreateObject("Windream.WMConnect")
|
||
aFileIO = New WMOTOOLLib.WMFileIO
|
||
'If My.Settings.DLL_WMOTOOL = "" Then
|
||
' aFileIO = New WMOTOOLLib.WMFileIO
|
||
' If LogErrorsOnly = False Then ClassLogger.Add(" >> Direkter Verweis auf New WMOTOOLLib.WMFileIO", False)
|
||
'Else
|
||
' aFileIO = CreateObject(My.Settings.DLL_WMOTOOL) 'WMOTool.WMFileIO oder WMOTOOLLib.WMFileIO
|
||
' If LogErrorsOnly = False Then ClassLogger.Add(" >> Verwendeter Verweis aus Anwendungsstring: '" & My.Settings.DLL_WMOTOOL & "'", False)
|
||
'End If
|
||
|
||
wmbrwsr = CreateObject("WMOBrws.ServerBrowser")
|
||
'==================================================================
|
||
' get the current DMS-server to log in
|
||
'==================================================================
|
||
dmsServer = wmbrwsr.GetCurrentServer
|
||
'==================================================================
|
||
' create a session
|
||
'==================================================================
|
||
'Prüfen ob sich personifiziert angemeldet werden muss?
|
||
If FAU_AD_USER <> "" Then
|
||
Session = GetWMSessionAsUser(FAU_AD_DOMAIN, FAU_AD_SERVER, FAU_AD_USER, FAU_AD_USER_PW)
|
||
Else
|
||
Session = CreateObject("Windream.WMSession", dmsServer)
|
||
End If
|
||
'==================================================================
|
||
' login session
|
||
'==================================================================
|
||
Try
|
||
Connect.LoginSession(Session)
|
||
Dim LoggedIn = Session.aLoggedin
|
||
If LoggedIn Then
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Login ok. You are logged in as '" & Connect.UserName & "' on Server '" & dmsServer, False)
|
||
'MsgBox("Login ok. You are logged in as '" + Connect.UserName + "' on Server '" + dmsServer + "'")
|
||
Else
|
||
ClassLogger.Add(">> Login on dms-Server failed", False)
|
||
' MsgBox("Login failed. ")
|
||
End If
|
||
Catch ex As Exception
|
||
ClassLogger.Add(">> Persionalized session - User is already logged in!'" & Err.Description & "'")
|
||
End Try
|
||
|
||
Const WMCOMEventWMSessionNeedIndex = 1
|
||
|
||
'windream Objekte erstellen ohne Indexierungs-Event
|
||
Session.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
|
||
'==================================================================
|
||
' check if files exist
|
||
'==================================================================
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> ÜBERPRÜFTER DATEINAME => " & endgültigerDateiname, False)
|
||
Dim wdFilexists As Boolean
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Versuch auf die Datei in W: zuzugreifen und zu sperren...", False)
|
||
wdFilexists = Session.WMObjectExists(WMEntityDocument, endgültigerDateiname, 0, 0)
|
||
|
||
If wdFilexists = False Then
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Datei ist NICHT vorhanden, kann also einfach neu angelegt werden", False)
|
||
Err.Clear()
|
||
'==================================================================
|
||
' create an object
|
||
'==================================================================
|
||
WMObject = Session.GetNewWMObjectFS(WMEntityDocument, endgültigerDateiname, WMObjectEditModeObject)
|
||
If Err.Number > 0 Then
|
||
ClassLogger.Add(" FEHLER: WMObject konnte nicht erzeugt werden - Error: '" & Err.Description & "'")
|
||
'MsgBox(Err.Description)
|
||
End If
|
||
' MsgBox("Created file: " + endgültigerDateiname)
|
||
Else
|
||
' wenn auf die Datei zugeriffen werden konnte ist sie bereits vorhanden -> Datum anhängen
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Es konnte zugegriffen werden -> DATEI IST BEREITS VORHANDEN", False)
|
||
Err.Clear()
|
||
|
||
WMObject = Session.GetNewWMObjectFS(WMEntityDocument, endgültigerDateiname, WMObjectEditModeObject)
|
||
If Err.Number > 0 Then
|
||
ClassLogger.Add(" FEHLER: Neues WMObject (Kopie) konnte nicht erzeugt werden - Error: '" & Err.Description & "'")
|
||
'MsgBox(Err.Description)
|
||
End If
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> WMObject zugewiesen", False)
|
||
End If
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> ENDGÜLTIGER DATEINAME => " & endgültigerDateiname, False)
|
||
If WMObject IsNot Nothing Then
|
||
' lock object for file system access (to change the file itself)
|
||
WMObject.lock()
|
||
' set fileIO the local source file
|
||
aFileIO.bstrOriginalFileName = filenameQuelle
|
||
If Err.Number > 0 Then
|
||
'MsgBox(Err.Number.ToString)
|
||
ClassLogger.Add(" FEHLER: fileIO konnte nicht gesetzt werden - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
||
ClassLogger.Add(" HINWEIS: Überprüfen Sie den Verweis auf die Bibliotheken 'WMOTool.WMFileIO' UND 'WMOTOOLLib.WMFileIO' und ändern diese in den Anwendungseinstellungen (DLL_WMOTOOL)'", False)
|
||
WMObject.Unlock()
|
||
System.IO.File.Delete(vWLaufwerk & ":\" & endgültigerDateiname)
|
||
Return False
|
||
' MsgBox(Err.Description)
|
||
End If
|
||
' open the windream object's file stream for writing
|
||
aWMStream = WMObject.OpenStream(STREAM_BinaryObject, WMObjectStreamOpenModeReadWrite)
|
||
If Err.Number > 0 Then
|
||
ClassLogger.Add(" FEHLER bei OpenStream - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
||
WMObject.Unlock()
|
||
System.IO.File.Delete(vWLaufwerk & ":\" & endgültigerDateiname)
|
||
Return False
|
||
'MsgBox(Err.Description)
|
||
End If
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> oWMStream erzeugt", False)
|
||
' give fileIO helper object the windream stream
|
||
aFileIO.aWMStream = aWMStream
|
||
If Err.Number > 0 Then
|
||
ClassLogger.Add(" FEHLER bei Zuweisen aWMStream zu aFileIO - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
||
WMObject.Unlock()
|
||
System.IO.File.Delete(vWLaufwerk & ":\" & endgültigerDateiname)
|
||
Return False
|
||
'MsgBox(Err.Description)
|
||
End If
|
||
' let fileIO object import the original file into windream
|
||
aFileIO.ImportOriginal(True)
|
||
If Err.Number > 0 Then
|
||
ClassLogger.Add(" FEHLER bei FileIO.ImportOriginal(True) - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
||
WMObject.Unlock()
|
||
System.IO.File.Delete(vWLaufwerk & ":\" & endgültigerDateiname)
|
||
Return False
|
||
' MsgBox(Err.Description)
|
||
End If
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Inhalt der Datei konnte übertragen werden", False)
|
||
' close the windream file stream
|
||
aWMStream.Close()
|
||
If Err.Number > 0 Then
|
||
ClassLogger.Add(" FEHLER bei aWMStream.Close() - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
||
WMObject.Unlock()
|
||
System.IO.File.Delete(vWLaufwerk & ":\" & endgültigerDateiname)
|
||
Return False
|
||
'MsgBox(Err.Description)
|
||
End If
|
||
' save new windream object
|
||
WMObject.save()
|
||
If Err.Number > 0 Then
|
||
ClassLogger.Add(" FEHLER bei WMObject.save - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
||
WMObject.Unlock()
|
||
System.IO.File.Delete(vWLaufwerk & ":\" & endgültigerDateiname)
|
||
Return Err.Number
|
||
'MsgBox(Err.Description)
|
||
End If
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Datei konnte gespeichert werden", False)
|
||
' unlock the windream object
|
||
WMObject.unlock()
|
||
If Err.Number > 0 Then
|
||
ClassLogger.Add(" FEHLER bei WMObject.unlock - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
||
WMObject.Unlock()
|
||
System.IO.File.Delete(vWLaufwerk & ":\" & endgültigerDateiname)
|
||
Return False
|
||
'MsgBox(Err.Description)
|
||
End If
|
||
'DATEI GRÖSSE ERMITTELN - MANCHMAL KOMMT ES VOR DAS DATEIGRÖße 0 ist
|
||
Dim info2 As New FileInfo(vWLaufwerk & ":\" & endgültigerDateiname)
|
||
Dim length1 As Long = info2.Length
|
||
If length1 > 0 And Err.Number = 0 Then
|
||
If endgültigerDateiname.StartsWith("\") Then
|
||
If endgültigerDateiname.StartsWith("\\") Then
|
||
endgültigerDateiname = endgültigerDateiname.Replace("\\", "\")
|
||
Else
|
||
endgültigerDateiname = endgültigerDateiname
|
||
End If
|
||
Else
|
||
endgültigerDateiname = "\" & endgültigerDateiname
|
||
End If
|
||
CURRENT_FILEIN_WD = vWLaufwerk & ":" & endgültigerDateiname
|
||
CURRENT_FILEIN_WD = CURRENT_FILEIN_WD.Replace("\\", "\")
|
||
ClassLogger.Add(">> File '" & CURRENT_FILEIN_WD & "' was imported.", False)
|
||
|
||
|
||
aktWMObject = WMObject
|
||
Return True
|
||
Else
|
||
If length = 0 Then
|
||
If ImportAll = False Then
|
||
System.IO.File.Delete(vWLaufwerk & ":\" & endgültigerDateiname)
|
||
ClassLogger.Add(" Error in Stream File - FileLength = 0, File " & CURRENT_FILEIN_WD & " was deleted")
|
||
Return False
|
||
Else
|
||
If endgültigerDateiname.StartsWith("\") Then
|
||
If endgültigerDateiname.StartsWith("\\") Then
|
||
endgültigerDateiname = endgültigerDateiname.Replace("\\", "\")
|
||
Else
|
||
endgültigerDateiname = endgültigerDateiname
|
||
End If
|
||
Else
|
||
endgültigerDateiname = "\" & endgültigerDateiname
|
||
End If
|
||
ClassLogger.Add(">> ATTENTION in Stream File - FileLength = 0, File " & CURRENT_FILEIN_WD & " will be imported")
|
||
CURRENT_FILEIN_WD = vWLaufwerk & ":" & endgültigerDateiname
|
||
CURRENT_FILEIN_WD = CURRENT_FILEIN_WD.Replace("\\", "\")
|
||
|
||
'###
|
||
ClassLogger.Add(">> File '" & CURRENT_FILEIN_WD & "' was imported.", False)
|
||
aktWMObject = WMObject
|
||
Return True
|
||
End If
|
||
|
||
Else
|
||
ClassLogger.Add("Error in Stream File - Error <> 0")
|
||
Return False
|
||
End If
|
||
|
||
End If
|
||
Else
|
||
Return False
|
||
End If
|
||
Else
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> targetPath exisitiert NICHT", False)
|
||
Return False
|
||
End If
|
||
Catch ex As Exception
|
||
MsgBox("Unexpected Error in Stream File: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
||
Return False
|
||
End Try
|
||
|
||
|
||
End Function
|
||
Public Shared Function Delete_WDFile(ByVal WD_File As String)
|
||
Try
|
||
WD_File = WD_File.Substring(2)
|
||
Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject
|
||
Try
|
||
WMObject = oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File) 'WINDREAMLib.WMEntity.WMEntityDocument
|
||
Catch ex As Exception
|
||
ClassLogger.Add(">> Could not create WMObject for file '" & WD_File & "' - so it is not existing", False)
|
||
Return False
|
||
End Try
|
||
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Deleting started - Object created", False)
|
||
WMObject.Delete()
|
||
Return True
|
||
Catch ex As Exception
|
||
MsgBox("Unexpected Error in Delete_WDFile: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
||
ClassLogger.Add("Unexpected Error in Delete_WDFile: " & ex.Message, False)
|
||
Return False
|
||
End Try
|
||
End Function
|
||
|
||
Public Shared Function WDFile_exists(ByVal WD_File As String)
|
||
Try
|
||
If Not WD_File.StartsWith("\") Then
|
||
WD_File = WD_File.Substring(2)
|
||
End If
|
||
Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject
|
||
WMObject = oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File) 'WINDREAMLib.WMEntity.WMEntityDocument
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> WDFile_exists - Could create an object", False)
|
||
Return True
|
||
Catch ex As Exception
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> WDFile_exists- Could not create object for file '" & WD_File & "'", False)
|
||
Return False
|
||
End Try
|
||
End Function
|
||
|
||
|
||
''' <summary>
|
||
''' Übergibt einer in windream gespeicherten Datei Indexwerte
|
||
''' </summary>
|
||
''' <param name="filenameQuelle">Name der zu indexierenden Datei</param>
|
||
''' <param name="filenameZiel">neuer Name der zu indexierenden Datei</param>
|
||
''' <returns>Liefert True wenn das Indexieren erfolgreich war, sonst False</returns>
|
||
''' <remarks></remarks>
|
||
Public Shared Function IndexFile(ByVal WD_File As String, ByVal _Indexname As String, ByVal _Value As String, Optional outside As Boolean = False, Optional _objecttype As String = "")
|
||
Try
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> IndexFile ('" & WD_File & "','" & _Indexname & "','" & _Value & "') was called!", False)
|
||
|
||
'' das entsprechende Attribut aus windream auslesen
|
||
'Dim oAttribute = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, _Indexname)
|
||
''den Variablentyp (String, Integer, ...) auslesen
|
||
'Dim vType = oAttribute.getVariableValue("dwAttrType")
|
||
WD_File = WD_File.Substring(2)
|
||
Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject
|
||
|
||
'MsgBox("IndexFile:" & vbNewLine & ClassDateiimportWindream.GetWindreamDriveLetter & filenameZiel & vbNewLine & Me.selectedProfile.DokumenttypString)
|
||
' den Dokumenttyp schreiben
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Indexing will be started", False)
|
||
If outside = True Then
|
||
_WDObjekttyp = _objecttype
|
||
aktWMObject = Nothing
|
||
aktWMObject = oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File) 'WINDREAMLib.WMEntity.WMEntityDocument
|
||
End If
|
||
' ein windream-Objekt der Datei anlegen
|
||
WMObject = aktWMObject 'oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File)
|
||
Try
|
||
' die Datei sperren
|
||
WMObject.lock()
|
||
Catch ex As Exception
|
||
' nichts tun (Datei ist bereits gesperrt)
|
||
End Try
|
||
|
||
' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
|
||
If WMObject.aObjectType.aName = "Standard" Then
|
||
Try
|
||
' ihr den entsprechenden Dokumenttyp zuweisen
|
||
WMObject.aObjectType = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp)
|
||
Catch ex As Exception
|
||
ClassLogger.Add("Unexpected Error Setting the objecttype' " & _WDObjekttyp & "'!")
|
||
ClassLogger.Add("Error-Description: " & ex.Message)
|
||
WMObject.Save()
|
||
WMObject.unlock()
|
||
' Me.TreeNodeInfos.Add(temp)
|
||
Return False
|
||
End Try
|
||
|
||
' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Objecttype '" & _WDObjekttyp & "' was set!", False)
|
||
End If
|
||
|
||
Try
|
||
WMObject.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
|
||
|
||
Try
|
||
WMObject.unlock()
|
||
Catch ex As Exception
|
||
' wenn das entsperren nicht geklappt hat, dann war die Datei auch nicht gesperrt
|
||
End Try
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> File saved / Unlock done", False)
|
||
' wenn bis hierher alles geklappt hat wurde ein Dokumenttyp übergeben
|
||
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Objecttype: " & _WDObjekttyp, False)
|
||
|
||
|
||
' wenn keine Werte vorhanden sind, soll wenigstens der Dokumenttyp eingetragen werden
|
||
|
||
Dim indexe As String = ""
|
||
|
||
Dim werte = New ArrayList
|
||
|
||
'Den Typ des Index-Feldes auslesen
|
||
'MsgBox(value.GetType.ToString)
|
||
|
||
If (GetTypeOfIndexAsIntByName(_Indexname) = WMObjectVariableValueTypeVector) Or GetTypeOfIndexAsIntByName(_Indexname) = 4097 Then
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type vectorfield", False)
|
||
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> value before checking: " & _Value, False)
|
||
_Value = CheckIndexValue(_Value)
|
||
'Ausstieg da Fehler in der Überprüfung
|
||
If _Value Is Nothing Then
|
||
Return False
|
||
End If
|
||
werte.Add(_Value)
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> value for indexing: " & _Value, False)
|
||
Else
|
||
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> value before checking: " & _Value, False)
|
||
_Value = CheckIndexValue(_Value)
|
||
'Ausstieg da Fehler in der Überprüfung
|
||
If _Value Is Nothing Then
|
||
Return False
|
||
End If
|
||
werte.Add(_Value)
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> value for indexing: " & _Value, False)
|
||
End If
|
||
|
||
Dim arrIndex() As String = Nothing
|
||
Dim arrValue() As String = Nothing
|
||
ReDim Preserve arrIndex(0)
|
||
ReDim Preserve arrValue(0)
|
||
arrIndex(0) = _Indexname
|
||
arrValue(0) = _Value
|
||
Return RunIndexing(WMObject, arrIndex, arrValue)
|
||
|
||
'MsgBox(arr(0) & vbNewLine & indexe)
|
||
|
||
Catch ex As Exception
|
||
ClassLogger.Add("Unexpected Error in IndexFile: the file' " & WD_File & "' could not be indexed!")
|
||
ClassLogger.Add("Error-Description: " & ex.Message)
|
||
' Me.TreeNodeInfos.Add(temp)
|
||
Return False
|
||
End Try
|
||
End Function
|
||
Public Shared Function File_SetBooleanIndex(ByVal _value As Boolean, ByVal _dok As WINDREAMLib.WMObject, ByVal _Indexname As String, Optional SetOType As Boolean = True)
|
||
Try
|
||
If _Indexname <> "" Then
|
||
'Überprüfen ob Boolean-Value bereits gesetzt wurde?
|
||
Dim akt_Status As Boolean = CBool(_dok.GetVariableValue(_Indexname))
|
||
If akt_Status <> _value Then
|
||
'Index muß angepasst werden
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Index not set to '" & _value.ToString & "'", False)
|
||
Dim arrIndex() As String = Nothing
|
||
Dim arrValue() As String = Nothing
|
||
'Nun die Datei indexieren
|
||
arrIndex = Nothing
|
||
arrValue = Nothing
|
||
ReDim Preserve arrIndex(0)
|
||
ReDim Preserve arrValue(0)
|
||
arrIndex(0) = _Indexname
|
||
arrValue(0) = _value.ToString
|
||
RunIndexing(_dok, arrIndex, arrValue, SetOType)
|
||
Else
|
||
'Validation muß nicht angepasst werden
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Index already set to '" & _value.ToString & "'", False)
|
||
End If
|
||
End If
|
||
Catch ex As Exception
|
||
ClassLogger.Add("Unexpected Error in File_SetBooleanIndex!")
|
||
ClassLogger.Add("Error-Description: " & ex.Message)
|
||
End Try
|
||
|
||
|
||
End Function
|
||
Private Shared Function RunIndexing(ByVal oDocument As WMObject, ByVal Indizes() As String, ByVal aValues() As Object, Optional setOType As Boolean = True)
|
||
Dim vektInsState As Integer = 1
|
||
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
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Indexvalue is empty - No indexing", False)
|
||
End If
|
||
' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
|
||
If oDocument.aObjectType.aName <> _WDObjekttyp And setOType = True Then
|
||
' ihr den entsprechenden Dokumenttyp zuweisen
|
||
oDocument.aObjectType = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp)
|
||
' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Objecttype '" & oDocument.aObjectType.aName & "' was changed to '" & _WDObjekttyp, False)
|
||
Else
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Objecttype was set already.", False)
|
||
End If
|
||
If setOType = True Then
|
||
Try
|
||
oDocument.Save()
|
||
Catch ex As Exception
|
||
' wenn es einen Fehler beim speichern gab, dann konnte auch kein Objekttyp gesetzt werden -> es kann also auch keine
|
||
' Indexierung stattfinden und die Indexierung muss nicht fortgesetzt werden
|
||
Return False
|
||
End Try
|
||
End If
|
||
|
||
'Jetzt jeden Indexwert durchlaufen
|
||
For Each aName As String In Indizes
|
||
indexname = aName
|
||
If LogErrorsOnly = False Then
|
||
ClassLogger.Add(" ", False)
|
||
ClassLogger.Add(" >> Indexing of index '" & indexname & "'", False)
|
||
End If
|
||
' das entsprechende Attribut aus windream auslesen
|
||
Dim oAttribute = oSession.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
|
||
|
||
|
||
'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
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex WMObjectVariableValueTypeString", False)
|
||
convertValue = CStr(value)
|
||
Case WMObjectVariableValueTypeInteger
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex WMObjectVariableValueTypeInteger", False)
|
||
value = value.ToString.Replace(" ", "")
|
||
If IsNumeric(value) = False Then
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Attention: Value '" & value & "' can not be converted to integer!", False)
|
||
End If
|
||
value = value.ToString.Replace(" ", "")
|
||
convertValue = CInt(value)
|
||
_int = True
|
||
Case WMObjectVariableValueTypeFloat
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex WMObjectVariableValueTypeFloat", False)
|
||
value = value.ToString.Replace(" ", "")
|
||
convertValue = CDbl(value)
|
||
Case WMObjectVariableValueTypeFixedPoint
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex WMObjectVariableValueTypeFixedPoint", False)
|
||
value = value.ToString.Replace(" ", "")
|
||
convertValue = CDbl(value)
|
||
_dbl = True
|
||
Case WMObjectVariableValueTypeBoolean
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex WMObjectVariableValueTypeBoolean", False)
|
||
convertValue = CBool(value)
|
||
_bool = True
|
||
Case WMObjectVariableValueTypeDate
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex WMObjectVariableValueTypeDate", False)
|
||
_date = True
|
||
'Dim _date As Date = value
|
||
convertValue = value
|
||
Case WMObjectVariableValueTypeTimeStamp
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex WMObjectVariableValueTypeTimeStamp", False)
|
||
convertValue = CDbl(value)
|
||
Case WMObjectVariableValueTypeCurrency
|
||
ClassLogger.Add(" - type of windreamIndex WMObjectVariableValueTypeCurrency", False)
|
||
'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
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex WMObjectVariableValueTypeTime", False)
|
||
'If ((value)) Then
|
||
' convertValue = CDate(value)
|
||
'Else
|
||
' convertValue = ""
|
||
'End If
|
||
'Dim _date As Date = value
|
||
convertValue = convertValue '*_date.ToShortTimeString
|
||
Case WMObjectVariableValueTypeFloat
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex WMObjectVariableValueTypeFloat", False)
|
||
convertValue = CStr(value)
|
||
Case WMObjectVariableValueTypeVariant
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex WMObjectVariableValueTypeVariant", False)
|
||
convertValue = CStr(value)
|
||
Case WMObjectVariableValueTypeFulltext
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex WMObjectVariableValueTypeFulltext", False)
|
||
convertValue = CStr(value)
|
||
Case 4097
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex 4097 Vektor alphanumerisch", False)
|
||
'Vektor alphanumerisch
|
||
vektor = True
|
||
Case 4098
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex 4098 Vektor Numerisch", False)
|
||
'Vektor Numerisch
|
||
vektor = True
|
||
Case 4099
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex 4099 Vektor Kommazahl", False)
|
||
'Vektor Kommazahl
|
||
vektor = True
|
||
Case 4100
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex 4100 Vektor Boolean", False)
|
||
'Vektor Kommazahl
|
||
vektor = True
|
||
Case 4101
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex 4101 Vektor Date", False)
|
||
'Vektor Kommazahl
|
||
vektor = True
|
||
Case 4103
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex 4103 Vektor DateTime", False)
|
||
'Vektor DateTime
|
||
vektor = True
|
||
Case 4107
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex 4107 Integer 64bit", False)
|
||
vektor = True
|
||
Case 36865
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> type of windreamIndex 36865 Vektor alphanumerisch", False)
|
||
'Vektor Kommazahl
|
||
vektor = True
|
||
Case Else
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes konnte nicht bestimmt werden!", False)
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> 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
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Converted valuet: '" & convertValue.ToString & "'", False)
|
||
End If
|
||
End If
|
||
'############################################################################################
|
||
'####################### Der eigentliche Indexierungsvorgang ################################
|
||
'############################################################################################
|
||
If vektor = False Then
|
||
Try
|
||
If convertValue.ToString Is Nothing = False Then
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Now: oDocument.SetVariableValue(" & aName & ", " & convertValue & ")", False)
|
||
If _int = True Then
|
||
convertValue = convertValue.ToString.Replace(" ", "")
|
||
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
|
||
convertValue = convertValue.ToString.Replace(" ", "")
|
||
oDocument.SetVariableValue(aName, CDbl(convertValue))
|
||
Else
|
||
oDocument.SetVariableValue(aName, convertValue)
|
||
End If
|
||
'Die Datei speichern
|
||
oDocument.Save()
|
||
If LogErrorsOnly = False Then
|
||
ClassLogger.Add(" >> index '" & aName & "' was written", False)
|
||
ClassLogger.Add("", False)
|
||
End If
|
||
Else
|
||
ClassLogger.Add(" >> No indexvalue exists", False)
|
||
End If
|
||
Catch ex As Exception
|
||
ClassLogger.Add("Unexpected Error in SetVariableValue für Index '" & aName & "': " & ex.Message, True)
|
||
oDocument.Save()
|
||
oDocument.unlock()
|
||
Return False
|
||
End Try
|
||
|
||
Else
|
||
'VEKTORFELDER, ALSO ÜBERPRÜFEN OB ERGEBNIS-ARRAY GEFÜLLT IST
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Vectorfield: Preparing of Array", False)
|
||
Dim myArray()
|
||
'If aValues.Length = 2 And aValues(0) = "" Then
|
||
' If LogErrorsOnly = False Then ClassLogger.Add(" >> Indexwert ist leer/Nothing - Keine Nachindexierung", False)
|
||
'End If
|
||
'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 Then
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Vectorfield will be filled with ONE VALUE", False)
|
||
ReDim myArray(0)
|
||
myArray(0) = Convert_VectorType(vType, value)
|
||
'Jetzt überprüfen ob Werte in Vektorfeld angefügt oder überschrieben werden sollen
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Converted Value: " & myArray(0).ToString, False)
|
||
Dim VektorArray()
|
||
VektorArray = Return_VektorArray(oDocument, aName, myArray, vType)
|
||
If VektorArray Is Nothing = False Then
|
||
ReDim myArray(VektorArray.Length - 1)
|
||
Array.Copy(VektorArray, myArray, VektorArray.Length)
|
||
'Jetzt die Nachindexierung für Vektor-Felder
|
||
oDocument.SetVariableValue(aName, myArray) '
|
||
If LogErrorsOnly = False Then
|
||
ClassLogger.Add(" >> Vectorindex '" & aName & "' was written", False)
|
||
ClassLogger.Add("", False)
|
||
End If
|
||
'Die Änderungen festsschreiben/speichern
|
||
oDocument.Save()
|
||
End If
|
||
|
||
End If
|
||
|
||
|
||
|
||
' Else
|
||
' If LogErrorsOnly = False Then ClassLoggerNI.Add(" >> Vektorfeld wird mit MEHREREN Werten gefüllt ", False)
|
||
' ' das ausgewählte Profil in _selectedProfile laden
|
||
' _selectedProfil = ClassNIProfile.getProfilByName(Profil)
|
||
|
||
' '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 DR In DT.Rows
|
||
' If DR.Item("Indexname") = aName.ToString Then
|
||
' myArray(i1) = CStr(DR.Item("Wert"))
|
||
' If LogErrorsOnly = False Then ClassLoggerNI.Add(" >> Wert (" & i1 & ") aus Datatable: '" & myArray(i1).ToString & "'", False)
|
||
' i1 = i1 + 1
|
||
' End If
|
||
' Next
|
||
' If LogErrorsOnly = False Then ClassLoggerNI.Add(" >> Array wurde erfolgreich erzeugt", False)
|
||
|
||
' If _selectedProfil Is Nothing = False Then
|
||
' Me._selectedProfil._links.selectedLink = Me._selectedProfil._links.getLinkByIndex(aName)
|
||
' If Me._selectedProfil._links.selectedLink IsNot Nothing Then
|
||
' Dim VektorArray()
|
||
' Select Case Me._selectedProfil._links.selectedLink.vktins_state
|
||
' Case 1
|
||
' If LogErrorsOnly = False Then ClassLoggerNI.Add(" >> vektInsState = '1'", False)
|
||
' Dim z As Integer = 0
|
||
' ReDim VektorArray(myArray.Length)
|
||
' For Each str As Object In myArray
|
||
' If str Is Nothing = False Then
|
||
' 'Das Array anpassen
|
||
' ReDim Preserve VektorArray(z)
|
||
' 'Den Wert im Array speichern
|
||
' VektorArray(z) = str
|
||
' z += 1
|
||
' End If
|
||
' Next
|
||
' Case 2 'Anfügen
|
||
' If LogErrorsOnly = False Then ClassLoggerNI.Add(" >> vektInsState = '2'", False)
|
||
' VektorArray = Return_VektorArray(oDocument, aName, myArray, False)
|
||
' Case 3 'Anfügen mit DuplikatCheck
|
||
' If LogErrorsOnly = False Then ClassLoggerNI.Add(" >> vektInsState = '3'", False)
|
||
' VektorArray = Return_VektorArray(oDocument, aName, myArray, True)
|
||
' End Select
|
||
' If VektorArray Is Nothing = False Then
|
||
' 'Das Array wieder anpassen
|
||
' ReDim myArray(VektorArray.Length - 1)
|
||
' 'Array.Copy(VektorArray, myArray, VektorArray.Length)
|
||
' i1 = 0
|
||
' For Each _value As Object In VektorArray
|
||
' Select Case vType
|
||
' Case 36865
|
||
' myArray(i1) = CStr(_value)
|
||
' Case 4097
|
||
' myArray(i1) = CStr(_value)
|
||
' Case 4098
|
||
' Dim v As String = _value.ToString.Replace(" ", "")
|
||
' myArray(i1) = CInt(v)
|
||
' Case 4099
|
||
' 'Vektroryp Double
|
||
' Dim Str As String = _value
|
||
' Str = Str.ToString.Replace(" ", "")
|
||
' myArray(i1) = CDbl(Str.Replace(".", ","))
|
||
' Case 4101
|
||
' 'Vektortyp DATE
|
||
' Dim dat As String = _value
|
||
' myArray(i1) = CDate(dat.Replace(".", ","))
|
||
' Case 4107
|
||
' myArray(i1) = Convert.ToInt64(_value)
|
||
' Case Else
|
||
' 'Vektortyp ALPHANUMERISCH
|
||
' 'Die Größe des Arrays festlegen
|
||
' myArray(i1) = CStr(DR.Item("Wert"))
|
||
' End Select
|
||
' If LogErrorsOnly = False Then ClassLoggerNI.Add(" >> Konvertierter Wert (" & i1 & ") : '" & myArray(i1).ToString & "'", False)
|
||
' i1 += 1
|
||
' Next
|
||
' 'Jetzt die Nachindexierung für Vektor-Felder
|
||
' oDocument.SetVariableValue(aName, myArray)
|
||
' If LogErrorsOnly = False Then ClassLoggerNI.Add(" >> 'SetVariableValue' für VEKTOR erfolgreich", False)
|
||
|
||
' ' oDocument.LockRights()
|
||
|
||
' 'Die Änderungen festsschreiben/speichern
|
||
' oDocument.Save()
|
||
' If LogErrorsOnly = False Then ClassLoggerNI.Add(">> Indexierung erfolgreich beendet (Save ...", False)
|
||
' Else
|
||
' ClassLoggerNI.Add(" - Achtung: VektorArray Is NOTHING", False)
|
||
' oDocument.Save()
|
||
' Return True
|
||
' End If
|
||
|
||
' Else
|
||
' ClassLoggerNI.Add(" - Achtung: Der Link konnte nicht geladen werden - _selectedProfil._links.selectedLink is NOTHING", False)
|
||
' oDocument.Save()
|
||
' Return True
|
||
' End If
|
||
' Else
|
||
' ClassLoggerNI.Add(" - Achtung: Das Profil konnte nicht geladen werden - _selectedProfil is NOTHING", False)
|
||
' oDocument.Save()
|
||
' Return True
|
||
' End If
|
||
|
||
' End If
|
||
|
||
' End If
|
||
|
||
'End If
|
||
|
||
|
||
|
||
End If
|
||
Else
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Array of indexvalues is nothing - No indexing", False)
|
||
End If
|
||
i += 1
|
||
|
||
Next
|
||
oDocument.unlock()
|
||
If LogErrorsOnly = False Then
|
||
ClassLogger.Add(" >> ...and unlock.", False)
|
||
End If
|
||
Return True
|
||
Else
|
||
ClassLogger.Add(" >> document is locked!", False)
|
||
'oDocument.unlock()
|
||
Return False
|
||
End If
|
||
End If
|
||
Catch ex As Exception
|
||
ClassLogger.Add("Unexpected Error in ClassNiWindream.RunIndexing: " & ex.Message)
|
||
oDocument.Save()
|
||
oDocument.unlock()
|
||
Return False
|
||
End Try
|
||
End Function
|
||
Private Shared Function Return_VektorArray(ByVal oDocument As WMObject, vktIndexName As String, arr_Indexwerte As Object, vType As Object)
|
||
Try
|
||
Dim missing As Boolean = False
|
||
Dim Anzahl As Integer = 0
|
||
Dim ValueArray()
|
||
'Jeden Wert des Vektorfeldes durchlaufen
|
||
Dim wertWD = oDocument.GetVariableValue(vktIndexName)
|
||
If wertWD Is Nothing = False Then
|
||
'Nochmals prüfen ob wirklich Array
|
||
If wertWD.GetType.ToString.Contains("System.Object") Then
|
||
'Duplikat Prüfung an, also nur anhängen wenn Wert <>
|
||
For Each WDValue As Object In wertWD
|
||
If WDValue Is Nothing = False Then
|
||
'Erst die ALten Werte schreiben
|
||
ReDim Preserve ValueArray(Anzahl)
|
||
'Den Wert im Array speichern
|
||
ValueArray(Anzahl) = Convert_VectorType(vType, WDValue)
|
||
Anzahl += 1
|
||
End If
|
||
Next
|
||
'Jetzt die Neuen Werte auf Duplikate überprüfen
|
||
For Each NewValue As Object In arr_Indexwerte
|
||
If NewValue Is Nothing = False Then
|
||
If ValueArray.Contains(NewValue) = False Then
|
||
'Das Array anpassen
|
||
ReDim Preserve ValueArray(Anzahl)
|
||
'Den Wert im Array speichern
|
||
ValueArray(Anzahl) = Convert_VectorType(vType, NewValue)
|
||
Anzahl += 1
|
||
Else
|
||
ClassLogger.Add(" >> Value '" & NewValue.ToString & "' already existing in vectorfield", False)
|
||
End If
|
||
End If
|
||
Next
|
||
|
||
End If
|
||
Else
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> vectorfield is empty....", False)
|
||
'Den/die Neuen Wert(e) anfügen
|
||
For Each NewValue As Object In arr_Indexwerte
|
||
If NewValue Is Nothing = False 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) = Convert_VectorType(vType, NewValue)
|
||
Anzahl += 1
|
||
Else
|
||
ClassLogger.Add(" >> Value '" & NewValue.ToString & "' already existing in Array", False)
|
||
End If
|
||
Else 'Dererste Wert, also hinzufügen
|
||
'Das Array anpassen
|
||
ReDim Preserve ValueArray(Anzahl)
|
||
'Den Wert im Array speichern
|
||
ValueArray(Anzahl) = Convert_VectorType(vType, NewValue)
|
||
Anzahl += 1
|
||
|
||
End If
|
||
|
||
|
||
End If
|
||
Next
|
||
End If
|
||
|
||
Return ValueArray
|
||
Catch ex As Exception
|
||
ClassLogger.Add("unexpected error in ClassWindream.Return_VektorArray: " & ex.Message, True)
|
||
End Try
|
||
|
||
|
||
End Function
|
||
Public Shared Function REMOVE_VEKTOR_LINK(ByVal FILEPATH As String, vktIndexName As String, deleteValue As String)
|
||
Try
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Removing Value '" & deleteValue & "' of Index '" & vktIndexName & "' " & FILEPATH, False)
|
||
Dim WMObject As WINDREAMLib.WMObject
|
||
Dim containsvalue As Boolean = False
|
||
Try
|
||
' ein windream-Objekt der Datei erzeugen
|
||
WMObject = oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, FILEPATH.Substring(2))
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> windreamObject created", False)
|
||
Catch ex As Exception
|
||
ClassLogger.Add("Unexpected Error in Initializing windream file: " & ex.Message, False)
|
||
Return False
|
||
End Try
|
||
|
||
Dim ValueArray()
|
||
'Jeden Wert des Vektorfeldes durchlaufen
|
||
Dim wertWD = WMObject.GetVariableValue(vktIndexName)
|
||
If wertWD Is Nothing = False Then
|
||
'Nochmals prüfen ob wirklich Array
|
||
If wertWD.GetType.ToString.Contains("System.Object") Then
|
||
' das entsprechende Attribut aus windream auslesen
|
||
Dim oAttribute = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, vktIndexName)
|
||
' den Variablentyp (String, Integer, ...) auslesen
|
||
Dim vType = oAttribute.getVariableValue("dwAttrType")
|
||
Dim Anzahl As Integer = 0
|
||
For Each WDValue As Object In wertWD
|
||
If WDValue Is Nothing = False Then
|
||
If WDValue = deleteValue Then
|
||
containsvalue = True
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> The Index contains the value to be deleted!", False)
|
||
End If
|
||
If WDValue <> deleteValue Then
|
||
'Erst die ALten Werte schreiben
|
||
ReDim Preserve ValueArray(Anzahl)
|
||
'Den Wert im Array speichern
|
||
ValueArray(Anzahl) = Convert_VectorType(vType, WDValue)
|
||
Anzahl += 1
|
||
End If
|
||
End If
|
||
Next
|
||
Else
|
||
ClassLogger.Add(" >> Index is not a vector", False)
|
||
Return False
|
||
End If
|
||
Else
|
||
ClassLogger.Add(" >> wertWD is nothing", False)
|
||
Return True
|
||
End If
|
||
|
||
If containsvalue = True Then 'And Not IsNothing(ValueArray)
|
||
Try
|
||
' die Datei sperren
|
||
WMObject.lock()
|
||
Catch ex As Exception
|
||
ClassLogger.Add("Unexpected Error in locking windream file: " & ex.Message, False)
|
||
Return False
|
||
End Try
|
||
|
||
'Indexiern des Vektorfeldes
|
||
WMObject.SetVariableValue(vktIndexName, ValueArray)
|
||
' die Indexinformationen des Dokuments speichern
|
||
WMObject.Save()
|
||
ClassLogger.Add(" >> The new vectorvalues were saved!", False)
|
||
' Unlock in einem unbehandelten Try-Block um Fehler abzufangen,
|
||
' wenn eine Datei nicht gesperrt ist
|
||
Try
|
||
' die Sperrung des Dokuments aufheben
|
||
WMObject.unlock()
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> die Sperrung des Dokuments aufheben", False)
|
||
Catch ex As Exception
|
||
' nichts tun (Datei war nicht gesperrt)
|
||
End Try
|
||
|
||
'urückgeben
|
||
Return True
|
||
Else
|
||
ClassLogger.Add(" >> containsvalue is not true!", False)
|
||
Return False
|
||
End If
|
||
|
||
Catch ex As Exception
|
||
ClassLogger.Add("unexpected error in ClassWindream.REMOVE_VEKTOR_LINK: " & ex.Message, True)
|
||
Return False
|
||
End Try
|
||
|
||
|
||
End Function
|
||
|
||
Private Shared Function Convert_VectorType(vType As Object, value As String)
|
||
Select Case vType
|
||
Case 36865
|
||
'Umwandeln in String
|
||
Return CStr(value)
|
||
Case 4097
|
||
'Umwandeln in String
|
||
Return CStr(value)
|
||
Case 4098
|
||
'Umwandeln in Integer
|
||
value = value.ToString.Replace(" ", "")
|
||
Return CInt(value)
|
||
Case 4099
|
||
Dim Str As String = value
|
||
Str = Str.ToString.Replace(" ", "")
|
||
'Umwandeln in Double
|
||
Return CDbl(Str.Replace(".", ","))
|
||
Case 4100
|
||
'Umwandeln in Boolean
|
||
Return CBool(value)
|
||
Case 4101
|
||
'Umwandeln in Date
|
||
Return CDate(value)
|
||
Case 4107
|
||
Return Convert.ToInt64(value)
|
||
Case 4103
|
||
'Umwandeln in Datum Uhrzeit
|
||
Return value
|
||
Case Else
|
||
'Umwandeln in String
|
||
Return CStr(value)
|
||
End Select
|
||
End Function
|
||
Private Shared 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
|
||
''' <summary>
|
||
''' Führt das eigendliche Indexieren aus
|
||
''' </summary>
|
||
''' <param name="filenameZiel">Dateiname der zu indexierenden Datei</param>
|
||
''' <param name="index">Name des zu indexierenden Indexfeldes</param>
|
||
''' <param name="werte">Der Wert/die Werte die dem Index zugewiesen werden sollen</param>
|
||
''' <returns>Liefert True wenn das Indexieren erfolgreich war, sonst False</returns>
|
||
''' <remarks></remarks>
|
||
Private Shared Function Indexiere(ByVal filenameZiel As String, ByVal index As String, ByVal werte As Object)
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> In Indexierungsvorgang für: " & filenameZiel, False)
|
||
Try
|
||
Dim WMObject As WINDREAMLib.WMObject = Nothing '= CreateObject("WINDREAMLib.WMObject") '= New WINDREAMLib.WMObject 'CreateObject("WINDREAMLib.WMObject")
|
||
'MsgBox("Indexiere: " & vbNewLine & filenameZiel)
|
||
'werte Is Nothing Or _
|
||
' überprüfen ob alle notwendigen Informationen angegeben wurden (sonst abbrechen)
|
||
If filenameZiel Is Nothing Or _
|
||
filenameZiel = "" Or _
|
||
index Is Nothing Or _
|
||
index = "" Or _
|
||
Not ExistIndexInObjekttyp(_WDObjekttyp, index) Then
|
||
If LogErrorsOnly = False Then ClassLogger.Add("=> Hinweis: Die Datei wurde auf Grund eines Problems in der Initialisierung nicht vollständig indexiert.", False)
|
||
Return False
|
||
End If
|
||
|
||
Dim fileExists As Boolean
|
||
|
||
' prüfen ob die zu indexierende Datei existiert
|
||
fileExists = My.Computer.FileSystem.FileExists(vWLaufwerk & ":" & filenameZiel) '_windream.GetWindreamDriveLetter
|
||
|
||
Dim an As Integer = 0
|
||
Do While My.Computer.FileSystem.FileExists(vWLaufwerk & ":" & filenameZiel) = False
|
||
If an > 500 Then
|
||
fileExists = False
|
||
Exit Do
|
||
Else
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" Achtung: Datei exisitiert noch nicht: " & My.Computer.Clock.LocalTime, True)
|
||
End If
|
||
an = an + 1
|
||
Loop
|
||
' wenn die Datei existiert
|
||
If fileExists Then
|
||
WMObject = oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, filenameZiel)
|
||
|
||
' eine Variable für den umgewandelten Indexwert anlegen (kein Typ, da noch unklar ist was reingeschrieben wird)
|
||
'Dim convertValue = Nothing
|
||
|
||
' den Typ des Zielindexes auslesen
|
||
Dim TypDesIndexes As Integer
|
||
|
||
Try
|
||
|
||
' ein windream-Objekt der Datei anlegen
|
||
WMObject = oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, filenameZiel)
|
||
If LogErrorsOnly = False Then
|
||
ClassLogger.Add(" - windream-Objekt der Datei erzeugt", False)
|
||
ClassLogger.Add(" - Ziel: W:\" & filenameZiel, False)
|
||
End If
|
||
|
||
'Me.singleInfoNode.Add("Ziel: " & ClassDateiimportWindream.GetWindreamDriveLetter & filenameZiel)
|
||
|
||
Try
|
||
' die Datei sperren
|
||
WMObject.lock()
|
||
|
||
'WMObject.LockFor(WINDREAMLib.WMObjectEditMode.WMObjectEditModeObject)
|
||
Catch ex As Exception
|
||
|
||
End Try
|
||
|
||
' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
|
||
If WMObject.aObjectType.aName = "Standard" Then
|
||
' ihr den entsprechenden Dokumenttyp zuweisen
|
||
WMObject.aObjectType = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp)
|
||
' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
|
||
End If
|
||
|
||
|
||
' wenn keine Werte vorhanden sind, soll wenigstens der Dokumenttyp eingetragen werden
|
||
If werte Is Nothing Then
|
||
|
||
Try
|
||
WMObject.Save()
|
||
WMObject.unlock()
|
||
Catch ex As Exception
|
||
|
||
End Try
|
||
|
||
Return Nothing
|
||
End If
|
||
|
||
' den Typ des Zielindexes auslesen
|
||
TypDesIndexes = GetTypeOfIndexAsIntByName(index)
|
||
|
||
' wenn es sich bei dem Index NICHT um ein Vektorfeld handelt
|
||
If TypDesIndexes < WMObjectVariableValueTypeVector Then
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Bei dem Zielindex handelt es sich um einen Einzelindex.", False)
|
||
Else
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" Bei dem Zielindex handelt es sich um ein Vektorfeld.", False)
|
||
' ein Backup der Indexwerte anlegen
|
||
Dim temp As Object = werte
|
||
' und die eigendliche Variable zurücksetzen
|
||
werte = Nothing
|
||
' dann soll nur der letzte Wert des Arrays übernommen werden, damit nicht versucht wird ein
|
||
' Array in einen Einzelindex zu speichern
|
||
werte = temp
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Array geleert und erneuert!", False)
|
||
End If
|
||
Catch ex As Exception
|
||
ClassLogger.Add("Hinweis: Beim Initialisieren der Datei auf dem windream-Laufwerk ist ein Fehler aufgetreten.", False)
|
||
Return False
|
||
End Try
|
||
|
||
|
||
'Try
|
||
' den Typ des Zielindexes
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des Indexes: " & TypDesIndexes.ToString, False)
|
||
Select Case (TypDesIndexes)
|
||
Case WMObjectVariableValueTypeUndefined ' zu klären !!!!
|
||
'convertValue = vbEmpty
|
||
Case WMObjectVariableValueTypeString
|
||
''Führende Nullen Entfernen
|
||
'If werte.ToString.StartsWith("0") Then
|
||
' Dim wert As String = CStr(CInt(werte.ToString))
|
||
' convertValue = wert
|
||
' ClassLogger.Add(" - Führende Nullen wurden entfernt", False)
|
||
'Else
|
||
' Dim wert As String = CStr(CInt(werte.ToString))
|
||
' convertValue = wert
|
||
'End If
|
||
'If convertValue.ToString.Contains("~1") Then
|
||
' convertValue = convertValue.ToString.Replace("~1", "")
|
||
'End If
|
||
'If convertValue.ToString.Contains("~2") Then
|
||
' convertValue = convertValue.ToString.Replace("~2", "")
|
||
'End If
|
||
'If convertValue.ToString.Contains("~3") Then
|
||
' convertValue = convertValue.ToString.Replace("~3", "")
|
||
'End If
|
||
'If convertValue.ToString.Contains("~4") Then
|
||
' convertValue = convertValue.ToString.Replace("~4", "")
|
||
'End If
|
||
|
||
Case WMObjectVariableValueTypeInteger
|
||
' convertValue = CInt(werte)
|
||
Case WMObjectVariableValueTypeFloat
|
||
werte = werte.ToString.Replace(".", ",")
|
||
'convertValue = CDbl(werte)
|
||
|
||
Case WMObjectVariableValueTypeBoolean
|
||
Try
|
||
' convertValue = CBool(werte)
|
||
Catch ex As Exception
|
||
' Nothing zuweisen damit SetVariableValue nicht ausgeführt wird
|
||
'convertValue = Nothing
|
||
End Try
|
||
Case WMObjectVariableValueTypeDate
|
||
If (IsDate(werte)) Then
|
||
' convertValue = CDate(werte)
|
||
Else
|
||
' convertValue = vbEmpty
|
||
End If
|
||
|
||
Case WMObjectVariableValueTypeFixedPoint
|
||
werte = werte.ToString.Replace(".", ",")
|
||
' convertValue = CDbl(werte)
|
||
|
||
Case WMObjectVariableValueTypeTimeStamp
|
||
Dim timestamp As Integer = GetTimestamp(werte)
|
||
If timestamp > 0 Then
|
||
' convertValue = timestamp
|
||
Else
|
||
' convertValue = vbEmpty
|
||
End If
|
||
|
||
Case WMObjectVariableValueTypeCurrency
|
||
Dim aValue As System.Runtime.InteropServices.CurrencyWrapper = New System.Runtime.InteropServices.CurrencyWrapper(werte)
|
||
' convertValue = aValue
|
||
|
||
Case WMObjectVariableValueTypeTime
|
||
If (IsDate(werte)) Then
|
||
' convertValue = CDate(werte) ' ggf. aber nur die Zeit
|
||
Else
|
||
' convertValue = vbEmpty
|
||
End If
|
||
|
||
Case WMObjectVariableValueTypeVariant
|
||
' convertValue = werte
|
||
|
||
Case WMObjectVariableValueTypeMask ' zu klären !!!!
|
||
' convertValue = vbEmpty
|
||
|
||
Case WMObjectVariableValueFlagMask ' zu klären !!!!
|
||
' convertValue = vbEmpty
|
||
|
||
|
||
Case WMObjectVariableValueTypeFulltext
|
||
'convertValue = CStr(werte)
|
||
|
||
Case WMObjectVariableValueTypeDefaultValue ' zu klären !!!!
|
||
' convertValue = vbEmpty
|
||
|
||
Case Else
|
||
' wenn es sich um einen TypVektorIndex handelt
|
||
If TypDesIndexes >= 4096 And TypDesIndexes < 8192 Then
|
||
If LogErrorsOnly = False Then ClassLogger.Add("- Es handelt sich um einen Vektorindex", False)
|
||
Dim temp_arr As New ArrayList
|
||
|
||
Select Case (TypDesIndexes - WMObjectVariableValueTypeVector)
|
||
'VektorIndex vom Typ String 64'
|
||
Case 1
|
||
If LogErrorsOnly = False Then ClassLogger.Add("- VektorIndex vom Typ String 1", False)
|
||
For Each wert As Object In werte
|
||
'Führende Nullen Entfernen
|
||
If werte.ToString.StartsWith("0") Then
|
||
Dim werteString As String = CStr(CInt(wert.ToString))
|
||
wert = werteString
|
||
temp_arr.Add(CStr(wert))
|
||
ClassLogger.Add("- Führende Nullen wurden entfernt", False)
|
||
Else
|
||
temp_arr.Add(CStr(wert))
|
||
End If
|
||
|
||
If LogErrorsOnly = False Then ClassLogger.Add("- Wert " & CStr(wert) & " konvertiert", False)
|
||
Next
|
||
Case WMObjectVariableValueTypeUndefined
|
||
' convertValue = ""
|
||
|
||
Case WMObjectVariableValueTypeString
|
||
If LogErrorsOnly = False Then ClassLogger.Add("- VektorIndex vom Typ String 2", False)
|
||
For Each wert As Object In werte
|
||
'Führende Nullen Entfernen
|
||
If werte.ToString.StartsWith("0") Then
|
||
wert = CInt(wert)
|
||
temp_arr.Add(CStr(wert))
|
||
ClassLogger.Add("- Führende Nullen wurden entfernt", False)
|
||
Else
|
||
temp_arr.Add(CStr(wert))
|
||
End If
|
||
If LogErrorsOnly = False Then ClassLogger.Add("- Wert " & CStr(wert) & " konvertiert", False)
|
||
Next
|
||
|
||
Case WMObjectVariableValueTypeInteger
|
||
If LogErrorsOnly = False Then ClassLogger.Add("- VektorIndex vom Typ Integer", False)
|
||
For Each wert As Object In werte
|
||
temp_arr.Add(CInt(wert))
|
||
Next
|
||
|
||
Case WMObjectVariableValueTypeFloat
|
||
For Each wert As Object In werte
|
||
wert = wert.ToString.Replace(".", ",")
|
||
temp_arr.Add(CDbl(wert))
|
||
Next
|
||
|
||
Case WMObjectVariableValueTypeBoolean
|
||
For Each wert As Object In werte
|
||
Try
|
||
temp_arr.Add(CBool(wert))
|
||
Catch ex As Exception
|
||
' Nothing zuweisen damit SetVariableValue nicht ausgeführt wird
|
||
temp_arr = Nothing
|
||
End Try
|
||
Next
|
||
|
||
Case WMObjectVariableValueTypeDate
|
||
For Each wert As Object In werte
|
||
'wert =
|
||
temp_arr.Add(CDate(wert))
|
||
Next
|
||
|
||
Case WMObjectVariableValueTypeFixedPoint
|
||
For Each wert As Object In werte
|
||
temp_arr.Add(CDbl(wert))
|
||
Next
|
||
|
||
Case WMObjectVariableValueTypeTimeStamp
|
||
For Each wert As Object In werte
|
||
temp_arr.Add(CInt(wert))
|
||
Next
|
||
|
||
Case WMObjectVariableValueTypeCurrency
|
||
For Each wert As Object In werte
|
||
Dim aValue As System.Runtime.InteropServices.CurrencyWrapper = New System.Runtime.InteropServices.CurrencyWrapper(werte)
|
||
temp_arr.Add(aValue)
|
||
Next
|
||
|
||
Case WMObjectVariableValueTypeTime
|
||
For Each wert As Object In werte
|
||
temp_arr.Add(CDate(wert))
|
||
Next
|
||
|
||
Case WMObjectVariableValueTypeVariant
|
||
' dann bleiben alle Werte wie sie sind
|
||
|
||
End Select
|
||
|
||
If temp_arr.Count > 0 Then
|
||
If LogErrorsOnly = False Then ClassLogger.Add("- Einträge in temp_arr also Speichern des Arrays in convertValue", False)
|
||
' convertValue = Nothing
|
||
' convertValue = temp_arr.ToArray
|
||
Else
|
||
' convertValue = vbEmpty
|
||
End If
|
||
If LogErrorsOnly = False Then ClassLogger.Add("- Werte erfolgreich konvertiert", False)
|
||
Else
|
||
' convertValue = vbEmpty
|
||
End If
|
||
|
||
End Select
|
||
|
||
'Catch ex As Exception
|
||
' ' einen Hinweis über einen aufgetretenen Fehler an das Array für den TreeView-Log anhängen
|
||
' ClassLogger.Add("Fehler bei Auswerten/Konvertieren des Typs!", ex.Message)
|
||
' ' die Indexierungsinformationen für den TreeView-Log zurückgeben
|
||
' Return False
|
||
'End Try
|
||
|
||
|
||
' Try
|
||
' ***** Anmerkung: das Nachindexieren mit vbEmpty ist möglich (siehe oben) jedoch nicht *****
|
||
' ***** das Indexieren mit einem Nothing-Wert !!! *****
|
||
' wenn das Konvertieren soweit gut gelaufen ist (also kein Nothing-Wert zugewiesen wurde)
|
||
' If (convertValue Is Nothing) = False Then
|
||
' den konvertierten Indexwert dem entsprechenden Index zuweisen
|
||
WMObject.SetVariableValue(index, werte)
|
||
If LogErrorsOnly = False Then
|
||
ClassLogger.Add(" - den konvertierten Indexwert dem entsprechenden Index zuweisen", False)
|
||
ClassLogger.Add(" - Indexname: " & index.ToString, False)
|
||
ClassLogger.Add(" - Indexwert: " & werte.ToString, False)
|
||
End If
|
||
'End If
|
||
|
||
' die Indexinformationen des Dokuments speichern
|
||
WMObject.Save()
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> die Indexinformationen des Dokuments speichern", False)
|
||
' Unlock in einem unbehandelten Try-Block um Fehler abzufangen,
|
||
' wenn eine Datei nicht gesperrt ist
|
||
Try
|
||
' die Sperrung des Dokuments aufheben
|
||
WMObject.unlock()
|
||
If LogErrorsOnly = False Then ClassLogger.Add(" >> die Sperrung des Dokuments aufheben", False)
|
||
Catch ex As Exception
|
||
' nichts tun (Datei war nicht gesperrt)
|
||
End Try
|
||
|
||
'Catch ex As Exception
|
||
' ' auch wenn ein Fehler aufgetreten ist muss das Dokument gespeichert werden, um den Dokumenttypen zu speichern
|
||
' WMObject.Save()
|
||
|
||
' ' Unlock in einem unbehandelten Try-Block um Fehler abzufangen,
|
||
' ' wenn eine Datei nicht gelocked ist
|
||
' Try
|
||
' WMObject.unlock()
|
||
' Catch ex2 As Exception
|
||
' ' nichts tun (Datei war nicht gesperrt)
|
||
' End Try
|
||
|
||
|
||
' ' Nachricht für den TreeView-Log
|
||
' indexBeschreibung &= "konnte nicht indexiert werden"
|
||
' ClassLogger.Add(" DATEI konnte nicht indexiert werden", True)
|
||
'End Try
|
||
|
||
|
||
' die Indexierungsinformationen für den TreeView-Log zurückgeben
|
||
Return True
|
||
Else
|
||
' die Indexierungsinformationen für den TreeView-Log zurückgeben
|
||
ClassLogger.Add(" Hinweis: Die Datei hat zum Zeitpunkt der Indexierung noch nicht auf dem windream-Laufwerk existiert.", False)
|
||
End If
|
||
|
||
Catch ex As Exception
|
||
ClassLogger.Add(" Hinweis: Unbekannter Fehler beim Indexieren der Datei.")
|
||
ClassLogger.Add(ex.Message)
|
||
Return False
|
||
End Try
|
||
|
||
Return True
|
||
|
||
End Function
|
||
|
||
''' <summary>
|
||
''' Diese Funktion überprüft ob eine Variable ein Array ist, oder nicht.
|
||
''' </summary>
|
||
''' <param name="arrayOrNot">Variable die überprüft werden soll</param>
|
||
''' <returns>Liefert True wenn es sich um ein Array handelt, sonst False</returns>
|
||
''' <remarks></remarks>
|
||
Private Shared Function IsArray(ByVal arrayOrNot As Object)
|
||
|
||
Dim arrayType As String = UCase(arrayOrNot.GetType.ToString)
|
||
|
||
' überprüft an welcher Stelle sich ein '['-Zeichen befindet
|
||
Dim position = InStr(arrayType, "[")
|
||
|
||
' existiert ein '['-Zeichen, so handelt es sich um ein Array (GetType wäre System.Object[])
|
||
If Not position = 0 Then
|
||
Return True
|
||
Else
|
||
Return False
|
||
End If
|
||
End Function
|
||
|
||
|
||
''' <summary>
|
||
''' Diese Funktion überprüft ob eine Variable eine ArrayList ist, oder nicht.
|
||
''' </summary>
|
||
''' <param name="arrayOrNot">Variable die überprüft werden soll</param>
|
||
''' <returns>Liefert True wenn es sich um eine ArrayList handelt, sonst False</returns>
|
||
''' <remarks></remarks>
|
||
Private Shared Function IsArrayList(ByVal arrayOrNot As Object)
|
||
|
||
Dim arrayType As String = UCase(arrayOrNot.GetType.ToString)
|
||
|
||
' überprüft an welcher Stelle sich ein '['-Zeichen befindet
|
||
Dim position = InStr(arrayType, "[")
|
||
|
||
' existiert ein '['-Zeichen, so handelt es sich um ein Array (GetType wäre System.Object[])
|
||
If arrayOrNot.GetType.ToString = "System.Collections.ArrayList" Then
|
||
Return True
|
||
Else
|
||
Return False
|
||
End If
|
||
End Function
|
||
''' <summary>
|
||
''' Diese Funktion errechnet aus einem Datum den Unix-Timestamp
|
||
''' </summary>
|
||
''' <param name="FromDateTime">Datum, für das der Timestamp errechnet werden soll</param>
|
||
''' <returns>Liefert den Timestamp als Integer</returns>
|
||
''' <remarks></remarks>
|
||
Private Shared Function GetTimestamp(ByVal FromDateTime As DateTime) As Integer
|
||
|
||
If IsDate(FromDateTime) Then
|
||
Dim Startdate As DateTime = #1/1/1970#
|
||
Dim Spanne As TimeSpan
|
||
|
||
' vom Datum das Datum des "Beginns der Zeitrechnung" abziehen
|
||
Spanne = FromDateTime.Subtract(Startdate)
|
||
|
||
' die Zeitspanne in einen Integer umwandeln
|
||
Return CType(Math.Abs(Spanne.TotalSeconds()), Integer)
|
||
Else
|
||
Return 0
|
||
End If
|
||
End Function
|
||
''' <summary>
|
||
''' Liefert den Typen eines Indexes als Integer.
|
||
''' </summary>
|
||
''' <param name="indexname">Name des zu überprüfenden Indexfeldes</param>
|
||
''' <returns>Liefert eine Zahl, die einen Typen beschreibt</returns>
|
||
''' <remarks></remarks>
|
||
Public Shared Function GetTypeOfIndexAsIntByName(ByVal indexname As String) As Integer
|
||
Try
|
||
Dim oAttribute = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname)
|
||
Dim vType = oAttribute.getVariableValue("dwAttrType")
|
||
Return vType
|
||
Catch ex As Exception
|
||
Return Nothing
|
||
End Try
|
||
End Function
|
||
Private Shared Function CheckIndexValue(ByVal input)
|
||
Try
|
||
'Ersetzt die Versionierungen Tilde(~) und Klammern ((1))
|
||
For i As Integer = 1 To 20
|
||
If input.ToString.EndsWith("~" & i.ToString) Then
|
||
input = input.ToString.Replace("~" & i.ToString, "")
|
||
ElseIf input.ToString.EndsWith("(" & i.ToString & ")") Then
|
||
input = input.ToString.Replace("(" & i.ToString & ")", "")
|
||
End If
|
||
|
||
Next
|
||
|
||
Return input
|
||
Catch ex As Exception
|
||
ClassLogger.Add("Error in CheckIndexValue: " & ex.Message)
|
||
Return Nothing
|
||
End Try
|
||
|
||
End Function
|
||
End Class
|