1776 lines
86 KiB
VB.net
1776 lines
86 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
|
|
Imports System.Text.RegularExpressions
|
|
|
|
Public Class ClassWindream
|
|
|
|
#Region "+++++ Konstanten +++++"
|
|
Const DEBUG = AUS
|
|
Const AUS = 0
|
|
Const WINDREAM = 1
|
|
Const VARIABLEN = 2
|
|
Const WMObjectStreamOpenModeReadWrite = 2
|
|
|
|
Const STREAM_BinaryObject = "BinaryObject"
|
|
|
|
Public Const WMObjectVariableValueTypeUndefined = 0
|
|
Public Const WMObjectVariableValueTypeString = 1
|
|
Public Const WMObjectVariableValueTypeInteger = 2
|
|
Public Const WMObjectVariableValueTypeFloat = 3
|
|
Public Const WMObjectVariableValueTypeBoolean = 4
|
|
Public Const WMObjectVariableValueTypeDate = 5
|
|
Public Const WMObjectVariableValueTypeFixedPoint = 6
|
|
Public Const WMObjectVariableValueTypeTimeStamp = 7
|
|
Public Const WMObjectVariableValueTypeCurrency = 8
|
|
Public Const WMObjectVariableValueTypeTime = 9
|
|
Public Const WMObjectVariableValueTypeVariant = 10
|
|
Public Const WMObjectVariableValueTypeMask = &HFFF
|
|
Public Const WMObjectVariableValueFlagMask = &HFFFFF000
|
|
Public Const WMObjectVariableValueTypeVector = &H1000
|
|
Public Const WMObjectVariableValueTypeFulltext = &H2000
|
|
Public Const WMObjectVariableValueTypeDefaultValue = &H4000
|
|
#End Region
|
|
|
|
#Region "+++++ Variablen +++++"
|
|
Public Shared oConnect ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht)
|
|
Public Shared _session 'As WINDREAMLib.WMSession ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht)
|
|
Public Shared oBrowser As New WMOBRWSLib.ServerBrowser
|
|
Public Shared _DocumentTypes As WINDREAMLib.WMObjects
|
|
Private _SearchController As New WMOSearchController
|
|
Public Shared _WDObjekttyp As String
|
|
Private Shared _currentWMObject As WINDREAMLib.WMObject
|
|
#End Region
|
|
|
|
|
|
#Region "+++++ Allgemeine Methoden und Funktionen +++++"
|
|
|
|
''' <summary>
|
|
''' Konstruktor für die windream-Klasse
|
|
''' </summary>
|
|
''' <remarks></remarks>
|
|
Sub New()
|
|
' wenn ein Unexpected error in der Initialisierung auftrat
|
|
If Not ClassWindream.Init() Then
|
|
' Nachricht ausgeben
|
|
MsgBox("Es trat ein Unexpected error in der Initialisierung der Klasse windream auf. Bitte prüfen Sie ob der windream-Server aktiv ist und alle Dienste gestartet sind.", MsgBoxStyle.Exclamation, "Unexpected error in 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)
|
|
|
|
_SearchController = New WMOSearchController
|
|
|
|
Me._SearchController.CheckSearchProfile(wdfLocation.ToLower)
|
|
Dim suchTyp = Me._SearchController.SearchProfileTargetProgID
|
|
Dim ExSettings As Object
|
|
Dim oSearch As Object
|
|
ExSettings = Me._SearchController.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("Fehler 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("Fehler 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
|
|
_session = CreateObject("Windream.WMSession", GetCurrentServer)
|
|
LOGGER.Info(" ...windream-Server: '" & GetCurrentServer() & "'")
|
|
' Connection-Objekt instanziieren
|
|
oConnect = CreateObject("Windream.WMConnect")
|
|
'MsgBox("windrem init 'ed")
|
|
Catch ex As Exception
|
|
LOGGER.Info("Windream konnte nicht initiiert werden: " & ex.Message)
|
|
LOGGER.Error(ex.Message)
|
|
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 = "4"
|
|
|
|
' -- 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(_session)
|
|
If _session.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
|
|
' LOGGER.Info(" >> windream-Version: '" & oSession.GetSystemInfo("WindreamVersion") & "'")
|
|
'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
|
|
_session.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
|
|
' der Parameter WMEntityDocument definiert, dass nur Dokumenttypen und keine
|
|
' Ordnertypen ausgelesen werden
|
|
_DocumentTypes = _session.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, "Unexpected error inm 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 _DocumentTypes
|
|
Catch ex As Exception
|
|
MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Auslesen der Objekttypen")
|
|
Return Nothing
|
|
End Try
|
|
End Function
|
|
|
|
|
|
''' <summary>
|
|
''' Liefert alle Indexe eines Objekttypen.
|
|
''' </summary>
|
|
''' <param name="Objecttype_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 = _session.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)
|
|
'Dim o = oRelProperties.Item(2)
|
|
' Indexname speichern
|
|
aIndexNames(j) = oIndex.aName
|
|
Next
|
|
'Indexarray sortiert zurückgeben
|
|
Array.Sort(aIndexNames)
|
|
' Indexarray zurückgeben
|
|
Return aIndexNames
|
|
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error inm Auslesen der windream-Indexe")
|
|
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
|
|
|
|
Return indexnamen.Contains(indexname)
|
|
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, "Unexpected error inm 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 _session.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, "Unexpected error in 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, "Unexpected error inm Auslesen des windream-Servers")
|
|
End Try
|
|
|
|
Return ""
|
|
End Function
|
|
|
|
#End Region
|
|
Public Shared Function Stream_File(ByVal SourceFilePath As String, ByVal NewFileName As String)
|
|
_currentWMObject = Nothing
|
|
|
|
Dim oWindreamFilename As String = NewFileName
|
|
Dim oFileName As String = NewFileName
|
|
Dim oWDriveRegex As New Regex("^\w{1}:")
|
|
|
|
If oWDriveRegex.IsMatch(NewFileName) Then
|
|
oFileName = oWDriveRegex.Replace(NewFileName, vWLaufwerk)
|
|
oWindreamFilename = oWDriveRegex.Replace(NewFileName, String.Empty)
|
|
Else
|
|
oWindreamFilename = NewFileName.Replace(vWLaufwerk, String.Empty)
|
|
End If
|
|
|
|
'If NewFileName.StartsWith("W:") Then
|
|
' oFileName = NewFileName.Replace("W:", vWLaufwerk)
|
|
' oWindreamFilename = NewFileName.Replace("W:", String.Empty)
|
|
'Else
|
|
' oWindreamFilename = NewFileName.Replace(vWLaufwerk, String.Empty)
|
|
'End If
|
|
|
|
Dim oSourceFilename As String = Path.GetFileName(SourceFilePath)
|
|
Dim oDestination As String = Path.GetDirectoryName(oFileName)
|
|
|
|
If My.Computer.FileSystem.DirectoryExists(oDestination) = False Then
|
|
My.Computer.FileSystem.CreateDirectory(oDestination)
|
|
LOGGER.Info(" - Zielverzeichnis neu erzeugt!")
|
|
End If
|
|
|
|
LOGGER.Info(" ...Stream_File wurde gestartet")
|
|
|
|
' Objekt für Datei und Zielverzeichnis anlegen
|
|
|
|
|
|
LOGGER.Info(" ...Quelldatei gelesen")
|
|
|
|
If My.Computer.FileSystem.DirectoryExists(oDestination) Then
|
|
LOGGER.Info(" ...targetPath existiert")
|
|
' Überprüfen ob der zu Kopieren notwendige Speicherplatz auf Ziellaufwerk vorhanden ist
|
|
|
|
Dim oFileInfo As New FileInfo(SourceFilePath)
|
|
Dim oFileLength As Long = oFileInfo.Length
|
|
|
|
|
|
LOGGER.Info(" ...Datei kopieren von '" & SourceFilePath & "' nach '" & NewFileName & "'.")
|
|
Dim Connect
|
|
Dim Session
|
|
Dim WMObject
|
|
Dim aFileIO
|
|
Dim aWMStream
|
|
Dim wmbrwsr
|
|
Dim dmsServer As String
|
|
LOGGER.Info(" ...Connect definieren: CreateObject('Windream.WMConnect')")
|
|
Connect = CreateObject("Windream.WMConnect")
|
|
aFileIO = New WMOTOOLLib.WMFileIO
|
|
|
|
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
|
|
LOGGER.Info(" ...Login ok. You are logged in as '" & Connect.UserName & "' on Server '" & dmsServer)
|
|
'MsgBox("Login ok. You are logged in as '" + Connect.UserName + "' on Server '" + dmsServer + "'")
|
|
Else
|
|
LOGGER.Info(" >> Login on dms-Server failed")
|
|
' MsgBox("Login failed. ")
|
|
End If
|
|
_session = Session
|
|
Const WMCOMEventWMSessionNeedIndex = 1
|
|
|
|
'windream Objekte erstellen ohne Indexierungs-Event
|
|
Session.SwitchEvents(WMCOMEventWMSessionNeedIndex, False)
|
|
'==================================================================
|
|
' check if files exist
|
|
'==================================================================
|
|
LOGGER.Info(" ...ÜBERPRÜFTER DATEINAME => " & oWindreamFilename)
|
|
Dim wdFilexists As Boolean
|
|
LOGGER.Info(" ...Versuch auf die Datei in W: zuzugreifen und zu sperren...")
|
|
wdFilexists = Session.WMObjectExists(WMEntityDocument, oWindreamFilename, 0, 0)
|
|
Err.Clear()
|
|
If wdFilexists = False Then
|
|
LOGGER.Info(" ...Datei ist NICHT vorhanden, kann also einfach neu angelegt werden")
|
|
|
|
'==================================================================
|
|
' create an object
|
|
'==================================================================
|
|
WMObject = Session.GetNewWMObjectFS(WMEntityDocument, oWindreamFilename, WMObjectEditModeObject) 'WMEntityDocument, windreamFilename, WMObjectEditModeObject
|
|
If Err.Number > 0 Then
|
|
LOGGER.Info(" FEHLER: WMObject konnte nicht erzeugt werden - Error: '" & Err.Description & "'")
|
|
'MsgBox(Err.Description)
|
|
End If
|
|
' MsgBox("Created file: " + windreamFilename)
|
|
Else
|
|
' wenn auf die Datei zugeriffen werden konnte ist sie bereits vorhanden -> Datum anhängen
|
|
LOGGER.Info(" ...Es konnte zugegriffen werden -> DATEI IST BEREITS VORHANDEN")
|
|
|
|
|
|
Select Case CURRENT_DOKART_DUPLICATE_HANDLING
|
|
|
|
Case "New version"
|
|
LOGGER.Info("Creating new version of file [{0}]", NewFileName)
|
|
oWindreamFilename = ClassFilehandle.Versionierung_Datei(NewFileName).ToString.Substring(2)
|
|
CURRENT_NEWFILENAME = oWindreamFilename
|
|
Case "Question"
|
|
Dim oMessage = $"Eine Datei mit identischem Namen {vbNewLine}'{NewFileName}'{vbNewLine}existiert bereits!{vbNewLine}Wollen Sie die bestehende Datei ersetzen?"
|
|
If USER_LANGUAGE <> "de-DE" Then
|
|
oMessage = $"There is already a file with the name {NewFileName}!{vbNewLine}Would You like to replace the file?"
|
|
End If
|
|
|
|
Dim oResult = MessageBox.Show(oMessage, "File exists", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
|
|
|
|
If oResult = DialogResult.No Then
|
|
oWindreamFilename = ClassFilehandle.Versionierung_Datei(NewFileName).ToString.Substring(2)
|
|
Else
|
|
If Delete_WDFile(oWindreamFilename) = False Then
|
|
Return False
|
|
End If
|
|
End If
|
|
Case Else
|
|
If Delete_WDFile(oWindreamFilename) = False Then
|
|
Return False
|
|
End If
|
|
End Select
|
|
|
|
WMObject = Session.GetNewWMObjectFS(1, oWindreamFilename, 31) 'WMEntityDocument, windreamFilename, WMObjectEditModeObject
|
|
If Err.Number > 0 Then
|
|
LOGGER.Info(" FEHLER: Neues WMObject (Kopie) konnte nicht erzeugt werden - Error: '" & Err.Description & "'")
|
|
'MsgBox(Err.Description)
|
|
End If
|
|
LOGGER.Info(" ...WMObject zugewiesen")
|
|
End If
|
|
LOGGER.Info(" ...ENDGÜLTIGER DATEINAME => " & oWindreamFilename)
|
|
If WMObject IsNot Nothing Then
|
|
'NewFileName = vWLaufwerk & ":" & oWindreamFilename
|
|
' lock object for file system access (to change the file itself)
|
|
WMObject.lock()
|
|
' set fileIO the local source file
|
|
aFileIO.bstrOriginalFileName = SourceFilePath
|
|
If Err.Number > 0 Then
|
|
LOGGER.Info(" FEHLER: fileIO konnte nicht gesetzt werden - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
|
LOGGER.Info(" HINWEIS: Überprüfen Sie den Verweis auf die Bibliotheken 'WMOTool.WMFileIO' UND 'WMOTOOLLib.WMFileIO' und ändern diese in den Anwendungseinstellungen (DLL_WMOTOOL)'")
|
|
WMObject.Unlock()
|
|
Delete_WDFile(oWindreamFilename)
|
|
|
|
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
|
|
LOGGER.Info(" Unexpected error in OpenStream - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
|
WMObject.Unlock()
|
|
Delete_WDFile(oWindreamFilename)
|
|
Return False
|
|
'MsgBox(Err.Description)
|
|
End If
|
|
LOGGER.Info(" ...oWMStream erzeugt")
|
|
' give fileIO helper object the windream stream
|
|
aFileIO.aWMStream = aWMStream
|
|
If Err.Number > 0 Then
|
|
LOGGER.Info(" Unexpected error in Zuweisen aWMStream zu aFileIO - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
|
WMObject.Unlock()
|
|
Delete_WDFile(oWindreamFilename)
|
|
Return False
|
|
'MsgBox(Err.Description)
|
|
End If
|
|
' let fileIO object import the original file into windream
|
|
aFileIO.ImportOriginal(True)
|
|
If Err.Number > 0 Then
|
|
LOGGER.Info(" Unexpected error in FileIO.ImportOriginal(True) - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
|
WMObject.Unlock()
|
|
Delete_WDFile(oWindreamFilename)
|
|
Return False
|
|
' MsgBox(Err.Description)
|
|
End If
|
|
LOGGER.Info(" ...Inhalt der Datei konnte übertragen werden")
|
|
' close the windream file stream
|
|
aWMStream.Close()
|
|
If Err.Number > 0 Then
|
|
LOGGER.Info(" Unexpected error in aWMStream.Close() - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
|
WMObject.Unlock()
|
|
Delete_WDFile(oWindreamFilename)
|
|
Return False
|
|
'MsgBox(Err.Description)
|
|
End If
|
|
' save new windream object
|
|
WMObject.save()
|
|
If Err.Number > 0 Then
|
|
LOGGER.Info(" Unexpected error in WMObject.save - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
|
WMObject.Unlock()
|
|
Delete_WDFile(oWindreamFilename)
|
|
Return False
|
|
'MsgBox(Err.Description)
|
|
End If
|
|
LOGGER.Info(" ...Datei konnte gespeichert werden")
|
|
' unlock the windream object
|
|
WMObject.unlock()
|
|
If Err.Number > 0 Then
|
|
LOGGER.Info(" Unexpected error in WMObject.unlock - Datei wird wieder gelöscht - Error: '" & Err.Description & "'")
|
|
WMObject.Unlock()
|
|
Delete_WDFile(oWindreamFilename)
|
|
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(oFileName)
|
|
Dim length1 As Long = info2.Length
|
|
LOGGER.Info(" ...Length der Zieldatei: " & length1.ToString)
|
|
If oFileLength > 0 And Err.Number = 0 Then
|
|
|
|
'Dim p As String
|
|
'If oWindreamFilename.StartsWith("\") Then
|
|
' If oWindreamFilename.StartsWith("\\") Then
|
|
' p = oWindreamFilename.Replace("\\", "\")
|
|
' Else
|
|
' p = oWindreamFilename
|
|
' End If
|
|
'Else
|
|
' p = "\" & oWindreamFilename
|
|
'End If
|
|
'CURRENT_NEWFILENAME = vWLaufwerk & ":" & p
|
|
|
|
CURRENT_NEWFILENAME = oFileName
|
|
|
|
LOGGER.Info(" >> Datei '" & CURRENT_NEWFILENAME & "' wurde erfolgreich importiert!")
|
|
_currentWMObject = WMObject
|
|
Return True
|
|
Else
|
|
Delete_WDFile(oWindreamFilename)
|
|
LOGGER.Info("Error Number: [{0}]", Err.Number)
|
|
LOGGER.Info(" Unexpected error in Datei-Übertragen - FileLength ist 0, Übertragene Datei wurde gelöscht")
|
|
Return False
|
|
End If
|
|
Else
|
|
LOGGER.Info(" Could not create a WMObject for file:'" & oWindreamFilename)
|
|
If Not Err() Is Nothing Then
|
|
If Not Err.Description Is Nothing Then
|
|
LOGGER.Info(Err.Description)
|
|
End If
|
|
End If
|
|
Return False
|
|
End If
|
|
Else
|
|
LOGGER.Info("...targetPath existiert NICHT")
|
|
Return False
|
|
End If
|
|
|
|
End Function
|
|
Public Shared Function Delete_WDFile(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
|
|
Try
|
|
WMObject = _session.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File) 'WINDREAMLib.WMEntity.WMEntityDocument
|
|
Catch ex As Exception
|
|
LOGGER.Info(">> Could not create WMObject for file '" & WD_File & "' - so it is not existing")
|
|
LOGGER.Error(ex.Message)
|
|
Return False
|
|
End Try
|
|
|
|
LOGGER.Info(" >> Deleting started - Object created")
|
|
WMObject.Delete()
|
|
Return True
|
|
Catch ex As Exception
|
|
MsgBox("Unexpected Error in Delete_WDFile: " & vbNewLine & ex.Message, MsgBoxStyle.Critical)
|
|
LOGGER.Info("Unexpected Error in Delete_WDFile: " & ex.Message)
|
|
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 DateiIndexieren(ByVal WD_File As String, ByVal _Indexname As String, ByVal _Value As String)
|
|
Try
|
|
|
|
LOGGER.Info(" ...DateiIndexieren wurde aufgerufen")
|
|
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
|
|
LOGGER.Info(" ## Indexieren wird gestartet ##")
|
|
' ein windream-Objekt der Datei anlegen
|
|
WMObject = _currentWMObject 'oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File)
|
|
Try
|
|
LOGGER.Info(" ...Datei wird gesperrt")
|
|
' die Datei sperren
|
|
WMObject.lock()
|
|
Catch ex As Exception
|
|
LOGGER.Info(" ...Datei ist bereits gesperrt")
|
|
' nichts tun (Datei ist bereits gesperrt)
|
|
End Try
|
|
|
|
If IsNothing(WMObject) Then
|
|
LOGGER.Info(" ...Windream Object ist nothing, Indexierung wird abgebrochen")
|
|
Return False
|
|
End If
|
|
|
|
If IsNothing(WMObject.aObjectType) Then
|
|
LOGGER.Info(" ...Kein Objekttyp gesetzt, Indexierung wird abgebrochen")
|
|
Return False
|
|
End If
|
|
|
|
LOGGER.Info($" ...Objekttyp wird gesetzt: " & _WDObjekttyp)
|
|
' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
|
|
If WMObject.aObjectType.aName = "Standard" Then
|
|
|
|
' ihr den entsprechenden Dokumenttyp zuweisen
|
|
WMObject.aObjectType = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp)
|
|
' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
|
|
LOGGER.Info(" ...Objekttyp wurde gesetzt")
|
|
Else
|
|
LOGGER.Info(" ...Objekttyp war bereits gesetzt")
|
|
End If
|
|
|
|
Try
|
|
WMObject.Save()
|
|
Catch ex As Exception
|
|
' wenn es einen Unexpected error inm 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
|
|
LOGGER.Info(" ...Datei wurde gespeichert / Unlock wurde durchgeführt")
|
|
' wenn bis hierher alles geklappt hat wurde ein Dokumenttyp übergeben
|
|
|
|
LOGGER.Info(" ...Objekttyp: " & _WDObjekttyp)
|
|
|
|
|
|
' wenn keine Werte vorhanden sind, soll wenigstens der Dokumenttyp eingetragen werden
|
|
|
|
Dim indexe As String = ""
|
|
|
|
LOGGER.Info(" ...Indexname: '" & _Indexname & "'")
|
|
Dim werte = New ArrayList
|
|
If (GetTypeOfIndexAsIntByName(_Indexname) = WMObjectVariableValueTypeVector) Or GetTypeOfIndexAsIntByName(_Indexname) = 4097 Then
|
|
LOGGER.Info(" ...Es handelt sich um ein Vektor-Feld")
|
|
|
|
|
|
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
|
|
LOGGER.Info(" ...Wert vor Überprüfung: " & _Value)
|
|
_Value = CheckIndexValue(_Value)
|
|
'Ausstieg da Fehler in der Überprüfung
|
|
If _Value Is Nothing Then
|
|
Return False
|
|
End If
|
|
LOGGER.Info(" ...Value für Indexierung: " & _Value)
|
|
werte.Add(_Value)
|
|
|
|
LOGGER.Info(" ...Werte zu Array hinzugefügt!")
|
|
Else
|
|
'Am 04.08.2014 aktualisiert: um zu verhindern das die vorangegangene Versionierung "Tilde-Werte" schreibt
|
|
LOGGER.Info(" ...Value vor Überprüfung: " & _Value)
|
|
_Value = CheckIndexValue(_Value)
|
|
'Ausstieg da Fehler in der Überprüfung
|
|
If _Value Is Nothing Then
|
|
Return False
|
|
End If
|
|
LOGGER.Info(" ...Value für Indexierung: " & _Value)
|
|
werte.Add(_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)
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Info("Hinweis: Die Datei " & WD_File & " konnte nicht indexiert werden.")
|
|
LOGGER.Error(ex.Message)
|
|
LOGGER.Info("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
|
|
LOGGER.Info(" ...Indexwert ist leer/Nothing - Keine Nachindexierung")
|
|
End If
|
|
' wenn der Datei noch kein Dokumenttyp zugewiesen wurde
|
|
If oDocument.aObjectType.aName <> _WDObjekttyp Then
|
|
' ihr den entsprechenden Dokumenttyp zuweisen
|
|
oDocument.aObjectType = _session.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityObjectType, _WDObjekttyp)
|
|
' WMObject.aObjectType = Me.selectedProfile.Dokumenttyp
|
|
LOGGER.Info(" ...Objekttyp '" & oDocument.aObjectType.aName & "' wurde in '" & _WDObjekttyp & "' geändert.")
|
|
Else
|
|
LOGGER.Info(" ...Objekttyp war bereits gesetzt")
|
|
End If
|
|
|
|
Try
|
|
oDocument.Save()
|
|
Catch ex As Exception
|
|
' wenn es einen Unexpected error inm 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
|
|
LOGGER.Info(" ")
|
|
LOGGER.Info(" >> Indexierung von Index '" & indexname & "'")
|
|
End If
|
|
' das entsprechende Attribut aus windream auslesen
|
|
Dim oAttribute = _session.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
|
|
LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeString")
|
|
convertValue = CStr(value)
|
|
Case WMObjectVariableValueTypeInteger
|
|
LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeInteger")
|
|
value = value.ToString.Replace(" ", "")
|
|
If IsNumeric(value) = False Then
|
|
LOGGER.Info(" ...Achtung: Value '" & value & "' kann nicht in Zahl konvertiert werden!")
|
|
End If
|
|
value = value.ToString.Replace(" ", "")
|
|
convertValue = CInt(value)
|
|
_int = True
|
|
Case WMObjectVariableValueTypeFloat
|
|
LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFloat")
|
|
value = value.ToString.Replace(" ", "")
|
|
convertValue = CDbl(value)
|
|
Case WMObjectVariableValueTypeFixedPoint
|
|
LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFixedPoint")
|
|
value = value.ToString.Replace(" ", "")
|
|
convertValue = CDbl(value)
|
|
_dbl = True
|
|
Case WMObjectVariableValueTypeBoolean
|
|
LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeBoolean")
|
|
convertValue = CBool(value)
|
|
_bool = True
|
|
Case WMObjectVariableValueTypeDate
|
|
LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeDate")
|
|
_date = True
|
|
'Dim _date As Date = value
|
|
convertValue = value
|
|
Case WMObjectVariableValueTypeTimeStamp
|
|
LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeTimeStamp")
|
|
convertValue = value
|
|
Case WMObjectVariableValueTypeCurrency
|
|
LOGGER.Info(" - Typ des windream-Indexes: 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
|
|
LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeTime")
|
|
'If ((value)) Then
|
|
' convertValue = CDate(value)
|
|
'Else
|
|
' convertValue = ""
|
|
'End If
|
|
'Dim _date As Date = value
|
|
convertValue = convertValue '*_date.ToShortTimeString
|
|
Case WMObjectVariableValueTypeFloat
|
|
LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFloat")
|
|
convertValue = CStr(value)
|
|
Case WMObjectVariableValueTypeVariant
|
|
LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeVariant")
|
|
convertValue = CStr(value)
|
|
Case WMObjectVariableValueTypeFulltext
|
|
LOGGER.Info(" ...Typ des windream-Indexes: WMObjectVariableValueTypeFulltext")
|
|
convertValue = CStr(value)
|
|
Case 4097
|
|
vektor = True
|
|
LOGGER.Info(" ...Typ des windream-Indexes: 4097 Vektor alphanumerisch")
|
|
'Vektor alphanumerisch
|
|
convertValue = CStr(value)
|
|
Case 4098
|
|
vektor = True
|
|
LOGGER.Info(" ...Typ des windream-Indexes: 4098 Vektor Numerisch")
|
|
'Vektor Numerisch
|
|
convertValue = CStr(value)
|
|
Case 4099
|
|
vektor = True
|
|
LOGGER.Info(" ...Typ des windream-Indexes: 4099 Vektor Kommazahl")
|
|
'Vektor Kommazahl
|
|
convertValue = CStr(value)
|
|
Case 4100
|
|
vektor = True
|
|
LOGGER.Info(" ...Typ des windream-Indexes: 4100 Vektor Boolean")
|
|
'Vektor Kommazahl
|
|
convertValue = ToBoolean(value)
|
|
Case 4101
|
|
vektor = True
|
|
LOGGER.Info(" ...Typ des windream-Indexes: 4101 Vektor Date")
|
|
'Vektor Kommazahl
|
|
convertValue = CStr(value)
|
|
Case 4103
|
|
vektor = True
|
|
LOGGER.Info(" ...Typ des windream-Indexes: 4103 Vektor DateTime")
|
|
'Vektor DateTime
|
|
convertValue = CStr(value)
|
|
Case 4107
|
|
vektor = True
|
|
LOGGER.Info(" ...Typ des windream-Indexes: 4107 Integer 64bit")
|
|
convertValue = CStr(value)
|
|
Case 36865
|
|
vektor = True
|
|
LOGGER.Info(" ...Typ des windream-Indexes: 36865 Vektor alphanumerisch")
|
|
'Vektor Kommazahl
|
|
convertValue = CStr(value)
|
|
Case Else
|
|
LOGGER.Info(" ...Typ des windream-Indexes konnte nicht bestimmt werden!")
|
|
LOGGER.Info(" ...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
|
|
LOGGER.Info(" ...Konvertierter Wert: '" & convertValue.ToString & "'")
|
|
End If
|
|
End If
|
|
'############################################################################################
|
|
'####################### Der eigentliche Indexierungsvorgang ################################
|
|
'############################################################################################
|
|
If vektor = False Then
|
|
If convertValue.ToString Is Nothing = False Then
|
|
LOGGER.Info(" ...Versuch dem Dok einen Index zuzuweisen: 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()
|
|
|
|
If LogErrorsOnly = False Then
|
|
LOGGER.Info(" ...Index '" & aName & "' wurde geschrieben")
|
|
LOGGER.Info("")
|
|
End If
|
|
Else
|
|
LOGGER.Info(" >> Kein Indexwert vorhanden")
|
|
End If
|
|
Else
|
|
'VEKTORFELDER, ALSO ÜBERPRÜFEN OB ERGEBNIS-ARRAY GEFÜLLT IST
|
|
LOGGER.Info(" >> VEKTORFELD: Vorbereiten des Arrays")
|
|
|
|
Dim myArray()
|
|
|
|
|
|
|
|
'For Each row As DataRow In DT.Rows
|
|
'MsgBox(aName & vbNewLine & row.Item("Indexname") & vbNewLine & CStr(row.Item("Wert")))
|
|
'Next
|
|
Dim Anzahl As Integer = aValues.Length
|
|
'Vektorfeld wird mit EINEM Wert gefüllt
|
|
If Anzahl = 1 Then
|
|
LOGGER.Info(" >> Vektorfeld wird mit EINEM Wert gefüllt ")
|
|
ReDim myArray(0)
|
|
Select Case vType
|
|
Case 36865
|
|
'Umwandeln in String
|
|
myArray(0) = CStr(value)
|
|
Case 4097
|
|
'Umwandeln in String
|
|
myArray(0) = CStr(value)
|
|
Case 4098
|
|
'Umwandeln in Integer
|
|
value = value.ToString.Replace(" ", "")
|
|
myArray(0) = CInt(value)
|
|
Case 4099
|
|
Dim Str As String = value
|
|
Str = Str.ToString.Replace(" ", "")
|
|
'Umwandeln in Double
|
|
myArray(0) = CDbl(Str.Replace(".", ","))
|
|
|
|
Case 4100
|
|
' Umwandeln in Boolean
|
|
myArray(0) = ToBoolean(value)
|
|
Case 4101
|
|
'Umwandeln in Date
|
|
myArray(0) = CDate(value)
|
|
Case 4107
|
|
myArray(0) = Convert.ToInt64(value)
|
|
Case 4103
|
|
'Umwandeln in Datum Uhrzeit
|
|
myArray(0) = value
|
|
Case Else
|
|
'Umwandeln in String
|
|
myArray(0) = CStr(value)
|
|
End Select
|
|
|
|
'Jetzt überprüfen ob Werte in Vektorfeld angefügt oder überschrieben werden sollen
|
|
LOGGER.Info(" >> Konvertierter Wert: " & myArray(0).ToString)
|
|
|
|
Dim VektorArray()
|
|
|
|
'Immer anfügen
|
|
LOGGER.Info(" >> Check Existing Vektorvalues")
|
|
|
|
Dim indicies As New List(Of Object)
|
|
|
|
For Each element In myArray
|
|
If TypeOf element Is String Then
|
|
Dim splitted = element.ToString.Split(ClassConstants.VECTORSEPARATOR)
|
|
For Each s In splitted
|
|
indicies.Add(s)
|
|
Next
|
|
Else
|
|
indicies.Add(element)
|
|
End If
|
|
Next
|
|
|
|
myArray = indicies.ToArray()
|
|
|
|
VektorArray = Return_VektorArray(oDocument, aName, myArray)
|
|
|
|
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)
|
|
'myArray)
|
|
LOGGER.Info(" >> 'SetVariableValue' für VEKTOR mit einem Wert erfolgreich")
|
|
|
|
'Die Änderungen festsschreiben/speichern
|
|
oDocument.Save()
|
|
|
|
End If
|
|
Else
|
|
LOGGER.Info(" >> Vektorfeld wird mit MEHREREN Werten gefüllt ")
|
|
' das ausgewählte Profil in _selectedProfile laden
|
|
|
|
|
|
'Die Größe des Arrays festlegen
|
|
ReDim myArray(Anzahl - 1)
|
|
Dim i1 As Integer = 0
|
|
'Die Datatable durchlaufen und Werte für den Index in Array schreiben
|
|
For Each obj In myArray
|
|
myArray(i1) = CStr(obj)
|
|
LOGGER.Info(" >> Wert (" & i1 & ") aus Datatable: '" & myArray(i1).ToString & "'")
|
|
i1 = i1 + 1
|
|
Next
|
|
LOGGER.Info(" >> Array wurde erfolgreich erzeugt")
|
|
|
|
|
|
Dim VektorArray()
|
|
|
|
VektorArray = Return_VektorArray(oDocument, aName, myArray)
|
|
|
|
If VektorArray Is Nothing = False Then
|
|
'Das Array wieder anpassen
|
|
ReDim myArray(VektorArray.Length - 1)
|
|
'Array.Copy(VektorArray, myArray, VektorArray.Length)
|
|
i1 = 0
|
|
For Each _value As Object In VektorArray
|
|
Select Case vType
|
|
Case 36865
|
|
myArray(i1) = CStr(_value)
|
|
Case 4097
|
|
myArray(i1) = CStr(_value)
|
|
Case 4098
|
|
Dim v As String = _value.ToString.Replace(" ", "")
|
|
myArray(i1) = CInt(v)
|
|
Case 4099
|
|
'Vektroryp Double
|
|
Dim Str As String = _value
|
|
Str = Str.ToString.Replace(" ", "")
|
|
myArray(i1) = CDbl(Str.Replace(".", ","))
|
|
Case 4101
|
|
'Vektortyp DATE
|
|
Dim dat As String = _value
|
|
myArray(i1) = CDate(dat.Replace(".", ","))
|
|
Case 4107
|
|
myArray(i1) = Convert.ToInt64(_value)
|
|
Case Else
|
|
'Vektortyp ALPHANUMERISCH
|
|
'Die Größe des Arrays festlegen
|
|
myArray(i1) = CStr(myArray(0))
|
|
End Select
|
|
LOGGER.Info(" >> Konvertierter Wert (" & i1 & ") : '" & myArray(i1).ToString & "'")
|
|
i1 += 1
|
|
Next
|
|
'Jetzt die Nachindexierung für Vektor-Felder
|
|
Try
|
|
oDocument.SetVariableValue(aName, myArray)
|
|
Catch ex As Exception
|
|
LOGGER.Info("RunIndexing -Unexpected error in indexing Vectorfield: " & ex.Message)
|
|
LOGGER.Error(ex.Message)
|
|
oDocument.Save()
|
|
oDocument.unlock()
|
|
Return False
|
|
End Try
|
|
|
|
LOGGER.Info(" >> 'SetVariableValue' für VEKTOR erfolgreich")
|
|
|
|
' oDocument.LockRights()
|
|
|
|
'Die Änderungen festsschreiben/speichern
|
|
oDocument.Save()
|
|
LOGGER.Info(">> Indexierung erfolgreich beendet (Save ...")
|
|
Else
|
|
LOGGER.Info(" - Achtung: VektorArray Is NOTHING")
|
|
oDocument.Save()
|
|
Return True
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
i += 1
|
|
|
|
Next
|
|
oDocument.unlock()
|
|
If LogErrorsOnly = False Then
|
|
LOGGER.Info(">> ...und Unlock durchgeführt)")
|
|
LOGGER.Info("")
|
|
End If
|
|
Return True
|
|
Else
|
|
LOGGER.Info(" >> Dokument ist gesperrt, Indexierung erst im nächsten Durchlauf!")
|
|
'oDocument.unlock()
|
|
Return False
|
|
End If
|
|
End If
|
|
Catch ex As Exception
|
|
LOGGER.Info("ClassNiWindream.RunIndexing: " & ex.Message)
|
|
LOGGER.Error(ex.Message)
|
|
oDocument.Save()
|
|
oDocument.unlock()
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Private Shared Function Return_VektorArray(ByVal oDocument As WMObject, vktIndexName As String, NIIndexe 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
|
|
'Keine Duplikatprüfung also einfach neues Array füllen
|
|
LOGGER.Info(" >> Duplikatprüfung soll durchgeführt werden.")
|
|
'Duplikat Prüfung an, also nur anhängen wenn Wert <>
|
|
For Each WDValue As Object In wertWD
|
|
If WDValue Is Nothing = False Then
|
|
'Erst einmal die ALten Werte schreiben
|
|
ReDim Preserve ValueArray(Anzahl)
|
|
'Den Wert im Array speichern
|
|
ValueArray(Anzahl) = WDValue.ToString
|
|
Anzahl += 1
|
|
End If
|
|
Next
|
|
'Jetzt die Neuen Werte auf Duplikate überprüfen
|
|
For Each NewValue As Object In NIIndexe
|
|
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) = NewValue.ToString
|
|
Anzahl += 1
|
|
Else
|
|
LOGGER.Info(" >> Value '" & NewValue.ToString & "' bereits in Vektorfeld enthalten")
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
End If
|
|
Else
|
|
LOGGER.Info(" >> Vektorfeld ist noch leer....")
|
|
'Den/die Neuen Wert(e) anfügen
|
|
For Each NewValue As Object In NIIndexe
|
|
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) = NewValue '.ToString
|
|
Anzahl += 1
|
|
Else
|
|
LOGGER.Info(" >> Value '" & NewValue.ToString & "' bereits in Array enthalten")
|
|
End If
|
|
Else 'Dererste Wert, also hinzufügen
|
|
'Das Array anpassen
|
|
ReDim Preserve ValueArray(Anzahl)
|
|
'Den Wert im Array speichern
|
|
ValueArray(Anzahl) = NewValue '.ToString
|
|
Anzahl += 1
|
|
|
|
End If
|
|
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
Return ValueArray
|
|
Catch ex As Exception
|
|
LOGGER.Info("Unexpected Error in ClassWindream.Return_VektorArray: " & ex.Message)
|
|
LOGGER.Error(ex.Message)
|
|
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">
|
|
''' 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>
|
|
Public Shared Function Indexiere(ByVal filenameZiel As String, ByVal index As String, ByVal werte As Object) As Boolean
|
|
LOGGER.Info(" - 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
|
|
LOGGER.Info("=> 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(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
|
|
LOGGER.Info(" Achtung: Datei exisitiert noch nicht: " & My.Computer.Clock.LocalTime)
|
|
End If
|
|
an = an + 1
|
|
Loop
|
|
' wenn die Datei existiert
|
|
If fileExists Then
|
|
WMObject = _session.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 = _session.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, filenameZiel)
|
|
If LogErrorsOnly = False Then
|
|
LOGGER.Info(" - windream-Objekt der Datei erzeugt")
|
|
LOGGER.Info(" - Ziel: W:\" & filenameZiel)
|
|
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 = _session.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
|
|
LOGGER.Info(" - Bei dem Zielindex handelt es sich um einen Einzelindex.")
|
|
Else
|
|
LOGGER.Info(" 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
|
|
LOGGER.Info(" - Array geleert und erneuert!")
|
|
End If
|
|
Catch ex As Exception
|
|
LOGGER.Info("Hinweis: Beim Initialisieren der Datei auf dem windream-Laufwerk ist ein Fehler aufgetreten.")
|
|
LOGGER.Error(ex.Message)
|
|
Return False
|
|
End Try
|
|
|
|
|
|
'Try
|
|
' den Typ des Zielindexes
|
|
LOGGER.Info(" - 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
|
|
' LOGGER.Info(" - 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
|
|
LOGGER.Info("- Es handelt sich um einen Vektorindex")
|
|
'Dim temp_arr As New ArrayList
|
|
|
|
Dim arrayIndex = 0
|
|
Dim temp_arr As Object
|
|
Dim arrayLength As Integer = 0
|
|
For Each element In werte
|
|
arrayLength = arrayLength + 1
|
|
Next
|
|
|
|
ReDim temp_arr(arrayLength - 1)
|
|
|
|
Select Case (TypDesIndexes - WMObjectVariableValueTypeVector)
|
|
'VektorIndex vom Typ String 64'
|
|
Case 1
|
|
LOGGER.Info("- 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(arrayIndex) = CStr(wert)
|
|
LOGGER.Info("- Führende Nullen wurden entfernt")
|
|
Else
|
|
temp_arr(arrayIndex) = CStr(wert)
|
|
|
|
End If
|
|
|
|
arrayIndex = arrayIndex + 1
|
|
|
|
LOGGER.Info("- Wert " & CStr(wert) & " konvertiert")
|
|
Next
|
|
Case WMObjectVariableValueTypeUndefined
|
|
' convertValue = ""
|
|
|
|
Case WMObjectVariableValueTypeString
|
|
LOGGER.Info("- 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(arrayIndex) = CStr(wert)
|
|
LOGGER.Info("- Führende Nullen wurden entfernt")
|
|
Else
|
|
temp_arr(arrayIndex) = CStr(wert)
|
|
End If
|
|
|
|
arrayIndex = arrayIndex + 1
|
|
|
|
LOGGER.Info("- Wert " & CStr(wert) & " konvertiert")
|
|
Next
|
|
|
|
Case WMObjectVariableValueTypeInteger
|
|
LOGGER.Info("- VektorIndex vom Typ Integer")
|
|
For Each wert As Object In werte
|
|
temp_arr(arrayIndex) = CInt(wert)
|
|
arrayIndex = arrayIndex + 1
|
|
Next
|
|
|
|
Case WMObjectVariableValueTypeFloat
|
|
For Each wert As Object In werte
|
|
wert = wert.ToString.Replace(".", ",")
|
|
temp_arr(arrayIndex) = CDbl(wert)
|
|
arrayIndex = arrayIndex + 1
|
|
Next
|
|
|
|
Case WMObjectVariableValueTypeBoolean
|
|
For Each wert As Object In werte
|
|
Try
|
|
temp_arr(arrayIndex) = CBool(wert)
|
|
Catch ex As Exception
|
|
' Nothing zuweisen damit SetVariableValue nicht ausgeführt wird
|
|
temp_arr = Nothing
|
|
End Try
|
|
arrayIndex = arrayIndex + 1
|
|
Next
|
|
|
|
Case WMObjectVariableValueTypeDate
|
|
For Each wert As Object In werte
|
|
'wert =
|
|
temp_arr(arrayIndex) = CDate(wert)
|
|
arrayIndex = arrayIndex + 1
|
|
Next
|
|
|
|
Case WMObjectVariableValueTypeFixedPoint
|
|
For Each wert As Object In werte
|
|
temp_arr(arrayIndex) = CDbl(wert)
|
|
arrayIndex = arrayIndex + 1
|
|
Next
|
|
|
|
Case WMObjectVariableValueTypeTimeStamp
|
|
For Each wert As Object In werte
|
|
temp_arr(arrayIndex) = CInt(wert)
|
|
arrayIndex = arrayIndex + 1
|
|
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(arrayIndex) = aValue
|
|
arrayIndex = arrayIndex + 1
|
|
Next
|
|
|
|
Case WMObjectVariableValueTypeTime
|
|
For Each wert As Object In werte
|
|
temp_arr(arrayIndex) = CDate(wert)
|
|
arrayIndex = arrayIndex + 1
|
|
Next
|
|
|
|
Case WMObjectVariableValueTypeVariant
|
|
' dann bleiben alle Werte wie sie sind
|
|
|
|
End Select
|
|
|
|
werte = temp_arr
|
|
|
|
LOGGER.Info("- 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
|
|
' LOGGER.Info("Unexpected error in 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
|
|
LOGGER.Info(" - den konvertierten Indexwert dem entsprechenden Index zuweisen")
|
|
LOGGER.Info(" - Indexname: " & index.ToString)
|
|
LOGGER.Info(" - Indexwert: " & werte.ToString)
|
|
End If
|
|
'End If
|
|
|
|
' die Indexinformationen des Dokuments speichern
|
|
WMObject.Save()
|
|
LOGGER.Info(" - 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()
|
|
LOGGER.Info(" - 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
|
|
' die Indexierungsinformationen für den TreeView-Log zurückgeben
|
|
LOGGER.Info(" Hinweis: Die Datei hat zum Zeitpunkt der Indexierung noch nicht auf dem windream-Laufwerk existiert.")
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Info(" Hinweis: Unbekannter Unexpected error inm Indexieren der Datei.")
|
|
LOGGER.Error(ex.Message)
|
|
LOGGER.Info(ex.Message)
|
|
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 = _session.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
|
|
LOGGER.Info("Fehler in CheckIndexValue: " & ex.Message)
|
|
LOGGER.Error(ex.Message)
|
|
Return Nothing
|
|
End Try
|
|
|
|
End Function
|
|
|
|
Private Shared Function ToBoolean(input As String) As Boolean
|
|
If String.IsNullOrEmpty(input) Then Return False
|
|
Return (input.Trim().ToLower() = "true") OrElse (input.Trim() = "1")
|
|
End Function
|
|
|
|
End Class
|