diff --git a/app/ZSG_Import/App.config b/app/ZSG_Import/App.config
index 9c05822..3d6db96 100644
--- a/app/ZSG_Import/App.config
+++ b/app/ZSG_Import/App.config
@@ -1,6 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+ ZSG-Geschäftsprozess
+
+
+ sdsd
+
+
+ vktRecordID
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/ZSG_Import/CURRENT.vb b/app/ZSG_Import/CURRENT.vb
new file mode 100644
index 0000000..5902eff
--- /dev/null
+++ b/app/ZSG_Import/CURRENT.vb
@@ -0,0 +1,4 @@
+Module CURRENT
+ Public LOG_ERRORS_ONLY As Boolean = True
+ Public CURRENT_FILEIN_WD As String
+End Module
diff --git a/app/ZSG_Import/My Project/Settings.Designer.vb b/app/ZSG_Import/My Project/Settings.Designer.vb
index 82f5043..af85c0a 100644
--- a/app/ZSG_Import/My Project/Settings.Designer.vb
+++ b/app/ZSG_Import/My Project/Settings.Designer.vb
@@ -1,10 +1,10 @@
'------------------------------------------------------------------------------
'
-' This code was generated by a tool.
-' Runtime Version:4.0.30319.34209
+' Dieser Code wurde von einem Tool generiert.
+' Laufzeitversion:4.0.30319.34209
'
-' Changes to this file may cause incorrect behavior and will be lost if
-' the code is regenerated.
+' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
+' der Code erneut generiert wird.
'
'------------------------------------------------------------------------------
@@ -13,46 +13,129 @@ Option Explicit On
Namespace My
-
- _
+
+ _
Partial Friend NotInheritable Class MySettings
Inherits Global.System.Configuration.ApplicationSettingsBase
-
- Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
-
-#Region "My.Settings Auto-Save Functionality"
+
+ Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings)
+
+#Region "Funktion zum automatischen Speichern von My.Settings"
#If _MyType = "WindowsForms" Then
- Private Shared addedHandler As Boolean
+ Private Shared addedHandler As Boolean
- Private Shared addedHandlerLockObject As New Object
+ Private Shared addedHandlerLockObject As New Object
- _
- Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
- If My.Application.SaveMySettingsOnExit Then
- My.Settings.Save()
- End If
- End Sub
+ _
+ Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
+ If My.Application.SaveMySettingsOnExit Then
+ My.Settings.Save()
+ End If
+ End Sub
#End If
#End Region
-
+
Public Shared ReadOnly Property [Default]() As MySettings
Get
-
+
#If _MyType = "WindowsForms" Then
- If Not addedHandler Then
- SyncLock addedHandlerLockObject
- If Not addedHandler Then
- AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
- addedHandler = True
- End If
- End SyncLock
- End If
+ If Not addedHandler Then
+ SyncLock addedHandlerLockObject
+ If Not addedHandler Then
+ AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
+ addedHandler = True
+ End If
+ End SyncLock
+ End If
#End If
Return defaultInstance
End Get
End Property
+
+ _
+ Public ReadOnly Property MyConnectionString() As String
+ Get
+ Return CType(Me("MyConnectionString"),String)
+ End Get
+ End Property
+
+ _
+ Public ReadOnly Property LOG_ERRORS_ONLY() As Boolean
+ Get
+ Return CType(Me("LOG_ERRORS_ONLY"),Boolean)
+ End Get
+ End Property
+
+ _
+ Public ReadOnly Property OBJEKTTYP() As String
+ Get
+ Return CType(Me("OBJEKTTYP"),String)
+ End Get
+ End Property
+
+ _
+ Public ReadOnly Property IDX_Doctype() As String
+ Get
+ Return CType(Me("IDX_Doctype"),String)
+ End Get
+ End Property
+
+ _
+ Public ReadOnly Property IDX_RECORD_ID() As String
+ Get
+ Return CType(Me("IDX_RECORD_ID"),String)
+ End Get
+ End Property
+
+ _
+ Public ReadOnly Property AD_DOMAIN() As String
+ Get
+ Return CType(Me("AD_DOMAIN"),String)
+ End Get
+ End Property
+
+ _
+ Public ReadOnly Property AD_SERVER() As String
+ Get
+ Return CType(Me("AD_SERVER"),String)
+ End Get
+ End Property
+
+ _
+ Public ReadOnly Property AD_USER() As String
+ Get
+ Return CType(Me("AD_USER"),String)
+ End Get
+ End Property
+
+ _
+ Public ReadOnly Property AD_USER_PW() As String
+ Get
+ Return CType(Me("AD_USER_PW"),String)
+ End Get
+ End Property
End Class
End Namespace
diff --git a/app/ZSG_Import/My Project/Settings.settings b/app/ZSG_Import/My Project/Settings.settings
index 85b890b..b7956ad 100644
--- a/app/ZSG_Import/My Project/Settings.settings
+++ b/app/ZSG_Import/My Project/Settings.settings
@@ -1,7 +1,37 @@
-
-
-
-
-
-
+
+
+
+
+ <?xml version="1.0" encoding="utf-16"?>
+<SerializableConnectionString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <ConnectionString>Data Source=172.24.12.41\tests;Initial Catalog=DD_ECM_RENOLIT;User ID=sa;Password=dd</ConnectionString>
+</SerializableConnectionString>
+ Data Source=172.24.12.41\tests;Initial Catalog=DD_ECM_RENOLIT;User ID=sa;Password=dd
+
+
+ True
+
+
+ ZSG-Geschäftsprozess
+
+
+ sdsd
+
+
+ vktRecordID
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/ZSG_Import/Service1.Designer.vb b/app/ZSG_Import/MyService.Designer.vb
similarity index 97%
rename from app/ZSG_Import/Service1.Designer.vb
rename to app/ZSG_Import/MyService.Designer.vb
index 1ca347f..c8ed9f7 100644
--- a/app/ZSG_Import/Service1.Designer.vb
+++ b/app/ZSG_Import/MyService.Designer.vb
@@ -1,7 +1,7 @@
Imports System.ServiceProcess
_
-Partial Class Service1
+Partial Class MyService
Inherits System.ServiceProcess.ServiceBase
'UserService überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
@@ -28,7 +28,7 @@ Partial Class Service1
'
' ServicesToRun = New System.ServiceProcess.ServiceBase () {New Service1, New MySecondUserService}
'
- ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1}
+ ServicesToRun = New System.ServiceProcess.ServiceBase() {New MyService}
System.ServiceProcess.ServiceBase.Run(ServicesToRun)
End Sub
diff --git a/app/ZSG_Import/MyService.vb b/app/ZSG_Import/MyService.vb
new file mode 100644
index 0000000..e088ab6
--- /dev/null
+++ b/app/ZSG_Import/MyService.vb
@@ -0,0 +1,139 @@
+Imports System.ComponentModel
+Imports System.IO
+
+Public Class MyService
+ 'Variablen
+ Public Shared threadRunner As BackgroundWorker
+ Protected Overrides Sub OnStart(ByVal args() As String)
+ ' Code zum Starten des Dienstes hier einfügen. Diese Methode sollte Vorgänge
+ ' ausführen, damit der Dienst gestartet werden kann.
+ ' Code zum Starten des Dienstes hier einfügen. Diese Methode sollte Vorgänge
+ ' ausführen, damit der Dienst gestartet werden kann.
+ Try
+ clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "")
+ clsLogger.Add("## ZSGImport Service started - " & Now & " ## ", False)
+
+ If My.Settings.MyConnectionString = String.Empty Then
+ clsLogger.Add("NO CONNECTIONSTRING CONFIGURED.", True)
+ Else
+ If clsDatabase.Init = False Then
+ clsLogger.Add("ATTENTION: No Connection was established '" & My.Settings.MyConnectionString & "'!", True)
+ Else
+ LOG_ERRORS_ONLY = My.Settings.LOG_ERRORS_ONLY
+
+ '### Thread für das nachträgliche Setzen von Rechten generieren
+ MyService.threadRunner = New BackgroundWorker()
+ MyService.threadRunner.WorkerReportsProgress = True
+ MyService.threadRunner.WorkerSupportsCancellation = True
+ AddHandler threadRunner.DoWork, AddressOf RUN_THREAD
+ AddHandler threadRunner.RunWorkerCompleted, AddressOf Thread1_Completed
+
+ ' Und den Durchlauf das erste Mal starten
+ threadRunner.RunWorkerAsync()
+ End If
+ End If
+ clsLogger.WriteLog()
+ Catch ex As Exception
+ clsLogger.AddError(ex.Message, "OnStart")
+ clsLogger.WriteLog()
+ End Try
+ End Sub
+ Public Shared Sub RUN_THREAD(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
+ Try
+ 'erst einmal die Technischen Plätze bestimmen die noch nciht importiert wurden
+ Dim DT_TP As DataTable = clsDatabase.Return_Datatable("SELECT DISTINCT [UNIQUE_STR] FROM [EXPORT_COMOS] where dokumentart is not null and imported = 0 and [UNIQUE_STR] LIKE '472%' order by [UNIQUE_STR]")
+ Try
+ If Not IsNothing(DT_TP) Then
+ If DT_TP.Rows.Count > 0 Then
+ clsLogger.Add(String.Format(">> {0} TPs need to be worked - {1}", DT_TP.Rows.Count.ToString, Now), False)
+ 'Jeden Technischen Platz einzeln durchlaufen weil für diesen ein Record existiert
+ For Each TP As DataRow In DT_TP.Rows
+ Dim _TP As String = TP.Item(0)
+ clsLogger.AddDetailLog(String.Format(">> Working on technical place: '{0}'", _TP))
+ Dim selrecid = String.Format("SELECT [Record-ID] FROM VWTEMP_PMO_FORM3 where UPPER(TPLNR) = UPPER('{0}')", _TP)
+ Dim _RECORD_ID = clsDatabase.Execute_Scalar(selrecid)
+ If Not IsNothing(_RECORD_ID) Then
+ 'Jede Datei einzeln durchlaufen
+ Dim sel = String.Format("SELECT * FROM [EXPORT_COMOS] WHERE IMPORTED = 0 AND [UNIQUE_STR] = '{0}'", TP.Item("UNIQUE_STR"))
+ Dim DT_TP_DOCS As DataTable = clsDatabase.Return_Datatable(sel)
+ If Not IsNothing(DT_TP_DOCS) Then
+ If DT_TP_DOCS.Rows.Count > 0 Then
+ For Each _docRow As DataRow In DT_TP_DOCS.Rows
+ Dim GUID = _docRow.Item("GUID")
+ Dim filename = _docRow.Item("Link")
+ If File.Exists(filename) Then
+
+ Else
+ clsLogger.Add(String.Format(">> File not found: {0}", filename), False)
+ Update_COMMENT_GUID(GUID, "FILE NOT FOUND")
+ End If
+
+ Next
+ End If
+ End If
+ Else
+ clsLogger.Add(String.Format(">> No Record found for TP: {0}", _TP), False)
+ Update_COMMENT(_TP, "NO RECORD-ID FOUND")
+ End If
+
+ Next
+
+
+ 'DD_Rights.clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "")
+ 'If DD_Rights.ClassRights.Init_Service(LOG_ERRORS_ONLY, DT_RIGHTS_2b_WORKED.Rows.Count) Then
+ ' If DD_Rights.ClassRights.WORK_RIGHT2B_CHANGED(DT_RIGHTS_2b_WORKED) = True Then
+ ' clsLogger.Add(">> All rights were worked - " & Now, False)
+ ' End If
+ 'End If
+ End If
+ End If
+
+ Catch ex As Exception
+ clsLogger.AddError("Uncexpected Error in working rights: " & ex.Message, "DT_RIGHTS_2b_WORKED")
+ End Try
+
+ clsLogger.WriteLog()
+ Catch ex As Exception
+ clsLogger.AddError("Uncexpected Error: " & ex.Message, "RUN_THREAD")
+ End Try
+ End Sub
+ Private Shared Sub Update_COMMENT(UNIQUE_STR As String, comment As String)
+ Try
+ Dim upd = String.Format("UPDATE EXPORT_COMOS_472 SET COMMENT = '{0}' where UPPER(UNIQUE_STR) = UPPER('{1}') AND IMPORTED = 0")
+ clsDatabase.Execute_non_Query(upd)
+ Catch ex As Exception
+ clsLogger.AddError("Uncexpected Error in Update_COMMENT: " & ex.Message)
+ End Try
+ End Sub
+ Private Shared Sub Update_COMMENT_GUID(GUID As Integer, comment As String)
+ Try
+ Dim upd = String.Format("UPDATE EXPORT_COMOS_472 SET COMMENT = '{0}' where GUID = {1}")
+ clsDatabase.Execute_non_Query(upd)
+ Catch ex As Exception
+ clsLogger.AddError("Uncexpected Error in Update_COMMENT_GUID: " & ex.Message)
+ End Try
+ End Sub
+ Protected Overrides Sub OnStop()
+ ' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen.
+
+ clsLogger.Add("## ZSGImport Service was stopped manually - " & Now & " ## ", False)
+ clsLogger.WriteLog()
+ End Sub
+ Private Shared Sub Thread1_Completed(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) 'Handles threadDateiimport.RunWorkerCompleted
+ ' This event fires when the DoWork event completes
+ Try
+ Dim result As String = ""
+ If e.Cancelled Then
+ clsLogger.Add("## The thread was cancelled", False)
+ clsLogger.WriteLog()
+ ElseIf e.Error IsNot Nothing Then
+ clsLogger.Add("Fehler bei Durchlauf. Der Vorgang wird abgebrochen.", True, "Thread_Completed")
+ clsLogger.Add(e.Error.Message, True, "Thread_Completed")
+ clsLogger.WriteLog()
+ End If
+ Catch ex As Exception
+ clsLogger.AddError(ex.Message, "Thread_Completed")
+ End Try
+ End Sub
+
+End Class
diff --git a/app/ZSG_Import/Service1.vb b/app/ZSG_Import/Service1.vb
deleted file mode 100644
index 4139d95..0000000
--- a/app/ZSG_Import/Service1.vb
+++ /dev/null
@@ -1,12 +0,0 @@
-Public Class Service1
-
- Protected Overrides Sub OnStart(ByVal args() As String)
- ' Code zum Starten des Dienstes hier einfügen. Diese Methode sollte Vorgänge
- ' ausführen, damit der Dienst gestartet werden kann.
- End Sub
-
- Protected Overrides Sub OnStop()
- ' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen.
- End Sub
-
-End Class
diff --git a/app/ZSG_Import/ZSG_Import.vbproj b/app/ZSG_Import/ZSG_Import.vbproj
index 5381169..416aaaf 100644
--- a/app/ZSG_Import/ZSG_Import.vbproj
+++ b/app/ZSG_Import/ZSG_Import.vbproj
@@ -6,7 +6,7 @@
AnyCPU
{4591D818-6F38-4FBB-918D-76259EBBD7C6}
WinExe
- ZSG_Import.Service1
+ ZSG_Import.MyService
ZSG_Import
ZSG_Import
512
@@ -47,6 +47,18 @@
On
+
+ ..\..\lib\Interop.WINDREAMLib.dll
+ False
+
+
+ ..\..\lib\Interop.WMOBRWSLib.dll
+ True
+
+
+ ..\..\lib\Interop.WMOTOOLLib.dll
+ True
+
@@ -68,15 +80,19 @@
+
+
+
+
True
Application.myapp
-
+
Component
-
- Service1.vb
+
+ MyService.vb
diff --git a/app/ZSG_Import/clsDatabase.vb b/app/ZSG_Import/clsDatabase.vb
new file mode 100644
index 0000000..486fe40
--- /dev/null
+++ b/app/ZSG_Import/clsDatabase.vb
@@ -0,0 +1,78 @@
+Public Class clsDatabase
+ Private Shared connectionString As String
+
+ Public Shared Function Init()
+ Try
+ connectionString = My.Settings.MyConnectionString
+ Dim SQLconnect As New SqlClient.SqlConnection
+ SQLconnect.ConnectionString = connectionString
+ SQLconnect.Open()
+ SQLconnect.Close()
+ clsLogger.AddDetailLog("Database DDRightService initialized")
+ Return True
+ Catch ex As Exception
+ clsLogger.Add("Unexpected Error in DatabaseInit: " & ex.Message, True)
+ Return False
+ End Try
+ End Function
+
+ Public Shared Function Return_Datatable(Select_anweisung As String)
+ Try
+ Dim SQLconnect As New SqlClient.SqlConnection
+ Dim SQLcommand As SqlClient.SqlCommand
+ SQLconnect.ConnectionString = connectionString
+ SQLconnect.Open()
+ SQLcommand = SQLconnect.CreateCommand
+ SQLcommand.CommandText = Select_anweisung
+
+ Dim adapter1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(SQLcommand)
+ Dim dt As DataTable = New DataTable()
+ adapter1.Fill(dt)
+ SQLconnect.Close()
+ Return dt
+ Catch ex As Exception
+ clsLogger.Add("Unexpected Error in Return_Datatable: " & ex.Message, True)
+ clsLogger.Add("SQL: " & Select_anweisung, False)
+ Return Nothing
+ End Try
+ End Function
+ Public Shared Function Execute_non_Query(ExecuteCMD As String, Optional Userinput As Boolean = False)
+ Try
+ Dim SQLconnect As New SqlClient.SqlConnection
+ Dim SQLcommand As SqlClient.SqlCommand
+ SQLconnect.ConnectionString = connectionString
+ SQLconnect.Open()
+ SQLcommand = SQLconnect.CreateCommand
+ 'Update Last Created Record in Foo
+ SQLcommand.CommandText = ExecuteCMD
+ SQLcommand.ExecuteNonQuery()
+ SQLcommand.Dispose()
+ SQLconnect.Close()
+ Return True
+ Catch ex As Exception
+ clsLogger.Add("Unexpected Error in Execute_non_Query: " & ex.Message, True)
+ clsLogger.Add("SQL: " & ExecuteCMD, False)
+ Return False
+ End Try
+ End Function
+ Public Shared Function Execute_Scalar(cmdscalar As String)
+ Dim result
+ Try
+ Dim SQLconnect As New SqlClient.SqlConnection
+ Dim SQLcommand As SqlClient.SqlCommand
+ SQLconnect.ConnectionString = connectionString
+ SQLconnect.Open()
+ SQLcommand = SQLconnect.CreateCommand
+ 'Update Last Created Record in Foo
+ SQLcommand.CommandText = cmdscalar
+ result = SQLcommand.ExecuteScalar()
+ SQLcommand.Dispose()
+ SQLconnect.Close()
+ Return result
+ Catch ex As Exception
+ clsLogger.Add("Unexpected Error Execute_Scalar: " & ex.Message, True)
+ clsLogger.Add("SQL: " & cmdscalar, False)
+ Return Nothing
+ End Try
+ End Function
+End Class
diff --git a/app/ZSG_Import/clsLogger.vb b/app/ZSG_Import/clsLogger.vb
new file mode 100644
index 0000000..1f985ac
--- /dev/null
+++ b/app/ZSG_Import/clsLogger.vb
@@ -0,0 +1,156 @@
+Imports System.IO
+
+Public Class clsLogger
+ Private Shared LogPath As String
+ Private Shared LogFilename As String
+ Private Shared logErr_name As String
+ Private Shared log_string As String
+ Public Shared Function Init(ByVal speicherort As String, ByVal prefix As String)
+ Try
+ 'Den Speicherort festlegen
+ SetSpeicherort()
+ Dim logf_name As String = LogPath & "\" & prefix & System.DateTime.Now.ToString("yyyy_MM_dd") & ".txt"
+ logErr_name = LogPath & "\" & "ErrorLog_" & System.DateTime.Now.ToString("yyyy_MM_dd") & ".txt"
+ Dim anz As Integer = 1
+ Do While File.Exists(logf_name)
+ Dim info As New FileInfo(logf_name)
+ Dim length As Long = info.Length
+ If length > 5000000 Then
+ logf_name = IO.Path.GetDirectoryName(logf_name)
+ logf_name = logf_name & "\" & prefix & System.DateTime.Now.ToString("yyyy_MM_dd") & "(" & anz.ToString & ").txt"
+ anz = anz + 1
+ Else
+ Exit Do
+ End If
+ Loop
+ LogFilename = logf_name
+ Try
+ 'Veruch das Log zu öffnen
+ Dim fs As FileStream = New FileStream(LogFilename, FileMode.OpenOrCreate, FileAccess.Write)
+ ' --- Stream öffnen
+ Dim w As StreamWriter = New StreamWriter(fs)
+ ' --- Anfügen am Ende
+ w.BaseStream.Seek(0, SeekOrigin.End)
+ ' --- Zeilen schreiben
+ ' --- Writer und Stream schließen
+ w.Close()
+ fs.Close()
+ Catch ex As Exception
+ LogEscalation_Error("The Logfile could not be created - Error: " & ex.Message)
+ Return False
+ End Try
+ 'Alles Ok
+ Return True
+ Catch ex As Exception
+ LogEscalation_Error("Unexpected Error in init Logger - Error: " & ex.Message)
+ Return False
+ End Try
+
+ End Function
+ Private Shared Sub LogEscalation_Error(msg As String)
+ Try
+ 'Veruch das Log zu öffnen
+ Dim fs As FileStream = New FileStream(logErr_name, FileMode.OpenOrCreate, FileAccess.Write)
+ ' --- Stream öffnen
+ Dim w As StreamWriter = New StreamWriter(fs)
+ ' --- Anfügen am Ende
+ w.BaseStream.Seek(0, SeekOrigin.End)
+ ' --- Zeilen schreiben
+ w.WriteLine(msg)
+ ' --- Writer und Stream schließen
+ w.Close()
+ fs.Close()
+ Catch ex As Exception
+
+ End Try
+ End Sub
+ ' legt den Speicherort fest
+ Public Shared Sub SetSpeicherort()
+ Dim f As New IO.DirectoryInfo(My.Application.Info.DirectoryPath & "\Log")
+ If f.Exists = False Then
+ IO.Directory.CreateDirectory(My.Application.Info.DirectoryPath & "\Log")
+ End If
+ LogPath = My.Application.Info.DirectoryPath & "\Log\"
+ End Sub
+ Public Shared Sub Add(ByVal text As String, ByVal _error As Boolean, Optional ByVal Funktion As String = "")
+ Dim msg As String
+ If log_string <> "" Then
+ log_string &= vbNewLine
+ End If
+ 'Präfixe schreiben
+ If _error = True And Funktion <> "" Then
+ msg = ">> Attention Error in Funktion '" & Funktion & "'" & vbNewLine & "error-message: "
+ ElseIf _error = True Then
+ msg = ">> Attention Error:" & vbNewLine & "error-message: "
+ End If
+ 'Präfix und Meldung zusammenstellen
+ msg &= text
+ log_string &= msg
+ End Sub
+ Public Shared Sub AddError(ByVal error_string As String, Optional ByVal Funktion As String = "")
+ Try
+ 'Zuerst mal die Details schreiben
+ WriteLog()
+ 'Nun den eigentlichen Fehler loggen
+ Dim msg As String
+ 'Präfixe schreiben
+ If Funktion <> "" Then
+ msg = ">> Attention Error in function/Class '" & Funktion & "'" & vbNewLine & "error-message: "
+ Else
+ msg = ">> Attention Error:" & vbNewLine & "error-message: "
+ End If
+ 'Präfix und Meldung zusammenstellen
+ msg &= error_string
+ 'Veruch das Log zu öffnen
+ Dim fs As FileStream = New FileStream(LogFilename, FileMode.OpenOrCreate, FileAccess.Write)
+ ' --- Stream öffnen
+ Dim w As StreamWriter = New StreamWriter(fs)
+ ' --- Anfügen am Ende
+ w.BaseStream.Seek(0, SeekOrigin.End)
+ ' --- Zeilen schreiben
+ w.WriteLine(msg)
+ ' --- Writer und Stream schließen
+ w.Close()
+ fs.Close()
+ Catch ex As Exception
+ LogEscalation_Error("Unexpected Error in AddError - Error: " & ex.Message)
+ End Try
+
+ End Sub
+
+ Public Shared Sub AddDetailLog(ByVal text As String)
+ Try
+ If LOG_ERRORS_ONLY = False Then
+ If log_string <> "" Then
+ log_string &= vbNewLine
+ End If
+ log_string &= " >> " & text
+ End If
+ Catch ex As Exception
+ LogEscalation_Error("Unexpected Error in AddDetailLog - Error: " & ex.Message)
+ End Try
+ End Sub
+
+ Public Shared Sub WriteLog()
+ Try
+ If log_string <> "" Then
+ 'Veruch das Log zu öffnen
+ Dim fs As FileStream = New FileStream(LogFilename, FileMode.OpenOrCreate, FileAccess.Write)
+ ' --- Stream öffnen
+ Dim w As StreamWriter = New StreamWriter(fs)
+ ' --- Anfügen am Ende
+ w.BaseStream.Seek(0, SeekOrigin.End)
+ ' --- Zeilen schreiben
+ w.WriteLine(log_string)
+ ' --- Writer und Stream schließen
+ w.Close()
+ fs.Close()
+ SetSpeicherort()
+ 'Den Meldungsstring wieder leeren
+ log_string = ""
+ End If
+ Catch ex As Exception
+ LogEscalation_Error("Unexpected Error in WriteLog - Error: " & ex.Message)
+ End Try
+ End Sub
+End Class
diff --git a/app/ZSG_Import/clsWindream.vb b/app/ZSG_Import/clsWindream.vb
new file mode 100644
index 0000000..2748b90
--- /dev/null
+++ b/app/ZSG_Import/clsWindream.vb
@@ -0,0 +1,1690 @@
+
+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
+ Private Shared aktWMObject As WINDREAMLib.WMObject
+ Public Shared WD_SERVER
+ Public Shared CURRENT_WMObject As WMObject
+#End Region
+
+
+#Region "+++++ Allgemeine Methoden und Funktionen +++++"
+
+ '''
+ ''' Konstruktor für die windream-Klasse
+ '''
+ '''
+ 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
+ '''
+ ''' Initialisiert die statische Klasse (Login, Session starten, usw.)
+ '''
+ ''' Liefert True wenn das Anmelden erfolgreich war, sonst False
+ '''
+ 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
+ '''
+ ''' Liefert alle Indexe eines Objekttypen.
+ '''
+ ''' Name des Objekttyps
+ ''' Array mit allen Objekttyp zugeordneten Indexen als String
+ '''
+ 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 +++++"
+
+ '''
+ ''' Liefert True wenn die windream-Session angemeldet ist und False für den Fall, dass die Session nicht eingeloggt ist.
+ '''
+ ''' Anmeldestatus als Boolean
+ '''
+ 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
+
+ '''
+ ''' Liefert den Servernamen an dem windream aktuell angemeldet ist.
+ '''
+ ''' Servername als String
+ '''
+ 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)
+
+
+ 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
+ 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
+ Public Shared Function Stream_File(ByVal filenameQuelle As String, ByVal filenameZiel As String, Optional ImportAll As Boolean = False)
+ Try
+ aktWMObject = Nothing
+ Dim zielpfad = Path.GetDirectoryName(filenameZiel)
+ If My.Computer.FileSystem.DirectoryExists(zielpfad) = False Then
+ My.Computer.FileSystem.CreateDirectory(zielpfad)
+ clsLogger.Add(">> Zielverzeichnis neu erzeugt!", False)
+ End If
+
+ Const STREAM_BinaryObject = "BinaryObject"
+
+ clsLogger.AddDetailLog(" >> Stream_File wurde gestartet")
+ Dim endgültigerDateiname As String = ""
+ ' Objekt für Datei und Zielverzeichnis anlegen
+ ' Dim Quelldatei_Name As String = Path.GetFileName(filenameQuelle)
+
+ clsLogger.AddDetailLog(" >> Quelldatei gelesen")
+
+ '########
+ endgültigerDateiname = filenameZiel.Substring(2)
+ If My.Computer.FileSystem.DirectoryExists(zielpfad) Then
+ clsLogger.AddDetailLog(" >> targetPath exisitiert")
+ ' Überprüfen ob der zu Kopieren notwendige Speicherplatz auf Ziellaufwerk vorhanden ist
+ Dim dvr As New DriveInfo("W:")
+ Dim freeSpace = dvr.TotalFreeSpace
+
+ Dim info As New FileInfo(filenameQuelle)
+ ' Get length of the file.
+ Dim length As Long = info.Length
+ If freeSpace < length Then
+ clsLogger.Add("Not enough space on filestore", True)
+ Return -10
+ End If
+
+ clsLogger.AddDetailLog(" >> Datei kopieren von " & filenameQuelle & " nach " & endgültigerDateiname & ".")
+ Dim Connect
+ Dim Session
+ Dim WMObject
+ Dim aFileIO
+ Dim aWMStream
+ Dim wmbrwsr
+ Dim dmsServer As String
+ clsLogger.AddDetailLog(" >> Connect definieren: CreateObject('Windream.WMConnect')")
+ Connect = CreateObject("Windream.WMConnect")
+ 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
+ '==================================================================
+ ' create a session
+ '==================================================================
+ 'Prüfen ob sich personifiziert angemeldet werden muss?
+
+ Session = GetWMSessionAsUser(My.Settings.AD_DOMAIN, My.Settings.AD_SERVER, My.Settings.AD_USER, My.Settings.AD_USER_PW)
+
+ '==================================================================
+ ' login session
+ '==================================================================
+ Try
+ Connect.LoginSession(Session)
+ Dim LoggedIn = Session.aLoggedin
+ If LoggedIn Then
+ clsLogger.AddDetailLog(" >> 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
+ clsLogger.Add(">> Login on dms-Server failed", True)
+ ' MsgBox("Login failed. ")
+ End If
+ Catch ex As Exception
+ clsLogger.Add(">> Persionalized session - User is already logged in!'" & Err.Description & "'", True)
+ End Try
+
+ Const WMCOMEventWMSessionNeedIndex = 1
+
+ 'windream Objekte erstellen ohne Indexierungs-Event
+ Session.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 W: zuzugreifen und zu sperren...")
+ wdFilexists = Session.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
+ '==================================================================
+ WMObject = Session.GetNewWMObjectFS(WMEntityDocument, endgültigerDateiname, WMObjectEditModeObject)
+ 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.AddDetailLog(" >> Es konnte zugegriffen werden -> DATEI IST BEREITS VORHANDEN")
+ Err.Clear()
+
+ WMObject = Session.GetNewWMObjectFS(WMEntityDocument, endgültigerDateiname, WMObjectEditModeObject)
+ If Err.Number > 0 Then
+ clsLogger.Add(" FEHLER: Neues WMObject (Kopie) konnte nicht erzeugt werden - Error: '" & Err.Description & "'", True)
+
+ End If
+ clsLogger.AddDetailLog(" >> WMObject zugewiesen")
+ End If
+ clsLogger.AddDetailLog(" >> ENDGÜLTIGER DATEINAME => " & endgültigerDateiname)
+ If WMObject IsNot Nothing Then
+ ' lock object for file system access (to change the file itself)
+ WMObject.lock()
+ ' set fileIO the local source file
+ aFileIO.bstrOriginalFileName = filenameQuelle
+ If Err.Number > 0 Then
+
+ 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()
+ System.IO.File.Delete("W:\" & 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()
+ System.IO.File.Delete("W:\" & 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()
+ System.IO.File.Delete("W:\" & 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()
+ System.IO.File.Delete("W:\" & 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()
+ System.IO.File.Delete("W:\" & 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()
+ System.IO.File.Delete("W:\" & 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()
+ System.IO.File.Delete("W:\" & endgültigerDateiname)
+ Return False
+
+ End If
+ 'DATEI GRÖSSE ERMITTELN - MANCHMAL KOMMT ES VOR DAS DATEIGRÖße 0 ist
+ Dim info2 As New FileInfo("W:\" & endgültigerDateiname)
+ Dim length1 As Long = info2.Length
+ If length1 > 0 And Err.Number = 0 Then
+ If endgültigerDateiname.StartsWith("\") Then
+ If endgültigerDateiname.StartsWith("\\") Then
+ endgültigerDateiname = endgültigerDateiname.Replace("\\", "\")
+ Else
+ endgültigerDateiname = endgültigerDateiname
+ End If
+ Else
+ endgültigerDateiname = "\" & endgültigerDateiname
+ End If
+ CURRENT_FILEIN_WD = "W:" & endgültigerDateiname
+ CURRENT_FILEIN_WD = CURRENT_FILEIN_WD.Replace("\\", "\")
+ clsLogger.Add(">> File '" & CURRENT_FILEIN_WD & "' was imported.", False)
+
+
+ aktWMObject = WMObject
+ Return True
+ Else
+ If length = 0 Then
+ If ImportAll = False Then
+ System.IO.File.Delete("W:\" & endgültigerDateiname)
+ clsLogger.Add(" Error in Stream File - FileLength = 0, File " & CURRENT_FILEIN_WD & " was deleted", True)
+ Return False
+ Else
+ If endgültigerDateiname.StartsWith("\") Then
+ If endgültigerDateiname.StartsWith("\\") Then
+ endgültigerDateiname = endgültigerDateiname.Replace("\\", "\")
+ Else
+ endgültigerDateiname = endgültigerDateiname
+ End If
+ Else
+ endgültigerDateiname = "\" & endgültigerDateiname
+ End If
+ clsLogger.Add(">> ATTENTION in Stream File - FileLength = 0, File " & CURRENT_FILEIN_WD & " will be imported", False)
+ CURRENT_FILEIN_WD = "W:" & endgültigerDateiname
+ CURRENT_FILEIN_WD = CURRENT_FILEIN_WD.Replace("\\", "\")
+
+ '###
+ clsLogger.Add(">> File '" & CURRENT_FILEIN_WD & "' was imported.", False)
+ aktWMObject = WMObject
+ Return True
+ End If
+
+ Else
+ clsLogger.Add("Error in Stream File - Error <> 0", True)
+ Return False
+ End If
+
+ End If
+ Else
+ Return False
+ End If
+ Else
+ clsLogger.AddDetailLog(" >> targetPath exisitiert NICHT")
+ 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
+ WD_File = WD_File.Substring(2)
+ Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject
+ Try
+ WMObject = oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File) 'WINDREAMLib.WMEntity.WMEntityDocument
+ Catch ex As Exception
+ clsLogger.Add(">> Could not create WMObject for file '" & WD_File & "' - so it is not existing", False)
+ Return False
+ End Try
+
+ clsLogger.AddDetailLog(" >> Deleting started - Object created")
+ WMObject.Delete()
+ Return True
+ Catch ex As Exception
+ clsLogger.Add("Unexpected Error in Delete_WDFile: " & ex.Message, False)
+ Return False
+ End Try
+ End Function
+
+ Public Shared Function WDFile_exists(ByVal WD_File As String)
+ Try
+ If Not WD_File.StartsWith("\") Then
+ WD_File = WD_File.Substring(2)
+ End If
+ Dim WMObject As WINDREAMLib.WMObject '= CreateObject("WINDREAMLib.WMObject") 'New WINDREAMLib.WMObject
+ WMObject = oSession.GetWMObjectByPath(WINDREAMLib.WMEntity.WMEntityDocument, WD_File) 'WINDREAMLib.WMEntity.WMEntityDocument
+ 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
+
+
+ '''
+ ''' Übergibt einer in windream gespeicherten Datei Indexwerte
+ '''
+ ''' Name der zu indexierenden Datei
+ ''' neuer Name der zu indexierenden Datei
+ ''' Liefert True wenn das Indexieren erfolgreich war, sonst False
+ '''
+ 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 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
+ '''
+ ''' Überprüft ob der angegebene Index im Objekttyp existiert
+ '''
+ ''' Name des zu durchsuchenden Objekttyps
+ ''' Name des zu suchenden Indexes
+ ''' Liefert True wenn der Index im Objekttyp existiert, sonst False
+ '''
+ 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
+ '''
+ ''' Führt das eigendliche Indexieren aus
+ '''
+ ''' Dateiname der zu indexierenden Datei
+ ''' Name des zu indexierenden Indexfeldes
+ ''' Der Wert/die Werte die dem Index zugewiesen werden sollen
+ ''' Liefert True wenn das Indexieren erfolgreich war, sonst False
+ '''
+ 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
+
+ '''
+ ''' Diese Funktion überprüft ob eine Variable ein Array ist, oder nicht.
+ '''
+ ''' Variable die überprüft werden soll
+ ''' Liefert True wenn es sich um ein Array handelt, sonst False
+ '''
+ 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
+
+
+ '''
+ ''' Diese Funktion überprüft ob eine Variable eine ArrayList ist, oder nicht.
+ '''
+ ''' Variable die überprüft werden soll
+ ''' Liefert True wenn es sich um eine ArrayList handelt, sonst False
+ '''
+ 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
+ '''
+ ''' Diese Funktion errechnet aus einem Datum den Unix-Timestamp
+ '''
+ ''' Datum, für das der Timestamp errechnet werden soll
+ ''' Liefert den Timestamp als Integer
+ '''
+ 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
+ '''
+ ''' Liefert den Typen eines Indexes als Integer.
+ '''
+ ''' Name des zu überprüfenden Indexfeldes
+ ''' Liefert eine Zahl, die einen Typen beschreibt
+ '''
+ 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
diff --git a/lib/Interop.WINDREAMLib.dll b/lib/Interop.WINDREAMLib.dll
new file mode 100644
index 0000000..c542fd1
Binary files /dev/null and b/lib/Interop.WINDREAMLib.dll differ
diff --git a/lib/Interop.WMOBRWSLib.dll b/lib/Interop.WMOBRWSLib.dll
new file mode 100644
index 0000000..cab577b
Binary files /dev/null and b/lib/Interop.WMOBRWSLib.dll differ
diff --git a/lib/Interop.WMOTOOLLib.dll b/lib/Interop.WMOTOOLLib.dll
new file mode 100644
index 0000000..93b66ae
Binary files /dev/null and b/lib/Interop.WMOTOOLLib.dll differ