1803 lines
85 KiB
VB.net
1803 lines
85 KiB
VB.net
|
||
Imports WINDREAMLib
|
||
Imports WINDREAMLib.WMCOMEvent
|
||
Imports WINDREAMLib.WMEntity
|
||
Imports WINDREAMLib.WMObjectEditMode
|
||
Imports WINDREAMLib.WMSearchOperator
|
||
Imports WINDREAMLib.WMSearchRelation
|
||
Imports WMOBRWSLib
|
||
Imports System.IO
|
||
|
||
Public Class clsWindream
|
||
|
||
#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
|
||
Public Shared _WDObjekttyp As String
|
||
Public Shared aktWMObject As WINDREAMLib.WMObject
|
||
Public Shared WD_SERVER
|
||
Public Shared CURRENT_WMObject As WMObject
|
||
Public Shared WMFILE_existed As Boolean = False
|
||
#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 clsWindream.Init() Then
|
||
' Nachricht ausgeben
|
||
clsLogger.Add("windream could not be init'ed", True)
|
||
' das Programm "abschießen"
|
||
'Process.GetCurrentProcess.Kill()
|
||
End If
|
||
End Sub
|
||
''' <summary>
|
||
''' Initialisiert die statische Klasse (Login, Session starten, usw.)
|
||
''' </summary>
|
||
''' <returns>Liefert True wenn das Anmelden erfolgreich war, sonst False</returns>
|
||
''' <remarks></remarks>
|
||
Public Shared Function Init() As Boolean
|
||
Try
|
||
Try
|
||
' Session-Objekt instanziieren und mit dem im Client ausgewählten Server belegen
|
||
oSession = CreateObject("Windream.WMSession", GetCurrentServer)
|
||
clsLogger.AddDetailLog("windream-Server: '" & GetCurrentServer() & "'")
|
||
' Connection-Objekt instanziieren
|
||
oConnect = CreateObject("Windream.WMConnect")
|
||
|
||
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
|
||
clsLogger.Add("Could not create connection with windream server", True)
|
||
|
||
Return False
|
||
End If
|
||
|
||
'If My.Settings.vDetailLog Then
|
||
' ClassLogger.Add("windream-Version: '" & oSession.GetSystemInfo("WindreamVersion") & "'", False)
|
||
'End If
|
||
|
||
' AUSGABE VON SYSTEMINFORMATIONEN
|
||
' Gibt die Versionsart (Lizenztyp) also Small-Business-Edition (SBE), Small-Business-Extension (SBX)
|
||
' oder Business-Edition (BE) aus
|
||
'MsgBox("WindreamVersion: " & oSession.GetSystemInfo("WindreamVersion") & vbNewLine & "LicenceKey: " & oSession.GetSystemInfo("LicenceKey") & vbNewLine & _
|
||
' vbNewLine & "LicenceName: " & oSession.GetSystemInfo("LicenceName"))
|
||
|
||
'Dim WMCtrl As AISCONTROLDATACOMLib.AISControlData
|
||
'WMCtrl = New AISCONTROLDATACOMLib.AISControlData
|
||
|
||
'' liefert die Versionsnummer des Clients
|
||
|
||
'MsgBox(WMCtrl.WMWorkstationBuildNo)
|
||
'MsgBox(WMCtrl.W
|
||
'' liefert den Servernamen des angemeldeten windreams
|
||
'MsgBox(WMCtrl.WMServerName)
|
||
|
||
Try
|
||
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
|
||
clsLogger.Add("Unexpected Error in windream init:" & ex.Message, True)
|
||
Return False
|
||
End Try
|
||
|
||
End Function
|
||
|
||
#End Region
|
||
|
||
#Region "+++++ Funktionen die für den Objekttyp relevate Informationen zurückliefern +++++"
|
||
Public Function GetTypeOfIndex(ByVal indexname As String) As Integer
|
||
Try
|
||
Dim oAttribute = clsWindream.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
|
||
clsLogger.Add("Error reading windream-indices: " & ex.Message, True)
|
||
Return Nothing
|
||
End Try
|
||
End Function
|
||
|
||
#End Region
|
||
|
||
|
||
|
||
#Region "+++++ Allgemeine Funktionen die Informationen zurückliefern +++++"
|
||
|
||
''' <summary>
|
||
''' Liefert True wenn die windream-Session angemeldet ist und False für den Fall, dass die Session nicht eingeloggt ist.
|
||
''' </summary>
|
||
''' <returns>Anmeldestatus als Boolean</returns>
|
||
''' <remarks></remarks>
|
||
Public Shared Function IsLoggedIn() As Boolean
|
||
Try
|
||
Return oSession.aLoggedin
|
||
Catch ex As Exception
|
||
clsLogger.Add("Error while checking session - Errormessage:" & vbNewLine & ex.Message, True)
|
||
End Try
|
||
|
||
Return False
|
||
End Function
|
||
|
||
''' <summary>
|
||
''' Liefert den Servernamen an dem windream aktuell angemeldet ist.
|
||
''' </summary>
|
||
''' <returns>Servername als String</returns>
|
||
''' <remarks></remarks>
|
||
Public Shared Function GetCurrentServer() As String
|
||
Try
|
||
WD_SERVER = oBrowser.GetCurrentServer
|
||
Return oBrowser.GetCurrentServer 'ClassWindream.oBrowser.GetCurrentServer
|
||
Catch ex As Exception
|
||
clsLogger.Add("Error while getting windream-Server - Errormessage: " & ex.Message, True)
|
||
End Try
|
||
|
||
Return ""
|
||
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
|
||
clsLogger.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
|
||
clsLogger.Add(msg, True)
|
||
Return Nothing
|
||
End If
|
||
|
||
aUserId.aDomain = Domain
|
||
aUserId.aServerName = ServerName
|
||
aUserId.aUserName = UserName
|
||
aUserId.aPassword = Password
|
||
|
||
aSession = aConnect.Login(aUserId)
|
||
|
||
oSession = Nothing
|
||
If Err.Number <> 0 Then
|
||
Dim msg = "Error in Connect.Login(aUserId) - Err.Number: " & Err.Number & vbNewLine & Err.Description
|
||
clsLogger.Add(msg, True)
|
||
Return Nothing
|
||
Else
|
||
SessionAsUser = aSession
|
||
If aSession.aLoggedin = True Then
|
||
oSession = SessionAsUser
|
||
Return SessionAsUser
|
||
End If
|
||
|
||
End If
|
||
Catch ex As Exception
|
||
Dim msg = "Unexpected Error in GetWMSessionAsUser: " & ex.Message
|
||
clsLogger.Add(msg, True)
|
||
Return Nothing
|
||
End Try
|
||
|
||
End Function
|
||
''' <summary>
|
||
''' Checks if folder exists in windream.
|
||
''' </summary>
|
||
''' <param name="substring_path">path to folder without drive</param>
|
||
''' <returns>Returns true if exists, fals eif not</returns>
|
||
''' <remarks></remarks>
|
||
Public Shared Function WD_PATH_EXISTS(substring_path As String)
|
||
Try
|
||
Dim folder_exists = oSession.WMObjectExists(WINDREAMLib.WMEntity.WMEntityFolder, substring_path, 0, 0)
|
||
Return folder_exists
|
||
Catch ex As Exception
|
||
clsLogger.Add(String.Format("Unexpected error in WD_PATH_EXISTS ({0}): {1} ", substring_path, ex.Message), True)
|
||
Return False
|
||
End Try
|
||
End Function
|
||
Public Shared Function Create_FOLDER_FROM_PATH(ByVal WM_FOLDER As String)
|
||
Try
|
||
If WM_FOLDER.Contains(":") Then
|
||
WM_FOLDER = WM_FOLDER.Substring(2)
|
||
End If
|
||
|
||
Dim WMObject As WINDREAMLib.WMObject
|
||
If IsNothing(oSession) Then
|
||
clsLogger.Add(">> There is no windream session active!", True)
|
||
Return False
|
||
End If
|
||
Try
|
||
WMObject = oSession.GetNewWMObjectFS(WMEntityFolder, WM_FOLDER, WMObjectEditModeNoEdit)
|
||
Catch ex As Exception
|
||
clsLogger.Add(">> Could not create WMObject in Create_FOLDER_FROM_PATH '" & WM_FOLDER & "': " & ex.Message, True)
|
||
Return False
|
||
End Try
|
||
Return True
|
||
Catch ex As Exception
|
||
Return False
|
||
End Try
|
||
End Function
|
||
Public Shared Function Stream_File(ByVal filenameQuelle As String, ByVal Ziel As String, WDSession As Object, Optional Importall As Boolean = False)
|
||
Try
|
||
clsLogger.AddDetailLog("Starting StreamFile....")
|
||
clsLogger.AddDetailLog("filenameQuelle: " & filenameQuelle)
|
||
clsLogger.AddDetailLog("filenameZiel: " & Ziel)
|
||
|
||
WMFILE_existed = False
|
||
aktWMObject = Nothing
|
||
Dim zielpfad = Path.GetDirectoryName(Ziel)
|
||
If zielpfad.StartsWith("W:") Then
|
||
zielpfad = zielpfad.Substring(2)
|
||
End If
|
||
|
||
If WD_PATH_EXISTS(zielpfad) = False Then
|
||
Dim split() As String = zielpfad.Split("\")
|
||
Dim Path_Combined As String = ""
|
||
For Each s As String In split
|
||
Path_Combined &= s & "\"
|
||
If Path_Combined <> "W:\" Then
|
||
Dim temppath = Path_Combined
|
||
Try
|
||
temppath = Path_Combined.Substring(0, temppath.Length)
|
||
clsLogger.AddDetailLog("Checking if partpath exists: " & temppath)
|
||
Select Case WD_PATH_EXISTS(temppath)
|
||
Case False
|
||
oSession.GetNewWMObjectFS(2, temppath, 0) 'WMEntityFolder,WMObjectEditModeNoEdit)
|
||
Case -10
|
||
Return False
|
||
End Select
|
||
Catch ex As Exception
|
||
If Not ex.Message.Contains("Filename exists!") Then
|
||
clsLogger.Add(String.Format(">> Could not create folder-part: {0} - Complete path is: {1}", temppath, zielpfad), True)
|
||
clsLogger.Add(String.Format(">> ErrorMessage: {0}: ", ex.Message), True)
|
||
clsLogger.WriteLog()
|
||
Return False
|
||
End If
|
||
End Try
|
||
End If
|
||
Next
|
||
'If Create_FOLDER_FROM_PATH(zielpfad) = False Then
|
||
' Return False
|
||
'Else
|
||
' clsLogger.Add(">> Zielverzeichnis neu erzeugt!", False)
|
||
'End If
|
||
End If
|
||
|
||
Const STREAM_BinaryObject = "BinaryObject"
|
||
clsLogger.AddDetailLog("Stream_File wurde gestartet")
|
||
Dim endgültigerDateiname As String = ""
|
||
clsLogger.AddDetailLog("Quelldatei gelesen")
|
||
If Ziel.StartsWith("W:") Then
|
||
endgültigerDateiname = Ziel.Substring(2)
|
||
End If
|
||
|
||
If WD_PATH_EXISTS(zielpfad) = True Then
|
||
clsLogger.AddDetailLog("targetPath exisitiert")
|
||
clsLogger.AddDetailLog("Datei kopieren von " & filenameQuelle & " nach " & endgültigerDateiname & ".")
|
||
|
||
Dim WMObject
|
||
Dim aFileIO
|
||
Dim aWMStream
|
||
Dim wmbrwsr
|
||
Dim dmsServer As String
|
||
aFileIO = New WMOTOOLLib.WMFileIO
|
||
'If My.Settings.DLL_WMOTOOL = "" Then
|
||
' aFileIO = New WMOTOOLLib.WMFileIO
|
||
' clsLogger.AddDetailLog("Direkter Verweis auf New WMOTOOLLib.WMFileIO")
|
||
'Else
|
||
' aFileIO = CreateObject(My.Settings.DLL_WMOTOOL) 'WMOTool.WMFileIO oder WMOTOOLLib.WMFileIO
|
||
' clsLogger.AddDetailLog("Verwendeter Verweis aus Anwendungsstring: '" & My.Settings.DLL_WMOTOOL & "'")
|
||
'End If
|
||
|
||
wmbrwsr = CreateObject("WMOBrws.ServerBrowser")
|
||
'==================================================================
|
||
' get the current DMS-server to log in
|
||
'==================================================================
|
||
dmsServer = wmbrwsr.GetCurrentServer
|
||
Const WMCOMEventWMSessionNeedIndex = 1
|
||
|
||
'windream Objekte erstellen ohne Indexierungs-Event
|
||
WDSession.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
|
||
'==================================================================
|
||
' check if files exist
|
||
'==================================================================
|
||
clsLogger.AddDetailLog("ÜBERPRÜFTER DATEINAME => " & endgültigerDateiname)
|
||
Dim wdFilexists As Boolean
|
||
clsLogger.AddDetailLog("Versuch auf die Datei in windream zuzugreifen und zu sperren...")
|
||
wdFilexists = WDSession.WMObjectExists(WMEntityDocument, endgültigerDateiname, 0, 0)
|
||
|
||
If wdFilexists = False Then
|
||
clsLogger.AddDetailLog("Datei ist NICHT vorhanden, kann also einfach neu angelegt werden")
|
||
Err.Clear()
|
||
'==================================================================
|
||
' create an object
|
||
'==================================================================
|
||
clsLogger.AddDetailLog("Creating WMObject '" & endgültigerDateiname & "'")
|
||
WMObject = WDSession.GetNewWMObjectFS(WMEntityDocument, endgültigerDateiname, WMObjectEditModeObject)
|
||
clsLogger.AddDetailLog("WMObject was created....")
|
||
If Err.Number > 0 Then
|
||
clsLogger.Add(" FEHLER: WMObject konnte nicht erzeugt werden - Error: '" & Err.Description & "'", True)
|
||
End If
|
||
|
||
Else
|
||
' wenn auf die Datei zugeriffen werden konnte ist sie bereits vorhanden -> Datum anhängen
|
||
clsLogger.Add("==> DATEI IST BEREITS VORHANDEN", False)
|
||
Err.Clear()
|
||
WMObject = WDSession.GetWMObjectByPath(WMEntityDocument, endgültigerDateiname)
|
||
aktWMObject = WMObject
|
||
WMFILE_existed = True
|
||
If Err.Number > 0 Then
|
||
clsLogger.Add(" FEHLER: Neues WMObject (Kopie) konnte nicht erzeugt werden - Error: '" & Err.Description & "'", True)
|
||
End If
|
||
clsLogger.AddDetailLog("WMObject(Existing) was created....")
|
||
Return True
|
||
End If
|
||
|
||
clsLogger.AddDetailLog("ENDGÜLTIGER DATEINAME => " & endgültigerDateiname)
|
||
If WMObject IsNot Nothing Then
|
||
aktWMObject = WMObject
|
||
' 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
|
||
|
||
clsLogger.Add(" FEHLER: fileIO konnte nicht gesetzt werden - Datei wird wieder gelöscht - Error: '" & Err.Description & "'", True)
|
||
clsLogger.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()
|
||
Delete_WDFile(endgültigerDateiname)
|
||
Return False
|
||
|
||
End If
|
||
' open the windream object's file stream for writing
|
||
aWMStream = WMObject.OpenStream(STREAM_BinaryObject, WMObjectStreamOpenModeReadWrite)
|
||
If Err.Number > 0 Then
|
||
clsLogger.Add(" FEHLER bei OpenStream - Datei wird wieder gelöscht - Error: '" & Err.Description & "'", True)
|
||
WMObject.unlock()
|
||
Delete_WDFile(endgültigerDateiname)
|
||
Return False
|
||
|
||
End If
|
||
clsLogger.AddDetailLog("oWMStream erzeugt")
|
||
' give fileIO helper object the windream stream
|
||
aFileIO.aWMStream = aWMStream
|
||
If Err.Number > 0 Then
|
||
clsLogger.Add(" FEHLER bei Zuweisen aWMStream zu aFileIO - Datei wird wieder gelöscht - Error: '" & Err.Description & "'", True)
|
||
WMObject.unlock()
|
||
Delete_WDFile(endgültigerDateiname)
|
||
Return False
|
||
|
||
End If
|
||
' let fileIO object import the original file into windream
|
||
aFileIO.ImportOriginal(True)
|
||
If Err.Number > 0 Then
|
||
clsLogger.Add(" FEHLER bei FileIO.ImportOriginal(True) - Datei wird wieder gelöscht - Error: '" & Err.Description & "'", True)
|
||
WMObject.unlock()
|
||
Delete_WDFile(endgültigerDateiname)
|
||
Return False
|
||
|
||
End If
|
||
clsLogger.AddDetailLog("Inhalt der Datei konnte übertragen werden")
|
||
' close the windream file stream
|
||
aWMStream.Close()
|
||
If Err.Number > 0 Then
|
||
clsLogger.Add(" FEHLER bei aWMStream.Close() - Datei wird wieder gelöscht - Error: '" & Err.Description & "'", True)
|
||
WMObject.unlock()
|
||
Delete_WDFile(endgültigerDateiname)
|
||
Return False
|
||
|
||
End If
|
||
' save new windream object
|
||
WMObject.Save()
|
||
If Err.Number > 0 Then
|
||
clsLogger.Add(" FEHLER bei WMObject.save - Datei wird wieder gelöscht - Error: '" & Err.Description & "'", True)
|
||
WMObject.unlock()
|
||
Delete_WDFile(endgültigerDateiname)
|
||
|
||
Return Err.Number
|
||
|
||
End If
|
||
clsLogger.AddDetailLog("Datei konnte gespeichert werden")
|
||
' unlock the windream object
|
||
WMObject.unlock()
|
||
If Err.Number > 0 Then
|
||
clsLogger.Add(" FEHLER bei WMObject.unlock - Datei wird wieder gelöscht - Error: '" & Err.Description & "'", True)
|
||
WMObject.unlock()
|
||
Delete_WDFile(endgültigerDateiname)
|
||
|
||
Return False
|
||
|
||
End If
|
||
'DATEI GRÖSSE ERMITTELN - MANCHMAL KOMMT ES VOR DAS DATEIGRÖße 0 ist
|
||
|
||
If endgültigerDateiname.StartsWith("\") Then
|
||
If endgültigerDateiname.StartsWith("\\") Then
|
||
endgültigerDateiname = endgültigerDateiname.Replace("\\", "\")
|
||
End If
|
||
Else
|
||
endgültigerDateiname = "\" & endgültigerDateiname
|
||
End If
|
||
|
||
CURRENT_FILEIN_WD = endgültigerDateiname
|
||
CURRENT_FILEIN_WD = CURRENT_FILEIN_WD.Replace("\\", "\")
|
||
clsLogger.AddDetailLog("File '" & CURRENT_FILEIN_WD & "' was imported.")
|
||
Return True
|
||
Else
|
||
clsLogger.Add("WMObjekt is nothing", True)
|
||
Return False
|
||
End If
|
||
Else
|
||
clsLogger.Add("targetPath exisitiert NICHT", True)
|
||
Return False
|
||
End If
|
||
Catch ex As Exception
|
||
clsLogger.Add("Unexpected Error in Stream File: " & vbNewLine & ex.Message, True)
|
||
Return False
|
||
End Try
|
||
|
||
|
||
End Function
|
||
Public Shared Function Delete_WDFile(ByVal WD_File As String)
|
||
Try
|
||
If WD_File.StartsWith("\") = False Then
|
||
WD_File = WD_File.Substring(2)
|
||
End If
|
||
Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject
|
||
Try
|
||
WMObject = oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File) 'WINDREAMLib.WMEntity.WMEntityDocument
|
||
clsWindream.CURRENT_WMObject = WMObject
|
||
Catch ex As Exception
|
||
clsLogger.Add(">> Could not create WMObject for file '" & WD_File & "' - so it is not existing", True)
|
||
Return False
|
||
End Try
|
||
WMObject.Delete()
|
||
Return True
|
||
Catch ex As Exception
|
||
clsLogger.Add("Unexpected Error in Delete_WDFile: '" & WD_File & "' " & ex.Message, True)
|
||
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
|
||
clsLogger.AddDetailLog("WDFile_exists - Could create an object")
|
||
Return True
|
||
Catch ex As Exception
|
||
clsLogger.AddDetailLog("WDFile_exists- Could not create object for file '" & WD_File & "'")
|
||
Return False
|
||
End Try
|
||
End Function
|
||
Public Shared Function Create_aktWDObjekt(ByVal WD_File As String)
|
||
Try
|
||
WD_File = WD_File.Substring(2)
|
||
aktWMObject = Nothing
|
||
aktWMObject = oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File) 'WINDREAMLib.WMEntity.WMEntityDocument
|
||
Return True
|
||
Catch ex As Exception
|
||
clsLogger.Add("Unexpected Error in Create_aktWDObjekt: the file' " & WD_File & "' could not be transformed!", True)
|
||
clsLogger.Add("Error-Description: " & ex.Message, False)
|
||
' Me.TreeNodeInfos.Add(temp)
|
||
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
|
||
clsLogger.AddDetailLog("IndexFile ('" & WD_File & "','" & _Indexname & "','" & _Value & "') was called!")
|
||
|
||
'' 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
|
||
|
||
|
||
' den Dokumenttyp schreiben
|
||
clsLogger.AddDetailLog("Indexing will be started")
|
||
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
|
||
clsLogger.Add("Unexpected Error Setting the objecttype' " & _WDObjekttyp & "'!", True)
|
||
clsLogger.Add("Error-Description: " & ex.Message, False)
|
||
WMObject.Save()
|
||
WMObject.unlock()
|
||
' Me.TreeNodeInfos.Add(temp)
|
||
Return False
|
||
End Try
|
||
|
||
' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
|
||
clsLogger.AddDetailLog("Objecttype '" & _WDObjekttyp & "' was set!")
|
||
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
|
||
clsLogger.AddDetailLog("File saved / Unlock done")
|
||
' wenn bis hierher alles geklappt hat wurde ein Dokumenttyp übergeben
|
||
|
||
clsLogger.AddDetailLog("Objecttype: " & _WDObjekttyp)
|
||
|
||
|
||
' 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
|
||
|
||
|
||
If (GetTypeOfIndexAsIntByName(_Indexname) = WMObjectVariableValueTypeVector) Or GetTypeOfIndexAsIntByName(_Indexname) = 4097 Then
|
||
clsLogger.AddDetailLog("type vectorfield")
|
||
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
|
||
clsLogger.AddDetailLog("value before checking: " & _Value)
|
||
_Value = CheckIndexValue(_Value)
|
||
'Ausstieg da Fehler in der Überprüfung
|
||
If _Value Is Nothing Then
|
||
Return False
|
||
End If
|
||
werte.Add(_Value)
|
||
clsLogger.AddDetailLog("value for indexing: " & _Value)
|
||
Else
|
||
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
|
||
clsLogger.AddDetailLog("value before checking: " & _Value)
|
||
_Value = CheckIndexValue(_Value)
|
||
'Ausstieg da Fehler in der Überprüfung
|
||
If _Value Is Nothing Then
|
||
Return False
|
||
End If
|
||
werte.Add(_Value)
|
||
clsLogger.AddDetailLog("value for indexing: " & _Value)
|
||
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
|
||
clsLogger.Add("Unexpected Error in IndexFile: the file' " & WD_File & "' could not be indexed!", True)
|
||
clsLogger.Add("Error-Description: " & ex.Message, False)
|
||
' Me.TreeNodeInfos.Add(temp)
|
||
Return False
|
||
End Try
|
||
End Function
|
||
Public Shared Function IndexaktFile(ByVal _Indexname As String, ByVal _Value As String)
|
||
Try
|
||
Try
|
||
' die Datei sperren
|
||
aktWMObject.lock()
|
||
Catch ex As Exception
|
||
' nichts tun (Datei ist bereits gesperrt)
|
||
End Try
|
||
|
||
' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
|
||
If aktWMObject.aObjectType.aName = "Standard" Then
|
||
Try
|
||
' ihr den entsprechenden Dokumenttyp zuweisen
|
||
aktWMObject.aObjectType = oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp)
|
||
Catch ex As Exception
|
||
clsLogger.Add("Unexpected Error Setting the objecttype' " & _WDObjekttyp & "'!", True)
|
||
clsLogger.Add("Error-Description: " & ex.Message, False)
|
||
aktWMObject.Save()
|
||
aktWMObject.unlock()
|
||
' Me.TreeNodeInfos.Add(temp)
|
||
Return False
|
||
End Try
|
||
|
||
' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
|
||
clsLogger.AddDetailLog("Objecttype '" & _WDObjekttyp & "' was set!")
|
||
End If
|
||
|
||
Try
|
||
aktWMObject.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
|
||
aktWMObject.unlock()
|
||
Catch ex As Exception
|
||
' wenn das entsperren nicht geklappt hat, dann war die Datei auch nicht gesperrt
|
||
End Try
|
||
clsLogger.AddDetailLog("File saved / Unlock done")
|
||
' wenn bis hierher alles geklappt hat wurde ein Dokumenttyp übergeben
|
||
|
||
clsLogger.AddDetailLog("Objecttype: " & _WDObjekttyp)
|
||
|
||
|
||
' 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
|
||
|
||
|
||
If (GetTypeOfIndexAsIntByName(_Indexname) = WMObjectVariableValueTypeVector) Or GetTypeOfIndexAsIntByName(_Indexname) = 4097 Then
|
||
clsLogger.AddDetailLog("type vectorfield")
|
||
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
|
||
clsLogger.AddDetailLog("value before checking: " & _Value)
|
||
_Value = CheckIndexValue(_Value)
|
||
'Ausstieg da Fehler in der Überprüfung
|
||
If _Value Is Nothing Then
|
||
Return False
|
||
End If
|
||
werte.Add(_Value)
|
||
clsLogger.AddDetailLog("value for indexing: " & _Value)
|
||
Else
|
||
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
|
||
clsLogger.AddDetailLog("value before checking: " & _Value)
|
||
_Value = CheckIndexValue(_Value)
|
||
'Ausstieg da Fehler in der Überprüfung
|
||
If _Value Is Nothing Then
|
||
Return False
|
||
End If
|
||
werte.Add(_Value)
|
||
clsLogger.AddDetailLog("value for indexing: " & _Value)
|
||
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(aktWMObject, arrIndex, arrValue)
|
||
|
||
'MsgBox(arr(0) & vbNewLine & indexe)
|
||
|
||
Catch ex As Exception
|
||
clsLogger.Add("Unexpected Error in IndexFile: the file' " & aktWMObject.aName & "' could not be indexed!", True)
|
||
clsLogger.Add("Error-Description: " & ex.Message, False)
|
||
' 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
|
||
clsLogger.AddDetailLog("Index not set to '" & _value.ToString & "'")
|
||
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
|
||
clsLogger.AddDetailLog("Index already set to '" & _value.ToString & "'")
|
||
End If
|
||
End If
|
||
Catch ex As Exception
|
||
clsLogger.Add("Unexpected Error in File_SetBooleanIndex!", True)
|
||
clsLogger.Add("Error-Description: " & ex.Message, False)
|
||
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
|
||
clsLogger.AddDetailLog("Indexvalue is empty - No indexing")
|
||
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
|
||
clsLogger.AddDetailLog("Objecttype '" & oDocument.aObjectType.aName & "' was changed to '" & _WDObjekttyp)
|
||
Else
|
||
clsLogger.AddDetailLog("Objecttype was set already.")
|
||
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
|
||
|
||
clsLogger.AddDetailLog(" ")
|
||
clsLogger.AddDetailLog("Indexing of index '" & indexname & "'")
|
||
|
||
' 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
|
||
|
||
Dim value = aValues(i)
|
||
Dim convertValue
|
||
Dim vektor As Boolean = False
|
||
'Den Typ des Index-Feldes auslesen
|
||
|
||
Select Case (vType)
|
||
'Case WMObjectVariableValueTypeUndefined
|
||
Case WMObjectVariableValueTypeString
|
||
clsLogger.AddDetailLog("type of windreamIndex WMObjectVariableValueTypeString")
|
||
convertValue = CStr(value)
|
||
Case WMObjectVariableValueTypeInteger
|
||
clsLogger.AddDetailLog("type of windreamIndex WMObjectVariableValueTypeInteger")
|
||
value = value.ToString.Replace(" ", "")
|
||
If IsNumeric(value) = False Then
|
||
clsLogger.AddDetailLog("Attention: Value '" & value & "' can not be converted to integer!")
|
||
End If
|
||
value = value.ToString.Replace(" ", "")
|
||
convertValue = CInt(value)
|
||
_int = True
|
||
Case WMObjectVariableValueTypeFloat
|
||
clsLogger.AddDetailLog("type of windreamIndex WMObjectVariableValueTypeFloat")
|
||
value = value.ToString.Replace(" ", "")
|
||
convertValue = CDbl(value)
|
||
Case WMObjectVariableValueTypeFixedPoint
|
||
clsLogger.AddDetailLog("type of windreamIndex WMObjectVariableValueTypeFixedPoint")
|
||
value = value.ToString.Replace(" ", "")
|
||
convertValue = CDbl(value)
|
||
_dbl = True
|
||
Case WMObjectVariableValueTypeBoolean
|
||
clsLogger.AddDetailLog("type of windreamIndex WMObjectVariableValueTypeBoolean")
|
||
convertValue = CBool(value)
|
||
_bool = True
|
||
Case WMObjectVariableValueTypeDate
|
||
clsLogger.AddDetailLog("type of windreamIndex WMObjectVariableValueTypeDate")
|
||
_date = True
|
||
'Dim _date As Date = value
|
||
convertValue = value
|
||
Case WMObjectVariableValueTypeTimeStamp
|
||
clsLogger.AddDetailLog("type of windreamIndex WMObjectVariableValueTypeTimeStamp")
|
||
convertValue = CDbl(value)
|
||
Case WMObjectVariableValueTypeCurrency
|
||
clsLogger.AddDetailLog(" - type of windreamIndex WMObjectVariableValueTypeCurrency")
|
||
'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
|
||
clsLogger.AddDetailLog("type of windreamIndex WMObjectVariableValueTypeTime")
|
||
'If ((value)) Then
|
||
' convertValue = CDate(value)
|
||
'Else
|
||
' convertValue = ""
|
||
'End If
|
||
'Dim _date As Date = value
|
||
convertValue = convertValue '*_date.ToShortTimeString
|
||
Case WMObjectVariableValueTypeFloat
|
||
clsLogger.AddDetailLog("type of windreamIndex WMObjectVariableValueTypeFloat")
|
||
convertValue = CStr(value)
|
||
Case WMObjectVariableValueTypeVariant
|
||
clsLogger.AddDetailLog("type of windreamIndex WMObjectVariableValueTypeVariant")
|
||
convertValue = CStr(value)
|
||
Case WMObjectVariableValueTypeFulltext
|
||
clsLogger.AddDetailLog("type of windreamIndex WMObjectVariableValueTypeFulltext")
|
||
convertValue = CStr(value)
|
||
Case 4097
|
||
clsLogger.AddDetailLog("type of windreamIndex 4097 Vektor alphanumerisch")
|
||
'Vektor alphanumerisch
|
||
vektor = True
|
||
Case 4098
|
||
clsLogger.AddDetailLog("type of windreamIndex 4098 Vektor Numerisch")
|
||
'Vektor Numerisch
|
||
vektor = True
|
||
Case 4099
|
||
clsLogger.AddDetailLog("type of windreamIndex 4099 Vektor Kommazahl")
|
||
'Vektor Kommazahl
|
||
vektor = True
|
||
Case 4100
|
||
clsLogger.AddDetailLog("type of windreamIndex 4100 Vektor Boolean")
|
||
'Vektor Kommazahl
|
||
vektor = True
|
||
Case 4101
|
||
clsLogger.AddDetailLog("type of windreamIndex 4101 Vektor Date")
|
||
'Vektor Kommazahl
|
||
vektor = True
|
||
Case 4103
|
||
clsLogger.AddDetailLog("type of windreamIndex 4103 Vektor DateTime")
|
||
'Vektor DateTime
|
||
vektor = True
|
||
Case 4107
|
||
clsLogger.AddDetailLog("type of windreamIndex 4107 Integer 64bit")
|
||
vektor = True
|
||
Case 36865
|
||
clsLogger.AddDetailLog("type of windreamIndex 36865 Vektor alphanumerisch")
|
||
'Vektor Kommazahl
|
||
vektor = True
|
||
Case Else
|
||
clsLogger.AddDetailLog("Typ des windream-Indexes konnte nicht bestimmt werden!")
|
||
clsLogger.AddDetailLog("Versuch des Auslesens (vType): " & vType)
|
||
|
||
convertValue = ""
|
||
End Select
|
||
If vektor = False Then
|
||
If convertValue.ToString Is Nothing = False Then
|
||
clsLogger.AddDetailLog("Converted valuet: '" & convertValue.ToString & "'")
|
||
End If
|
||
End If
|
||
'############################################################################################
|
||
'####################### Der eigentliche Indexierungsvorgang ################################
|
||
'############################################################################################
|
||
If vektor = False Then
|
||
Try
|
||
If convertValue.ToString Is Nothing = False Then
|
||
clsLogger.AddDetailLog("Now: oDocument.SetVariableValue(" & aName & ", " & convertValue & ")")
|
||
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()
|
||
|
||
clsLogger.AddDetailLog("index '" & aName & "' was written")
|
||
clsLogger.AddDetailLog("")
|
||
|
||
Else
|
||
clsLogger.Add("No indexvalue exists", False)
|
||
End If
|
||
Catch ex As Exception
|
||
clsLogger.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
|
||
clsLogger.AddDetailLog("Vectorfield: Preparing of Array")
|
||
Dim myArray()
|
||
'If aValues.Length = 2 And aValues(0) = "" Then
|
||
' clsLogger.AddDetailLog("Indexwert ist leer/Nothing - Keine Nachindexierung")
|
||
'End If
|
||
'For Each row As DataRow In DT.Rows
|
||
|
||
'Next
|
||
Dim Anzahl As Integer = aValues.Length
|
||
'Vektorfeld wird mit EINEM Wert gefüllt
|
||
If Anzahl = 1 Then
|
||
clsLogger.AddDetailLog("Vectorfield will be filled with ONE VALUE")
|
||
ReDim myArray(0)
|
||
myArray(0) = Convert_VectorType(vType, value)
|
||
'Jetzt überprüfen ob Werte in Vektorfeld angefügt oder überschrieben werden sollen
|
||
clsLogger.AddDetailLog("Converted Value: " & myArray(0).ToString)
|
||
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 LOG_ERRORS_ONLY = False Then
|
||
clsLogger.AddDetailLog("Vectorindex '" & aName & "' was written")
|
||
clsLogger.AddDetailLog("")
|
||
End If
|
||
'Die Änderungen festsschreiben/speichern
|
||
oDocument.Save()
|
||
End If
|
||
|
||
End If
|
||
|
||
|
||
|
||
End If
|
||
Else
|
||
clsLogger.AddDetailLog("Array of indexvalues is nothing - No indexing")
|
||
End If
|
||
i += 1
|
||
|
||
Next
|
||
oDocument.unlock()
|
||
|
||
clsLogger.AddDetailLog("...and unlock.")
|
||
|
||
Return True
|
||
Else
|
||
clsLogger.Add("document is locked!", False)
|
||
'oDocument.unlock()
|
||
Return False
|
||
End If
|
||
End If
|
||
Catch ex As Exception
|
||
clsLogger.Add("Unexpected Error in ClassNiWindream.RunIndexing: " & ex.Message, True)
|
||
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
|
||
clsLogger.Add("Value '" & NewValue.ToString & "' already existing in vectorfield", False)
|
||
End If
|
||
End If
|
||
Next
|
||
|
||
End If
|
||
Else
|
||
clsLogger.AddDetailLog("vectorfield is empty....")
|
||
'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
|
||
clsLogger.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
|
||
clsLogger.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
|
||
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))
|
||
clsLogger.AddDetailLog("wibdreamObject created")
|
||
Catch ex As Exception
|
||
clsLogger.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
|
||
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
|
||
End If
|
||
End If
|
||
If containsvalue = True Then 'And Not IsNothing(ValueArray)
|
||
Try
|
||
' die Datei sperren
|
||
WMObject.lock()
|
||
Catch ex As Exception
|
||
clsLogger.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()
|
||
clsLogger.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()
|
||
clsLogger.AddDetailLog("die Sperrung des Dokuments aufheben")
|
||
Catch ex As Exception
|
||
' nichts tun (Datei war nicht gesperrt)
|
||
End Try
|
||
|
||
' die Indexierungsinformationen für den TreeView-Log zurückgeben
|
||
Return True
|
||
Else
|
||
clsLogger.Add("Could not remove the linked value!", True)
|
||
Return False
|
||
End If
|
||
|
||
Catch ex As Exception
|
||
clsLogger.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>
|
||
''' Ü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
|
||
clsLogger.Add("Error while checking index exists in Objecttype - Errormessage: " & vbNewLine & ex.Message, True)
|
||
End Try
|
||
Return False
|
||
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)
|
||
clsLogger.AddDetailLog("In Indexierungsvorgang für: " & filenameZiel)
|
||
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
|
||
clsLogger.AddDetailLog("=> Hinweis: Die Datei wurde auf Grund eines Problems in der Initialisierung nicht vollständig indexiert.")
|
||
Return False
|
||
End If
|
||
|
||
Dim fileExists As Boolean
|
||
|
||
' prüfen ob die zu indexierende Datei existiert
|
||
fileExists = My.Computer.FileSystem.FileExists("W:" & filenameZiel) '_windream.GetWindreamDriveLetter
|
||
|
||
Dim an As Integer = 0
|
||
Do While My.Computer.FileSystem.FileExists("W:" & filenameZiel) = False
|
||
If an > 500 Then
|
||
fileExists = False
|
||
Exit Do
|
||
Else
|
||
clsLogger.AddDetailLog(" Achtung: Datei exisitiert noch nicht: " & My.Computer.Clock.LocalTime)
|
||
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)
|
||
|
||
clsLogger.AddDetailLog(" - windream-Objekt der Datei erzeugt")
|
||
clsLogger.AddDetailLog(" - Ziel: W:\" & filenameZiel)
|
||
|
||
|
||
'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
|
||
clsLogger.AddDetailLog("Bei dem Zielindex handelt es sich um einen Einzelindex.")
|
||
Else
|
||
clsLogger.AddDetailLog(" Bei dem Zielindex handelt es sich um ein Vektorfeld.")
|
||
' 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
|
||
clsLogger.AddDetailLog("Array geleert und erneuert!")
|
||
End If
|
||
Catch ex As Exception
|
||
clsLogger.Add("Hinweis: Beim Initialisieren der Datei auf dem windream-Laufwerk ist ein Fehler aufgetreten.", False)
|
||
Return False
|
||
End Try
|
||
|
||
|
||
'Try
|
||
' den Typ des Zielindexes
|
||
clsLogger.AddDetailLog("Typ des Indexes: " & TypDesIndexes.ToString)
|
||
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")
|
||
'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
|
||
clsLogger.AddDetailLog("- Es handelt sich um einen Vektorindex")
|
||
Dim temp_arr As New ArrayList
|
||
|
||
Select Case (TypDesIndexes - WMObjectVariableValueTypeVector)
|
||
'VektorIndex vom Typ String 64'
|
||
Case 1
|
||
clsLogger.AddDetailLog("- VektorIndex vom Typ String 1")
|
||
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))
|
||
clsLogger.AddDetailLog("- Führende Nullen wurden entfernt")
|
||
Else
|
||
temp_arr.Add(CStr(wert))
|
||
End If
|
||
|
||
clsLogger.AddDetailLog("- Wert " & CStr(wert) & " konvertiert")
|
||
Next
|
||
Case WMObjectVariableValueTypeUndefined
|
||
' convertValue = ""
|
||
|
||
Case WMObjectVariableValueTypeString
|
||
clsLogger.AddDetailLog("- VektorIndex vom Typ String 2")
|
||
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))
|
||
clsLogger.AddDetailLog("- Führende Nullen wurden entfernt")
|
||
Else
|
||
temp_arr.Add(CStr(wert))
|
||
End If
|
||
clsLogger.AddDetailLog("- Wert " & CStr(wert) & " konvertiert")
|
||
Next
|
||
|
||
Case WMObjectVariableValueTypeInteger
|
||
clsLogger.AddDetailLog("- VektorIndex vom Typ Integer")
|
||
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
|
||
clsLogger.AddDetailLog("- Einträge in temp_arr also Speichern des Arrays in convertValue")
|
||
' convertValue = Nothing
|
||
' convertValue = temp_arr.ToArray
|
||
Else
|
||
' convertValue = vbEmpty
|
||
End If
|
||
clsLogger.AddDetailLog("- Werte erfolgreich konvertiert")
|
||
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)
|
||
|
||
clsLogger.AddDetailLog(" - den konvertierten Indexwert dem entsprechenden Index zuweisen")
|
||
clsLogger.AddDetailLog(" - Indexname: " & index.ToString)
|
||
clsLogger.AddDetailLog(" - Indexwert: " & werte.ToString)
|
||
|
||
'End If
|
||
|
||
' die Indexinformationen des Dokuments speichern
|
||
WMObject.Save()
|
||
clsLogger.AddDetailLog("die Indexinformationen des Dokuments speichern")
|
||
' Unlock in einem unbehandelten Try-Block um Fehler abzufangen,
|
||
' wenn eine Datei nicht gesperrt ist
|
||
Try
|
||
' die Sperrung des Dokuments aufheben
|
||
WMObject.unlock()
|
||
clsLogger.AddDetailLog("die Sperrung des Dokuments aufheben")
|
||
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
|
||
clsLogger.Add(" Hinweis: Die Datei hat zum Zeitpunkt der Indexierung noch nicht auf dem windream-Laufwerk existiert.", False)
|
||
End If
|
||
|
||
Catch ex As Exception
|
||
clsLogger.Add(" Hinweis: Unbekannter Fehler beim Indexieren der Datei.", True)
|
||
clsLogger.Add(ex.Message, False)
|
||
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
|
||
clsLogger.Add("Error in CheckIndexValue: " & ex.Message, True)
|
||
Return Nothing
|
||
End Try
|
||
|
||
End Function
|
||
End Class
|