1594 lines
79 KiB
VB.net
1594 lines
79 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 Shared oBrowser As New WMOBRWSLib.ServerBrowser
|
|
Public Shared oDokumentTypen As WINDREAMLib.WMObjects
|
|
Private oController As New WMOSearchController
|
|
Public Shared _WDObjekttyp As String
|
|
Private Shared aktWMObject As WINDREAMLib.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 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
|
|
|
|
Me.oController.CheckSearchProfile(wdfLocation.ToLower)
|
|
Dim suchTyp = Me.oController.SearchProfileTargetProgID
|
|
Dim ExSettings As Object
|
|
Dim oSearch As Object
|
|
ExSettings = Me.oController.SearchProfileExSettings
|
|
If ExSettings = 0 Then ExSettings = 7
|
|
|
|
Dim srchQuick As WMOSRCHLib.WMQuickSearch = CreateObject("WMOSrch.WMQuickSearch")
|
|
Dim srchIndex As WMOSRCHLib.WMIndexSearch = CreateObject("WMOSrch.WMIndexSearch")
|
|
Dim srchObjectType As WMOSRCHLib.WMObjectTypeSearch = CreateObject("WMOSrch.WMObjectTypeSearch")
|
|
|
|
'' 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", Me.GetCurrentServer)
|
|
|
|
Me.oConnect.LoginSession(srchQuick.WMSession)
|
|
|
|
srchQuick.ClearSearch()
|
|
srchQuick.SearchProfilePath = ProfilePath
|
|
srchQuick.LoadSearchProfile(ProfileName)
|
|
|
|
oSearch = srchQuick.GetSearch()
|
|
|
|
Case "WMOSRCH.WMINDEXSEARCH"
|
|
srchIndex.WMSession = CreateObject("Windream.WMSession", Me.GetCurrentServer)
|
|
|
|
Me.oConnect.LoginSession(srchIndex.WMSession)
|
|
|
|
srchIndex.ClearSearch()
|
|
srchIndex.SearchProfilePath = ProfilePath
|
|
srchIndex.LoadSearchProfile(ProfileName)
|
|
|
|
oSearch = srchIndex.GetSearch()
|
|
|
|
Case "WMOSRCH.WMOBJECTTYPESEARCH"
|
|
srchObjectType.WMSession = CreateObject("Windream.WMSession", Me.GetCurrentServer)
|
|
|
|
Me.oConnect.LoginSession(srchObjectType.WMSession)
|
|
|
|
srchObjectType.ClearSearch()
|
|
srchObjectType.SearchProfilePath = ProfilePath
|
|
srchObjectType.LoadSearchProfile(ProfileName)
|
|
|
|
oSearch = srchObjectType.GetSearch()
|
|
|
|
Case Else
|
|
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 Not IsLoggedIn() 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 & "Fehlernachricht:" & vbNewLine & Err.Description, MsgBoxStyle.Exclamation, "Unzureichende windream-Version")
|
|
Else
|
|
MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Login an windream")
|
|
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("Fehlernachricht:" & 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(Me.oDokumentTypen.Count) As String
|
|
|
|
For i As Integer = 0 To Me.oDokumentTypen.Count
|
|
objektTypenStr(i) = Me.oDokumentTypen.Item(i).aName
|
|
Next
|
|
|
|
Return objektTypenStr
|
|
|
|
Catch ex As Exception
|
|
MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Auslesen der Objekttypen als 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, "Fehler beim Auslesen der windream-Indexe")
|
|
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 & "Fehlernachricht:" & 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("Beim Prüfen ob ein Index für einen Objekttypen existiert, ist ein Fehler aufgetreten." & vbNewLine & vbNewLine & "Fehlernachricht:" & 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("Es konnte nicht erfolgreich geprüft werden, ob das Programm am windream-Server angemeldted ist." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler bei Loggedin-Prüfung")
|
|
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
|
|
Return oBrowser.GetCurrentServer 'ClassWindream.oBrowser.GetCurrentServer
|
|
Catch ex As Exception
|
|
MsgBox("Der aktuell gewählte windream-Server konnte nicht ausgelesen werden." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Auslesen des windream-Servers")
|
|
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 & "Fehlernachricht:" & 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("Fehlernachricht: " & 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 Stream_File(ByVal filenameQuelle As String, ByVal zielpfad As String)
|
|
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 = Zielverzeichnis.Substring(2) & "\" & Quelldatei_Name
|
|
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Zielverzeichnis erzeugt", False)
|
|
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 " & zielpfad.Substring(2) & "\" & Quelldatei_Name & ".", 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
|
|
'==================================================================
|
|
Session = CreateObject("Windream.WMSession", dmsServer)
|
|
'==================================================================
|
|
' login session
|
|
'==================================================================
|
|
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
|
|
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()
|
|
'### Automatische Versionierung mit ~ (Tilde) ###
|
|
Dim version As Integer = 2
|
|
Dim extension As String = Quelldatei_Name.Substring(Quelldatei_Name.LastIndexOf("."))
|
|
Dim Stammname As String = zielpfad.Substring(2) & "\" & Quelldatei_Name.Substring(0, Quelldatei_Name.LastIndexOf("."))
|
|
Dim neuername As String = zielpfad.Substring(2) & "\" & Quelldatei_Name.Substring(0, Quelldatei_Name.LastIndexOf("."))
|
|
|
|
Do While File.Exists("W:\" & neuername & extension) = True
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Datei " & endgültigerDateiname & " ist vorhanden!", False)
|
|
neuername = Stammname & "~" & version
|
|
endgültigerDateiname = neuername & extension
|
|
version = version + 1
|
|
Loop
|
|
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 LogErrorsOnly = False Then ClassLogger.Add(" - Length der Zieldatei: " & length1.ToString, False)
|
|
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
|
|
ClassLogger.Add(" - Datei '" & CURRENT_FILEIN_WD & "' wurde erfolgreich importiert!", False)
|
|
aktWMObject = WMObject
|
|
Return True
|
|
Else
|
|
System.IO.File.Delete(vWLaufwerk & ":\" & endgültigerDateiname)
|
|
ClassLogger.Add(" FEHLER bei Datei-Übertragen - FileLength ist 0, Übertragene Datei wurde gelöscht- Überprüfen Sie Log-File")
|
|
Return False
|
|
End If
|
|
Else
|
|
Return False
|
|
End If
|
|
Else
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - targetPath exisitiert NICHT", False)
|
|
Return False
|
|
End If
|
|
|
|
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 DateiIndexieren(ByVal WD_File As String, ByVal _Indexname As String, ByVal _Value As String)
|
|
Try
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - DateiIndexieren wurde aufgerufen", False)
|
|
WD_File = WD_File.Substring(2)
|
|
Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject
|
|
'MsgBox("DateiIndexieren:" & vbNewLine & ClassDateiimportWindream.GetWindreamDriveLetter & filenameZiel & vbNewLine & Me.selectedProfile.DokumenttypString)
|
|
' den Dokumenttyp schreiben
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" ## Indexieren wird gestartet ##", False)
|
|
' 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
|
|
|
|
' ihr den entsprechenden Dokumenttyp zuweisen
|
|
WMObject.aObjectType = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp)
|
|
' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Objekttyp wird gesetzt", False)
|
|
Else
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Objekttyp war bereits gesetzt", 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(" - Datei wurde gespeichert / Unlock wurde durchgeführt", False)
|
|
' wenn bis hierher alles geklappt hat wurde ein Dokumenttyp übergeben
|
|
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Objekttyp: " & _WDObjekttyp, False)
|
|
|
|
|
|
' wenn keine Werte vorhanden sind, soll wenigstens der Dokumenttyp eingetragen werden
|
|
|
|
Dim indexe As String = ""
|
|
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Indexname: '" & _Indexname & "'", False)
|
|
Dim werte = New ArrayList
|
|
If (GetTypeOfIndexAsIntByName(_Indexname) = WMObjectVariableValueTypeVector) Or GetTypeOfIndexAsIntByName(_Indexname) = 4097 Then
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Es handelt sich um ein Vektor-Feld", False)
|
|
|
|
|
|
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Wert vor Überprüfung: " & _Value, False)
|
|
_Value = CheckIndexValue(_Value)
|
|
'Ausstieg da Fehler in der Überprüfung
|
|
If _Value Is Nothing Then
|
|
Return False
|
|
End If
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Value für Indexierung: " & _Value, False)
|
|
werte.Add(_Value)
|
|
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Werte zu Array hinzugefügt!", False)
|
|
Else
|
|
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Value vor Überprüfung: " & _Value, False)
|
|
_Value = CheckIndexValue(_Value)
|
|
'Ausstieg da Fehler in der Überprüfung
|
|
If _Value Is Nothing Then
|
|
Return False
|
|
End If
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" - Value für Indexierung: " & _Value, False)
|
|
werte.Add(_Value)
|
|
|
|
End If
|
|
|
|
'indexe &= indexname & " = " & werte & vbNewLine
|
|
'Der Indexierungsvorgang
|
|
' Dim indexErgebnis As ArrayList = Indexiere(filenameZiel, _Indexname, werte)
|
|
'Me.singleInfoNode.Insert(0, Me.singleInfoNode(1))
|
|
'Me.singleInfoNode.Insert(0, Me.singleInfoNode(0))
|
|
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("Hinweis: Die Datei " & WD_File & " konnte nicht indexiert werden.")
|
|
ClassLogger.Add("Fehler: " & ex.Message)
|
|
' Me.TreeNodeInfos.Add(temp)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Private Shared Function RunIndexing(ByVal oDocument As WMObject, ByVal Indizes() As String, ByVal aValues() As Object)
|
|
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(" >> Indexwert ist leer/Nothing - Keine Nachindexierung", False)
|
|
End If
|
|
' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
|
|
If oDocument.aObjectType.aName <> _WDObjekttyp 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(" >> Objekttyp '" & oDocument.aObjectType.aName & "' wurde in '" & _WDObjekttyp & "' geändert.", False)
|
|
Else
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Objekttyp war bereits gesetzt", False)
|
|
End If
|
|
|
|
Try
|
|
oDocument.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
|
|
|
|
'Jetzt jeden Indexwert durchlaufen
|
|
For Each aName As String In Indizes
|
|
indexname = aName
|
|
If LogErrorsOnly = False Then
|
|
ClassLogger.Add(" ", False)
|
|
ClassLogger.Add(" >> Indexierung von 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(" >> Typ des windream-Indexes: WMObjectVariableValueTypeString", False)
|
|
convertValue = CStr(value)
|
|
Case WMObjectVariableValueTypeInteger
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: WMObjectVariableValueTypeInteger", False)
|
|
value = value.ToString.Replace(" ", "")
|
|
If IsNumeric(value) = False Then
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Achtung: Value '" & value & "' kann nicht in Zahl konvertiert werden!", False)
|
|
End If
|
|
value = value.ToString.Replace(" ", "")
|
|
convertValue = CInt(value)
|
|
_int = True
|
|
Case WMObjectVariableValueTypeFloat
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: WMObjectVariableValueTypeFloat", False)
|
|
value = value.ToString.Replace(" ", "")
|
|
convertValue = CDbl(value)
|
|
Case WMObjectVariableValueTypeFixedPoint
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: WMObjectVariableValueTypeFixedPoint", False)
|
|
value = value.ToString.Replace(" ", "")
|
|
convertValue = CDbl(value)
|
|
_dbl = True
|
|
Case WMObjectVariableValueTypeBoolean
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: WMObjectVariableValueTypeBoolean", False)
|
|
convertValue = CBool(value)
|
|
_bool = True
|
|
Case WMObjectVariableValueTypeDate
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: WMObjectVariableValueTypeDate", False)
|
|
_date = True
|
|
'Dim _date As Date = value
|
|
convertValue = value
|
|
Case WMObjectVariableValueTypeTimeStamp
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: WMObjectVariableValueTypeTimeStamp", False)
|
|
convertValue = CDbl(value)
|
|
Case WMObjectVariableValueTypeCurrency
|
|
ClassLogger.Add(" - Typ des windream-Indexes: 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(" >> Typ des windream-Indexes: WMObjectVariableValueTypeTime", False)
|
|
'If ((value)) Then
|
|
' convertValue = CDate(value)
|
|
'Else
|
|
' convertValue = ""
|
|
'End If
|
|
'Dim _date As Date = value
|
|
convertValue = convertValue '*_date.ToShortTimeString
|
|
Case WMObjectVariableValueTypeFloat
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: WMObjectVariableValueTypeFloat", False)
|
|
convertValue = CStr(value)
|
|
Case WMObjectVariableValueTypeVariant
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: WMObjectVariableValueTypeVariant", False)
|
|
convertValue = CStr(value)
|
|
Case WMObjectVariableValueTypeFulltext
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: WMObjectVariableValueTypeFulltext", False)
|
|
convertValue = CStr(value)
|
|
Case 4097
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: 4097 Vektor alphanumerisch", False)
|
|
'Vektor alphanumerisch
|
|
vektor = True
|
|
Case 4098
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: 4098 Vektor Numerisch", False)
|
|
'Vektor Numerisch
|
|
vektor = True
|
|
Case 4099
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: 4099 Vektor Kommazahl", False)
|
|
'Vektor Kommazahl
|
|
vektor = True
|
|
Case 4101
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: 4101 Vektor Date", False)
|
|
'Vektor Kommazahl
|
|
vektor = True
|
|
Case 4103
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: 4103 Vektor DateTime", False)
|
|
'Vektor DateTime
|
|
vektor = True
|
|
Case 4107
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: 4107 Integer 64bit", False)
|
|
vektor = True
|
|
Case 36865
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Typ des windream-Indexes: 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(" >> Konvertierter Wert: '" & 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(" >> Versuch dem Dok einen Index zuzuweisen: 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 & "' wurde geschrieben", False)
|
|
ClassLogger.Add("", False)
|
|
End If
|
|
Else
|
|
ClassLogger.Add(" >> Kein Indexwert vorhanden", 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
|
|
|
|
|
|
|
|
|
|
|
|
End If
|
|
Else
|
|
If LogErrorsOnly = False Then ClassLogger.Add(" >> Array der Indexwerte ist leer/Nothing - Keine Nachindexierung", False)
|
|
End If
|
|
i += 1
|
|
|
|
Next
|
|
oDocument.unlock()
|
|
If LogErrorsOnly = False Then
|
|
ClassLogger.Add(">> ...und Unlock durchgeführt)", False)
|
|
ClassLogger.Add("", False)
|
|
End If
|
|
Return True
|
|
Else
|
|
ClassLogger.Add(" >> Dokument ist gesperrt, Indexierung erst im nächsten Durchlauf!", 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 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>
|
|
Private 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
|