diff --git a/.gitignore b/.gitignore index 1bc915c..f9a6690 100644 --- a/.gitignore +++ b/.gitignore @@ -154,3 +154,4 @@ $RECYCLE.BIN/ # Mac desktop service store files .DS_Store +/app/.vs/windream-Result-Handler/v15/Server/sqlite3 diff --git a/app/DDWDResultHandler/App.config b/app/DDWDResultHandler/App.config index e88d07b..e8a2c82 100644 --- a/app/DDWDResultHandler/App.config +++ b/app/DDWDResultHandler/App.config @@ -12,7 +12,7 @@ - + Data Source=172.24.12.41\tests;Initial Catalog=DD_ECM_RENOLIT;Persist Security Info=True;User ID=sa;Password=dd diff --git a/app/DDWDResultHandler/ClassLoggerOld.vb b/app/DDWDResultHandler/ClassLoggerOld.vb deleted file mode 100644 index 98e2ffb..0000000 --- a/app/DDWDResultHandler/ClassLoggerOld.vb +++ /dev/null @@ -1,216 +0,0 @@ -Imports System.IO - -Public Class ClassLoggerOld - Private Shared DateiSpeicherort As String = Nothing - Private Shared DateiPrefix As String = "" - Private Shared Datei As IO.File = Nothing - Private Shared Dateiname As String = "" - Private Shared StreamWriter As IO.StreamWriter = Nothing - Private Shared HasInformedAboutError As Boolean = False - ' eine Art Konstruktor - Public Shared Sub Init(ByVal speicherort As String, Optional ByVal prefix As String = "", Optional ByVal appendFile As Boolean = True) - SetSpeicherort() - ClassLoggerOld.DateiSpeicherort = speicherort - ' wenn ein Prfix gesetzt wurde - If Not prefix = "" Then - ' initialisiert das Prefix - ClassLoggerOld.SetPrefix(prefix) - End If - Dim str As String = ClassLoggerOld.DateiSpeicherort & "\" & ClassLoggerOld.DateiPrefix & System.DateTime.Now.ToString("yyyy_MM_dd") & ".txt" - Dim anz As Integer = 1 - Do While File.Exists(str) - Dim info As New FileInfo(str) - Dim length As Long = info.Length - If length > 5000000 Then - str = IO.Path.GetDirectoryName(str) - str = str & "\" & ClassLoggerOld.DateiPrefix & System.DateTime.Now.ToString("yyyy_MM_dd") & "(" & anz.ToString & ").txt" - anz = anz + 1 - Else - Exit Do - End If - Loop - ClassLoggerOld.Dateiname = str - If Not appendFile Then - ' der Versuch die Datei zu löschen - 'Try - ' My.Computer.FileSystem.DeleteFile(ClassNILogger.Dateiname, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.DeletePermanently) - 'Catch ex As Exception - ' ' bei Fehler besteht kein Schreibrecht auf die Datei oder Datei existiert nicht - ' ' ALSO: alles Okay soweit - 'End Try - My.Computer.FileSystem.WriteAllText(ClassLoggerOld.Dateiname, "Neu erstellt - appendfile", False) - End If - ' testen ob sich die Datei öffnen und beschreiben lässt - 'ClassNILogger.CheckIsLogWritable() - 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 - ClassLoggerOld.DateiSpeicherort = My.Application.Info.DirectoryPath & "\Log\" - End Sub - - ' legt das Prefix für den Dateinamen fest - Public Shared Sub SetPrefix(ByVal prefix As String) - ClassLoggerOld.DateiPrefix = prefix - End Sub - - Public Shared Sub Add(ByVal text As String, ByVal _error As Boolean, Optional ByVal Funktion As String = "") - Try - If ClassLoggerOld.OpenFile Then - Try - Dim msg As String - If _error = True And Funktion <> "" Then - msg = ">> Achtung Fehler in Funktion '" & Funktion & "'" & vbNewLine & "Fehlermeldung: " - ElseIf _error = True Then - msg = ">> Achtung Fehler:" & vbNewLine & "Fehlermeldung: " - End If - msg &= text - - ClassLoggerOld.StreamWriter.WriteLine(msg) - ClassLoggerOld.CloseFile() - Catch e As Exception - ClassLoggerOld.WriteErrorMessage() - End Try - Else - ClassLoggerOld.WriteErrorMessage() - End If - Catch ex As Exception - - End Try - - End Sub - Public Shared Sub AddDetailLog(ByVal text As String) - If ClassLoggerOld.OpenFile Then - Try - If clsSQLITE.konf_logerrorsonly = False Then - ClassLoggerOld.StreamWriter.WriteLine(">> " & text) - ClassLoggerOld.CloseFile() - End If - Catch e As Exception - ClassLoggerOld.WriteErrorMessage() - End Try - Else - ClassLoggerOld.WriteErrorMessage() - End If - End Sub - ' öffnet eine Datei zum Schreiben - Private Shared Function OpenFile() - Try - ' wenn ein Speicherort festgelegt wurde - If Not ClassLoggerOld.DateiSpeicherort = Nothing Then - ' den Dateienamen definieren - Dim dateiname As String = ClassLoggerOld.Dateiname - ' Datei anlegen wenn noch nicht vorhanden - My.Computer.FileSystem.WriteAllText(dateiname, String.Empty, True) - ' die Datei zum Schreiben öffnen - ClassLoggerOld.StreamWriter = New IO.StreamWriter(dateiname, True, System.Text.Encoding.UTF8) - End If - ' wenn die Datei erfolgreich geöffnet wurde - If ClassLoggerOld.StreamWriter IsNot Nothing Then - Return True - Else - Return False - End If - Catch ex As Exception - Return False - End Try - - End Function - - ' öffnet eine Datei zum Schreiben - Private Shared Function OpenFile(ByVal DateiSpeicherort As String, ByVal DateiPrefix As String) - Try - ' wenn ein Speicherort festgelegt wurde - If Not DateiSpeicherort = Nothing And ClassLoggerOld.CheckIsLogWritable() Then - ' den Dateienamen definieren - Dim dateiname As String = ClassLoggerOld.Dateiname - ' Datei anlegen wenn noch nicht vorhanden - My.Computer.FileSystem.WriteAllText(dateiname, String.Empty, True) - - ' die Datei zum Schreiben öffnen - ClassLoggerOld.StreamWriter = New IO.StreamWriter(dateiname, True, System.Text.Encoding.UTF8) - End If - ' wenn die Datei erfolgreich geöffnet wurde - If ClassLoggerOld.StreamWriter IsNot Nothing Then - Return True - Else - Return False - End If - - Catch ex As Exception - Return False - End Try - - End Function - - - ' schliesst die geöffnete Datei - Private Shared Sub CloseFile() - - ' wenn eine Datei geöffnet ist - If ClassLoggerOld.StreamWriter IsNot Nothing Then - ' die Datei schliessen - ClassLoggerOld.StreamWriter.Close() - ClassLoggerOld.StreamWriter = Nothing - End If - End Sub - - - Public Shared Function CheckIsLogWritable() - - If ClassLoggerOld.OpenFile Then - Try - ClassLoggerOld.CloseFile() - Catch e As Exception - ClassLoggerOld.WriteErrorMessage() - Return False - End Try - Else - ClassLoggerOld.WriteErrorMessage() - Return False - End If - - Return True - End Function - - - Public Shared Function CheckIsLogWritable(ByVal vDateiSpeicherort As String, ByVal vDateiPrefix As String) - - If ClassLoggerOld.OpenFile(vDateiSpeicherort, vDateiPrefix) Then - Try - ClassLoggerOld.CloseFile() - Catch e As Exception - ClassLoggerOld.WriteErrorMessage() - Return False - End Try - Else - ClassLoggerOld.WriteErrorMessage() - Return False - End If - - Return True - End Function - - - Private Shared Sub WriteErrorMessage() - If Not ClassLoggerOld.HasInformedAboutError Then - Try - EventLog.WriteEntry("Windream Result Handler", "Fehler beim Öffnen der Logdatei - Keine Schreibrechte in Verzeichnis??", EventLogEntryType.Warning) - Catch ex As Exception - - End Try - - 'EventLog1.Source = "Windream Result Handler" - 'clsSQLITE.Execute_non_Query("INSERT INTO TBLOG (MODUL,MESSAGE) VALUES ('MAIN','" & "Fehler beim Öffnen der Logdatei - Keine Schreibrechte im Verzeichnis? Es wird keine Logdatei angelegt oder beschrieben.") - 'MsgBox("Beim Öffnen der Logdatei ist ein Fehler aufgetreten. Bitte stellen Sie sicher das Sie sowohl über entsprechende Schreibrechte im Verzeichnis, als auch über ausreichend Speicherplatz zum Speichern der Logdatei verfügen." & _ - ' vbNewLine & vbNewLine & "Es wird keine Logdatei angelegt oder beschrieben." & vbNewLine & vbNewLine & "Im folgenden werden Sie über Fehler, den Log betreffend nicht weiter informiert, um den Ablauf des Dateiimporters nicht zu stören.", _ - ' MsgBoxStyle.Information, "Fehler beim Öffnen der Logdatei") - ClassLoggerOld.HasInformedAboutError = True - End If - End Sub - -End Class diff --git a/app/DDWDResultHandler/ClassWindream_allgemein.vb b/app/DDWDResultHandler/ClassWindream_allgemein.vb new file mode 100644 index 0000000..2eb98c4 --- /dev/null +++ b/app/DDWDResultHandler/ClassWindream_allgemein.vb @@ -0,0 +1,193 @@ +Imports WINDREAMLib +Imports WINDREAMLib.WMCOMEvent +Imports WINDREAMLib.WMEntity +Imports WINDREAMLib.WMObjectEditMode +Imports WINDREAMLib.WMSearchOperator +Imports WINDREAMLib.WMSearchRelation +Imports WMOBRWSLib + +Public Class ClassWindream_allgemein + +#Region "+++++ Konstanten +++++" + Const DEBUG = AUS + Const AUS = 0 + Const WINDREAM = 1 + Const VARIABLEN = 2 +#End Region + +#Region "+++++ Variablen +++++" + Public oConnect ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht) + Public oSession 'As WINDREAMLib.WMSession ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht) + Public oBrowser As New WMOBRWSLib.ServerBrowser + Public oDokumentTypen As WINDREAMLib.WMObjects +#End Region + + +#Region "+++++ Allgemeine Methoden und Funktionen +++++" + + ''' + ''' Konstruktor für die windream-Klasse + ''' + ''' + Sub New() + ' wenn ein Fehler bei der Initialisierung auftrat + If Not Me.Init() Then + ' Nachricht ausgeben + clsLogger.Add("Es trat ein Fehler bei der Initialisierung der Klasse windream auf. Bitte prüfen Sie ob der windream-Server aktiv ist und alle Dienste gestartet sind.!", 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 Function Init() As Boolean + Try + Try + ' Session-Objekt instanziieren und mit dem im Client ausgewählten Server belegen + Me.oSession = CreateObject("Windream.WMSession", Me.GetCurrentServer) + 'If My.Settings.vDetailLog Then ClassLogger.Add(" >> windream-Server: '" & Me.GetCurrentServer & "'", False) + ' Connection-Objekt instanziieren + Me.oConnect = CreateObject("Windream.WMConnect") + 'MsgBox("windrem init 'ed") + Catch ex As Exception + Return False + End Try + + + ' wenn windream nicht angemeldet ist + If Not Me.IsLoggedIn Then + + ' Art der Anmeldung an windream festlegen + ' 0x0L (also 0) = Standard windream Benutzer + ' WM_MODULE_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 + Me.oConnect.ModuleID = 0 + + ' setzt die minimal erwartete windream-Version + Me.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 + Me.oConnect.LoginSession(Me.oSession) + If Me.oSession.aLoggedin = False Then + clsLogger.Add("Es konnte keine Session aufgebaut werden!", 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 + Me.oSession.SwitchEvents(WMCOMEventWMSessionNeedIndex, False) + ' der Parameter WMEntityDocument definiert, dass nur Dokumenttypen und keine + ' Ordnertypen ausgelesen werden + Me.oDokumentTypen = Me.oSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument) + Catch ex As Exception + Return False + End Try + + End If + + Return True + + Catch ex As Exception + If Err.Number = -2147220985 Then + Else + clsLogger.Add(ex.Message & vbNewLine & "Fehler beim Login an windream!", True) + + End If + 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 = Me.oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname) + Dim vType = oAttribute.getVariableValue("dwAttrType") + Return vType + Catch ex As Exception + 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 Function IsLoggedIn() As Boolean + Try + Return Me.oSession.aLoggedin + Catch ex As Exception + clsLogger.Add("Me.oSession.aLoggedin was ended with error: " & ex.Message, True) + + End Try + + Return False + End Function + + ''' + ''' Liefert den Servernamen an dem windream aktuell angemeldet ist. + ''' + ''' Servername als String + ''' + Public Function GetCurrentServer() As String + Try + Return Me.oBrowser.GetCurrentServer 'ClassWindream.oBrowser.GetCurrentServer + Catch ex As Exception + clsLogger.Add(ex.Message & vbNewLine & "Der aktuell gewählte windream-Server konnte nicht ausgelesen werden!", True) + + End Try + + Return "" + End Function + + + + +#End Region +End Class diff --git a/app/DDWDResultHandler/DDWDResultHandler.vb b/app/DDWDResultHandler/DDWDResultHandler.vb index c00587d..f3f811c 100644 --- a/app/DDWDResultHandler/DDWDResultHandler.vb +++ b/app/DDWDResultHandler/DDWDResultHandler.vb @@ -32,11 +32,11 @@ Public Class DDWDResultHandler clsLogger.Add(" ", False) clsLogger.Add("## WindreamResultHandler gestartet - " & Now & " ## ", False) - If My.Settings.MyConnection = String.Empty Then + If My.Settings.SQLSERVER_CS = String.Empty Then clsLogger.Add("Achtung: Es wurde noch kein Datenbank-ConnectionString hinterlegt.", True) Else - If clsSQLITE.Init = False Then - clsLogger.Add("Achtung: Es konnte keine Verbindung zur Datenbank '" & My.Settings.MyConnection & "' hergestellt werden!", True) + If clsDatatabase.Init = False Then + clsLogger.Add("Achtung: Es konnte keine Verbindung zur Datenbank '" & My.Settings.SQLSERVER_CS & "' hergestellt werden!", True) Else ' '### Thread für Durchlauf generieren DDWDResultHandler.threadRunner = New BackgroundWorker() @@ -73,14 +73,14 @@ Public Class DDWDResultHandler 'EventLog1.WriteEntry("Dienst 'DD windream Result Handler' gestoppt") clsLogger.Add("", False) clsLogger.Add("## WindreamResultHandler wurde gestoppt - " & Now & " ## ", False) - clsSQLITE.Execute_non_Query("Update TBPROFIL SET Running = 1 WHERE GUID = " & clsProfil._profGUID) + clsDatatabase.Execute_non_Query("Update TBWMRH_PROFIL SET Running = 1 WHERE GUID = " & _PROFIL_ID) clsLogger.Add("", False) clsLogger.WriteLog() End Sub Public Shared Sub RUN_THREAD(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Try Dim notcompleted As Boolean = False - clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "logResultHandler_") + clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "_SERVICEResultHandler") clsLogger.Add("", False) clsLogger.Add("## Start Durchlauf WindreamResultHandler - " & Now & " ## ", False) clsLogger.Add("", False) @@ -88,35 +88,44 @@ Public Class DDWDResultHandler If _windream.Init() = True Then clsLogger.AddDetailLog("windream vollumfänglich initialisiert!") 'Zur sicherheit die DB nochmal initialiseren - If clsSQLITE.Init() = True Then - Dim DT As DataTable = clsSQLITE.Return_Datatable("SELECT GUID FROM TBPROFIL WHERE AKTIV = 1 order by REIHENFOLGE") - If DT.Rows.Count > 0 Then - clsLogger.AddDetailLog("Anzahl der aktiven Profile: " & DT.Rows.Count.ToString) - For Each DR As DataRow In DT.Rows - _PROFIL_ID = CInt(DR.Item("GUID")) - 'Und nun das Profil durchlaufen - Dim initresult = clsProfil.Init(_PROFIL_ID) - If initresult = True Then - clsLogger.WriteLog() - clsProfil.Profil_Durchlauf() - ElseIf initresult = False Then - clsLogger.Add("clsProfil konnte nicht initialisiert werden", True, "RUN_THREAD") - notcompleted = True - ElseIf initresult = 0 Then - clsLogger.AddDetailLog("initresult: 0") - notcompleted = True - ElseIf initresult = 1 Then - clsLogger.AddDetailLog("initresult: 1") - notcompleted = True - End If - Next - Else - clsLogger.Add("- Keine aktiven Profile vorhanden", False) - notcompleted = True + If clsDatatabase.Init() = True Then + Dim DT As DataTable = clsDatatabase.Return_Datatable("select * from TBWMRH_KONFIGURATION where GUID = 1") + If DT.Rows.Count = 1 Then + LOG_ERRORS_ONLY = DT.Rows(0).Item("LOG_ERRORS_ONLY") + If LOG_ERRORS_ONLY = False Then + clsLogger.Add("Detaillog is ON!", False) + End If + WDLAUFWERK = DT.Rows(0).Item("WD_LAUFWERK") + End If - clsSQLITE.Execute_non_Query("UPDATE TBKONFIGURATION SET LAST_TICK = DATETIME ('now' , 'localtime') WHERE GUID = 1") + DT = clsDatatabase.Return_Datatable("SELECT GUID FROM TBWMRH_PROFIL WHERE AKTIV = 1 order by REIHENFOLGE") + If DT.Rows.Count > 0 Then + clsLogger.AddDetailLog("Anzahl der aktiven Profile: " & DT.Rows.Count.ToString) + For Each DR As DataRow In DT.Rows + _PROFIL_ID = CInt(DR.Item("GUID")) + 'Und nun das Profil durchlaufen + Dim initresult = clsProfil.Init(_PROFIL_ID) + If initresult = True Then + clsLogger.WriteLog() + clsProfil.Profil_Durchlauf() + ElseIf initresult = False Then + clsLogger.Add("clsProfil konnte nicht initialisiert werden", True, "RUN_THREAD") + notcompleted = True + ElseIf initresult = 0 Then + clsLogger.AddDetailLog("initresult: 0") + notcompleted = True + ElseIf initresult = 1 Then + clsLogger.AddDetailLog("initresult: 1") + notcompleted = True + End If + Next + Else + clsLogger.Add("- Keine aktiven Profile vorhanden", False) + notcompleted = True + End If + clsDatatabase.Execute_non_Query("UPDATE TBWMRH_KONFIGURATION SET LAST_TICK = GETDATE() WHERE GUID = 1") Else - clsLogger.Add("- clsSQLLite konnte nicht initialisiert werden!", False) + clsLogger.Add("- clsSQLLite konnte nicht initialisiert werden!", False) notcompleted = True End If Else @@ -131,14 +140,14 @@ Public Class DDWDResultHandler End Try End Sub -#Region "*** BackgroundWorker DI und NI beenden und Abbrechen ***" +#Region "*** BackgroundWorker beenden und Abbrechen ***" Private Shared Sub Thread_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("## Der Dateiimport wurde durch den Anwender abgebrochen", False) + clsLogger.Add("## Der Process wurde durch den Anwender abgebrochen", False) clsLogger.WriteLog() ElseIf e.Error IsNot Nothing Then clsLogger.Add("Fehler bei Durchlauf. Der Vorgang wird abgebrochen.", True, "Thread_Completed") diff --git a/app/DDWDResultHandler/DDWDResultHandler.vbproj b/app/DDWDResultHandler/DDWDResultHandler.vbproj index 058d38a..e7fae25 100644 --- a/app/DDWDResultHandler/DDWDResultHandler.vbproj +++ b/app/DDWDResultHandler/DDWDResultHandler.vbproj @@ -55,7 +55,7 @@ ..\packages\EntityFramework.6.1.1\lib\net45\EntityFramework.SqlServer.dll - ..\..\..\Bibliotheken\DLL\windreamDLL\64bit\Interop.WINDREAMLib.dll + P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WINDREAMLib.dll False @@ -88,7 +88,7 @@ - + diff --git a/app/DDWDResultHandler/My Project/Settings.Designer.vb b/app/DDWDResultHandler/My Project/Settings.Designer.vb index 4c98af9..bb5a12a 100644 --- a/app/DDWDResultHandler/My Project/Settings.Designer.vb +++ b/app/DDWDResultHandler/My Project/Settings.Designer.vb @@ -15,7 +15,7 @@ Option Explicit On Namespace My _ Partial Friend NotInheritable Class MySettings Inherits Global.System.Configuration.ApplicationSettingsBase @@ -58,9 +58,9 @@ Namespace My Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _ Global.System.Configuration.DefaultSettingValueAttribute("Data Source=172.24.12.41\tests;Initial Catalog=DD_ECM_RENOLIT;Persist Security In"& _ "fo=True;User ID=sa;Password=dd")> _ - Public ReadOnly Property MyConnection() As String + Public ReadOnly Property SQLSERVER_CS() As String Get - Return CType(Me("MyConnection"),String) + Return CType(Me("SQLSERVER_CS"),String) End Get End Property End Class diff --git a/app/DDWDResultHandler/My Project/Settings.settings b/app/DDWDResultHandler/My Project/Settings.settings index 23f7190..ec290df 100644 --- a/app/DDWDResultHandler/My Project/Settings.settings +++ b/app/DDWDResultHandler/My Project/Settings.settings @@ -2,7 +2,7 @@ - + Data Source=172.24.12.41\tests;Initial Catalog=DD_ECM_RENOLIT;Persist Security Info=True;User ID=sa;Password=dd diff --git a/app/DDWDResultHandler/RUNTIME_VARIABLES.vb b/app/DDWDResultHandler/RUNTIME_VARIABLES.vb index 2195907..3d3a0f1 100644 --- a/app/DDWDResultHandler/RUNTIME_VARIABLES.vb +++ b/app/DDWDResultHandler/RUNTIME_VARIABLES.vb @@ -1,4 +1,8 @@ Module RUNTIME_VARIABLES Public EXPORTED_FILENAME As String + Public _PROFIL_ID, _profGUID As Integer + Public WDLAUFWERK, _profObjekttyp, _profwdSuche, _profDay, _profRunType, _Profilname As String + Public _proflastRun As Date + Public LOG_ERRORS_ONLY As Boolean = False End Module diff --git a/app/DDWDResultHandler/clsDatatabase.vb b/app/DDWDResultHandler/clsDatatabase.vb index febb56f..37eeb3e 100644 --- a/app/DDWDResultHandler/clsDatatabase.vb +++ b/app/DDWDResultHandler/clsDatatabase.vb @@ -1,6 +1,5 @@ Imports System.Data.SqlClient Imports Oracle.ManagedDataAccess.Client - Public Class clsDatatabase Public Shared Function ExecuteonOracleDb(CONSTRING As String, ByVal plsqlcommand As String) Try @@ -36,6 +35,7 @@ Public Class clsDatatabase ' *** Ausführen des Command *** If Command() IsNot Nothing Then Try + clsLogger.AddDetailLog("Now executing: " & plsqlcommand) Oracle_Command.ExecuteNonQuery() ' DB-Connection schliessen Oracle_Conn.Close() @@ -57,11 +57,59 @@ Public Class clsDatatabase Catch ex As Exception - clsLogger.Add("Unexpected Error in ExecuteonOracleDb: " & ex.Message & vbNewLine & "(SQL: " & plsqlcommand & ")", True, "clsDatatabase.ExecuteonOracleDb") + clsLogger.Add("Unexpected Error in ExecuteonOracleDb: " & ex.Message & vbNewLine & "SQL: " & plsqlcommand, True, "clsDatatabase.ExecuteonOracleDb") ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden Return False End Try + End Function + Public Shared Function Oracle_CS_Test(CONSTRING As String) + Try + Dim conn As New OracleConnectionStringBuilder + + Dim Oracle_Conn As OracleConnection = New OracleConnection(CONSTRING) + + ' Verbindung zur Datenbank aufbauen + Try + Oracle_Conn.Open() + + Catch ex As Exception + clsLogger.Add(ex.Message, True, "clsDatatabase.Oracle_CS_Test(OpenConnection)") + Return False + End Try + Oracle_Conn.Close() + Return True + Catch ex As Exception + clsLogger.Add("Unexpected Error in Oracle_CS_Test: " & ex.Message, True, "clsDatatabase.Oracle_CS_Test") + ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden + Return False + End Try + + End Function + Public Shared Function MSSQL_CS_Test(CONSTRING As String) + Try + + ' die nötigen Variablen definieren + Dim Connection As SqlConnection = Nothing + + + ' Verbindung zur Datenbank aufbauen + Try + Connection = New SqlConnection(CONSTRING) + Connection.Open() + Catch ex As Exception + clsLogger.Add(ex.Message, True, "clsDatatabase.MSSQL_CS_Test(OpenConnection)") + Return False + End Try + Connection.Close() + Return True + + Catch ex As Exception + ' an dieser Stelle sollte jeder unvorhergesehene Fehler der Funktion abgefangen werden + clsLogger.Add("UNEXPECTED ERROR: " & ex.Message, True, "clsDatatabase.MSSQL_CS_Test") + Return False + End Try + End Function Public Shared Function ExecuteonMSSQL(ConString As String, ByVal sqlcommand As String) Try @@ -128,4 +176,167 @@ Public Class clsDatatabase End Try End Function + Private Shared connectionString As String + + Public Shared Function Init() + Try + connectionString = My.Settings.SQLSERVER_CS + Dim SQLconnect As New SqlClient.SqlConnection + SQLconnect.ConnectionString = connectionString + SQLconnect.Open() + SQLconnect.Close() + Return True + Catch ex As Exception + clsLogger.Add("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 + SQLcommand.CommandTimeout = 180 + 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("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) + 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.CommandTimeout = 120 + SQLcommand.ExecuteNonQuery() + SQLcommand.Dispose() + SQLconnect.Close() + + + + Return True + Catch ex As Exception + + clsLogger.Add("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 + SQLcommand.CommandTimeout = 120 + result = SQLcommand.ExecuteScalar() + SQLcommand.Dispose() + SQLconnect.Close() + + + Return result + Catch ex As Exception + + clsLogger.Add("Error in Execute_Scalar: " & ex.Message, True) + clsLogger.Add("SQL: " & cmdscalar, False) + Return Nothing + End Try + End Function + Public Shared Function OracleExecute_Scalar(cmdscalar As String, OracleConnection As String) + Dim result + Try + Dim SQLconnect As New OracleConnection + Dim SQLcommand As New OracleCommand + SQLconnect.ConnectionString = OracleConnection + 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("Error in OracleExecute_Scalar: " & ex.Message, True) + clsLogger.Add("#SQL: " & cmdscalar, False) + Return Nothing + End Try + End Function + Public Shared Function OracleExecute_non_Query(ExecuteCMD As String, OracleConnection As String, Optional userInput As Boolean = False) + Try + Dim SQLconnect As New OracleConnection + Dim SQLcommand As OracleCommand + SQLconnect.ConnectionString = OracleConnection + 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("Error in OracleExecute_non_Query: " & ex.Message, True) + clsLogger.Add("#SQL: " & ExecuteCMD, False) + + Return False + End Try + End Function + + Public Shared Function Oracle_Return_Datatable(Select_anweisung As String, OracleConnection As String, Optional userInput As Boolean = False) + Try + Dim SQLconnect As New OracleConnection + Dim SQLcommand As OracleCommand + SQLconnect.ConnectionString = OracleConnection + SQLconnect.Open() + SQLcommand = SQLconnect.CreateCommand + SQLcommand.CommandText = Select_anweisung + + Dim adapter1 As OracleDataAdapter = New OracleDataAdapter(SQLcommand) + Dim dt As DataTable = New DataTable() + adapter1.Fill(dt) + SQLconnect.Close() + Return dt + Catch ex As Exception + + clsLogger.Add("Error in Oracle_Return_Datatable: " & ex.Message, True) + clsLogger.Add("#SQL: " & Select_anweisung, False) + Return Nothing + End Try + End Function End Class diff --git a/app/DDWDResultHandler/clsDateiverarbeitung.vb b/app/DDWDResultHandler/clsDateiverarbeitung.vb index a8a27be..aa4cc69 100644 --- a/app/DDWDResultHandler/clsDateiverarbeitung.vb +++ b/app/DDWDResultHandler/clsDateiverarbeitung.vb @@ -1,16 +1,19 @@ Imports WINDREAMLib Imports System.IO +Imports System.Net +Imports Newtonsoft.Json +Imports System.Text + Public Class clsDateiverarbeitung #Region "***** Variablen und Konstanten*****" Public Shared _windream As New clsWindream_allgemein - Public Shared pr_Profilname, pr_Objekttyp, pr_wdSuche, konfig_WDLaufwerk, konfig_VERSIONSTZ As String - Public Shared pr_GUID As Integer + Public Shared pr_DTPROFIL_REGELN As DataTable Public Shared aktfile_Exportresult - Private email As New clsEmail + Public Shared CriticalError As Boolean = False Private Shared regel_TYP, regel_INDEX_NAME, regel_QUELLE1, regel_FROM1, regel_FROM2 As String @@ -25,17 +28,8 @@ Public Class clsDateiverarbeitung #End Region Public Shared Function InitProfilData() Try - pr_Profilname = Nothing - pr_Objekttyp = Nothing - pr_wdSuche = Nothing pr_DTPROFIL_REGELN = Nothing ' Profildaten der Klasse mitteilen - pr_Profilname = clsProfil._Profilname - pr_Objekttyp = clsProfil._profObjekttyp - pr_wdSuche = clsProfil._profwdSuche - pr_GUID = clsProfil._profGUID - konfig_WDLaufwerk = clsSQLITE.konf_WDLAUFWERK - konfig_VERSIONSTZ = clsSQLITE.konf_VERSIONSTRENNZEICHEN clsLogger.AddDetailLog("InitProfilData Profildaten zugewiesen....") Return True Catch ex As Exception @@ -52,7 +46,7 @@ Public Class clsDateiverarbeitung clsLogger.Add("", False) clsLogger.Add(">> Verarbeitung von Datei: " & WDDatei.aName, False) 'Die Quelle zusammensetzen - clsLogger.AddDetailLog("PFAD: " & konfig_WDLaufwerk & ":" & WDDatei.aPath & "\" & WDDatei.aName) + clsLogger.AddDetailLog("PFAD: " & WDLAUFWERK & ":" & WDDatei.aPath & "\" & WDDatei.aName) 'Dim Quelle As String = IO.Path.GetDirectoryName(WDLaufwerk & ":" & WDDatei.aPath & "\" & WDDatei.aName) Dim ExportFileIO = New WMOTOOLLib.WMFileIO ' CreateObject("WMOTOOLLib.WMFileIO") ' New WMOTOOLLib.WMFileIO @@ -67,7 +61,7 @@ Public Class clsDateiverarbeitung clsLogger.AddError("Unvorhergesehener Fehler beim Lock-Vorgang: " & ex.Message, "clsDV.Export_File") Return False End Try - + Dim oWMStream = WDDatei.OpenStream("BinaryObject", WMObjectStreamOpenModeReadWrite) '### VERSIONIERUNG ### Dim version As Integer = 2 @@ -77,7 +71,7 @@ Public Class clsDateiverarbeitung Dim tempFilename As String = Zielpfad & Filename & Extension 'Überprüfen ob File existiert Do While IO.File.Exists(tempFilename) = True - tempFilename = Zielpfad & Filename & konfig_VERSIONSTZ & version & Extension + tempFilename = Zielpfad & Filename & "_" & version & Extension version = version + 1 Loop clsLogger.AddDetailLog("Zieldateiname: " & tempFilename) @@ -100,11 +94,11 @@ Public Class clsDateiverarbeitung Return False End Try End Function - Public Shared Function Rename_File(wddok As WMObject, konvention As String) + Public Shared Function Rename_File(WMFile As WMObject, konvention As String) Try clsLogger.AddDetailLog("Konvention: '" & konvention & "'") - ' Regulären Ausdruck zum Auslesen der windream-Indexe definieren + 'Regulären Ausdruck zum Auslesen der windream-Indexe definieren Dim preg As String = "\[%{1}[a-zA-Z0-9\!\$\&\/\(\)\=\?\,\.\-\;\:_öÖüÜäÄ\#\'\+\*\~\{\}\@\€\<\>\ ]+]{1}" ' einen Regulären Ausdruck laden Dim regulärerAusdruck As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex(preg) @@ -113,13 +107,13 @@ Public Class clsDateiverarbeitung Dim i As Integer = 0 ' alle Vorkommen der windream-Indexe im SQL-String durchlaufen For Each reg_element As System.Text.RegularExpressions.Match In reg_elemente - ' die Zeichen [% und ] entfernen (liefert den wirklichen windream-Index) + 'die Zeichen [% und ] entfernen (liefert den wirklichen windream-Index) Dim reg_element_Ohne_SZ As String = reg_element.Value.Replace("[%", "") reg_element_Ohne_SZ = reg_element_Ohne_SZ.Replace("]", "") clsLogger.AddDetailLog("Indexwert aus Index '" & reg_element_Ohne_SZ & "' auslesen....") Dim wdIndexwert - ' den Wert des Indexes für das aktuelle Dokument auslesen - wdIndexwert = wddok.GetVariableValue(reg_element_Ohne_SZ) + 'den Wert des Indexes für das aktuelle Dokument auslesen + wdIndexwert = WMFile.GetVariableValue(reg_element_Ohne_SZ) If wdIndexwert Is Nothing = False Then If Not wdIndexwert.GetType.ToString.Contains("System.Object") Then clsLogger.AddDetailLog("Namenkonvention (" & i & ") " & konvention) @@ -143,7 +137,7 @@ Public Class clsDateiverarbeitung clsLogger.AddDetailLog("tempFilename: " & tempFilename) 'Überprüfen ob File existiert Do While IO.File.Exists(tempFilename) = True - tempFilename = ZielPfad & "\" & Filename & konfig_VERSIONSTZ & version & Extension + tempFilename = ZielPfad & "\" & Filename & "~" & version & Extension version += 1 Loop clsLogger.AddDetailLog("RenameFile - OLDFilename: " & aktfile_Exportresult & " - NEWFilename: " & Path.GetFileName(tempFilename)) @@ -155,6 +149,152 @@ Public Class clsDateiverarbeitung Return False End Try End Function + Public Shared Function Rename_File_Vektor(WMFile As WMObject, WMINDEX_NAME As String) + Try + Dim WMIndexwert + Dim ZielPfad As String = Path.GetDirectoryName(aktfile_Exportresult) + clsLogger.AddDetailLog("ZielPfad: " & ZielPfad) + Dim Extension = Path.GetExtension(aktfile_Exportresult) + clsLogger.AddDetailLog("Extension: " & Extension) + + If WMINDEX_NAME.StartsWith("[%") Then + WMINDEX_NAME = WMINDEX_NAME.Replace("[%", "") + WMINDEX_NAME = WMINDEX_NAME.Replace("]", "") + End If + 'den Wert des Indexes für das aktuelle Dokument auslesen + WMIndexwert = WMFile.GetVariableValue(WMINDEX_NAME) + If WMIndexwert.GetType.ToString.Contains("System.Object") Then + clsLogger.AddDetailLog("Rename_File_Vektor in Progress for index " & WMINDEX_NAME) + Dim anz As Integer = 1 + Dim copybasefile As String + For Each WMvalue As Object In WMIndexwert + 'Für jeden Value eine Datei erzeugen + Try + If WMvalue.ToString <> String.Empty Then + Dim tempFilename As String = ZielPfad & "\" & WMvalue & Extension + clsLogger.AddDetailLog("tempFilename: " & tempFilename) + If anz = 1 Then + clsLogger.AddDetailLog("RenameFile - OLDFilename: " & aktfile_Exportresult & " - NEWFilename: " & Path.GetFileName(tempFilename)) + My.Computer.FileSystem.RenameFile(aktfile_Exportresult, Path.GetFileName(tempFilename)) + copybasefile = tempFilename + Else + Dim version As Integer = 2 + 'Überprüfen ob File existiert + Do While IO.File.Exists(tempFilename) = True + tempFilename = ZielPfad & "\" & WMvalue & "~" & version & Extension + version += 1 + Loop + File.Copy(copybasefile, tempFilename, True) + End If + anz += 1 + + End If + Catch ex As Exception + clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsDateiverarbeitung.ForEachWMvalue") + End Try + Next + Else + clsLogger.Add(">> Achtung WMIndex " & WMINDEX_NAME & " scheint kein Vektorfeld zu sein!", False, "clsDateiverarbeitung.Rename_File_Vektor") + Return False + End If + + clsLogger.Add(">> Dateien wurde erfolgreich nach Vektorfeld erzeugt.", False, "clsDateiverarbeitung.Rename_File_Vektor") + Return True + Catch ex As Exception + clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsDateiverarbeitung.Rename_File_Vektor") + End Try + End Function + + Private Shared Function GetWMAPILink(docId As String, userId As String) + Dim hostname = "http://documents.mylogitservices.syncreon.com:8100" + Dim link As String = $"{hostname}/WMWebApi/windream.web.api/DigitalData/BNSDownload?docId={docId}&userId={userId}" + + Return link + End Function + + Private Shared Function GetDocTypeCategory(docType As String) + Select Case docType + Case "Abliefernachweis" + Return 5 + Case Else + Return 0 + End Select + End Function + + ''' + ''' Generiert einen Link für BNS und fügt das Dokument WMFile + ''' ins BNS ein + ''' + ''' Das WMObject, dass das aktuelle Dokument repräsentiert + ''' Die eindeutige Benutzer Kennung für die Authentifizierung in Windream + Public Shared Function BNSjsonDownload(WMFile As WMObject, userId As String, apiAddress As String) + Try + ' Indizes für das aktuelle Dokument auslesen + Dim SENDUNGNR = WMFile.GetVariableValue("Sendungnr") + Dim DOKID = WMFile.GetVariableValue("Dokument-ID") + Dim DOKART = WMFile.GetVariableValue("Dokumentart") + Dim now As DateTime = DateTime.Now + + ' Download Link für Dokument erstellen + Dim link As String = GetWMAPILink(DOKID, userId) + + ' JSON Payload erstellen und serialisieren + Dim doc As New BNSDocument() + doc.Bemerkung = DOKART + doc.Ivalidfrom = now + doc.Ivaliduntil = now.AddDays(30) + doc.Pfad = link + doc.Kategorien = New List(Of BNSDocumentCategory) From { + New BNSDocumentCategory With {.Id = GetDocTypeCategory(DOKART)} + } + + Dim json As String = JsonConvert.SerializeObject(doc, Formatting.Indented) + Dim bytes As Byte() = Encoding.Default.GetBytes(json) + + ' HTTP Request machen + ' Mandanten ID ist Standartmäßig 1 + Dim mandatenId As Integer = 1 + ' Für Tests auf Sendung gesetzt, später sollte dieser String konfigurierbar sein + Dim geschaeftsObjekt = "Sendung" + ' Für Tests wird hier die Sendungsnummer verwendet, später hängt der verwendete Index von 'geschaeftsObjekt' ab + Dim geschaeftsId = SENDUNGNR + Dim url As String = $"http://{apiAddress}/onwebui/api/Customer/{mandatenId}/{geschaeftsObjekt}/{geschaeftsId}/dokument" + + clsLogger.Add($">> Generiertes JSON: {json}", False, "BNSjsonDownload") + clsLogger.Add($">> Creating WebRequest for {url}", False, "BNSjsonDownload") + + Dim req As HttpWebRequest = WebRequest.CreateHttp(url) + + req.Method = "POST" + req.ContentType = "application/json" + req.ContentLength = bytes.Length + req.Timeout = 3000 + req.ServicePoint.Expect100Continue = False + + Dim reqStream As Stream = req.GetRequestStream() + reqStream.Write(bytes, 0, bytes.Length) + reqStream.Close() + + clsLogger.Add($">> Datei wird hochgeladen... docId: {DOKID}, dokart: {DOKART}, userId: {userId}", False, "BNSjsonDownload") + clsLogger.Add($">> Upload URL: {url}", False, "BNSjsonDownload") + + Using res As HttpWebResponse = req.GetResponse() + Dim code As HttpStatusCode = res.StatusCode + Dim text As String = res.StatusDescription + + ' Status 201 Created bedeutet: Alles okay! + If code = HttpStatusCode.Created Then + clsLogger.Add($">> Datei geschrieben! docId: {DOKID}, dokart: {DOKART}, userId: {userId}", False, "BNSjsonDownload") + Else + Throw New Exception($"Server Error (HTTP {code}: {text})") + End If + End Using + Return True + Catch ex As Exception + clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message & " - " & ex.Source, "BNSjsonDownload") + Return True + End Try + End Function Public Shared Function RUN_ORACLE_COMMAND(WMFile As WMObject, OracleCS As String, OracleCommandRAW As String) Try Dim result = REGEX_REPLACE(WMFile, OracleCommandRAW) @@ -163,7 +303,7 @@ Public Class clsDateiverarbeitung End If - If clsDatatabase.ExecuteonOracleDb(OracleCS, OracleCommandRAW) = True Then + If clsDatatabase.ExecuteonOracleDb(OracleCS, result) = True Then Return True Else Return False @@ -182,7 +322,7 @@ Public Class clsDateiverarbeitung End If - If clsDatatabase.ExecuteonMSSQL(MSSQLCS, SQLCommandRAW) = True Then + If clsDatatabase.ExecuteonMSSQL(MSSQLCS, result) = True Then Return True Else Return False @@ -219,11 +359,12 @@ Public Class clsDateiverarbeitung wdIndexwert = WMFile.GetVariableValue(reg_element_Ohne_SZ) If wdIndexwert Is Nothing = False Then If Not wdIndexwert.GetType.ToString.Contains("System.Object") Then - clsLogger.AddDetailLog("Namenkonvention (" & i & ") " & _STRING) + wdIndexwert = wdIndexwert.ToString.TrimEnd wdIndexwert = wdIndexwert.ToString.TrimStart clsLogger.AddDetailLog("Ausgelesener Indexwert = '" & wdIndexwert & "'") _STRING = _STRING.Replace(reg_element.Value, wdIndexwert.ToString) + clsLogger.AddDetailLog("Namenkonvention (" & i & ") " & _STRING) i += 1 Else clsLogger.Add(">> Achtung gelesener Wert ist ein Vektorfeld - keine Umbenennung möglich ", False, "clsProfil.Profil_Durchlauf") @@ -241,5 +382,20 @@ Public Class clsDateiverarbeitung End Try End Function + Public Class BNSDocument + Public Doksourcetype As Integer = 3 + Public Pfad As String + Public Ivalidfrom As DateTime + Public Ivaliduntil As DateTime + Public Bemerkung As String + Public Primaer As Boolean = False + Public Fremsysid As Integer = 1 + Public Kategorien As List(Of BNSDocumentCategory) + End Class + + Public Class BNSDocumentCategory + Public Id As Integer + End Class + End Class diff --git a/app/DDWDResultHandler/clsEmail.vb b/app/DDWDResultHandler/clsEmail.vb index 99d3609..8ba374a 100644 --- a/app/DDWDResultHandler/clsEmail.vb +++ b/app/DDWDResultHandler/clsEmail.vb @@ -5,7 +5,7 @@ Public Class clsEmail Private Shared MailEmpfaenger, MailFrom, MAilSMTP, MailUser, MailUser_PW As String Public Shared Function Init() Try - Dim DT As DataTable = clsSQLITE.Return_Datatable("select * from TBKONFIGURATION where GUID = 1 and EMAIL_AKTIV = 1") + Dim DT As DataTable = clsDatatabase.Return_Datatable("select * from TBKONFIGURATION where GUID = 1 and EMAIL_AKTIV = 1") If DT.Rows.Count = 1 Then For Each row As DataRow In DT.Rows MailEmpfaenger = row.Item("EMAIL_EMP") diff --git a/app/DDWDResultHandler/clsHelper.vb b/app/DDWDResultHandler/clsHelper.vb index 51e24da..37e4a0b 100644 --- a/app/DDWDResultHandler/clsHelper.vb +++ b/app/DDWDResultHandler/clsHelper.vb @@ -51,7 +51,7 @@ Public Class clsHelper Return False End Try End Function - Public Shared Function Datei_Versionieren(Dateiname As String, LOG_ERR_ONLY As Boolean, modul As String) + Public Shared Function Datei_Versionieren(Dateiname As String, modul As String) Try Dim version As Integer = 1 Dim extension As String = Path.GetExtension(Dateiname) 'Quelldatei.Substring(Quelldatei.LastIndexOf(".")) @@ -61,7 +61,7 @@ Public Class clsHelper 'Automatische Versionierung mit Tilde + Version Do While file_exists(Stammname & "\" & neuername & extension) = True clsLogger.Add(" - Datei " & endgueltigerDateiname & " ist vorhanden - Datei wird versioniert", False) - neuername = Stammname & clsSQLITE.konf_VERSIONSTRENNZEICHEN & version + neuername = Stammname & "_" endgueltigerDateiname = neuername & extension version = version + 1 Loop diff --git a/app/DDWDResultHandler/clsLogger.vb b/app/DDWDResultHandler/clsLogger.vb index 8b4c1f8..9ec6638 100644 --- a/app/DDWDResultHandler/clsLogger.vb +++ b/app/DDWDResultHandler/clsLogger.vb @@ -2,14 +2,14 @@ Public Class clsLogger Private Shared LogPath As String - Private Shared LogFilename As String + Public 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" + Dim logf_name As String = LogPath & "\" & System.DateTime.Now.ToString("yyyy_MM_dd") & prefix & ".txt" logErr_name = LogPath & "\" & "ErrorLog_" & System.DateTime.Now.ToString("yyyy_MM_dd") & ".txt" Dim anz As Integer = 1 Do While File.Exists(logf_name) @@ -116,12 +116,12 @@ Public Class clsLogger 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 clsSQLITE.konf_logerrorsonly = False Then + If LOG_ERRORS_ONLY = False Then If log_string <> "" Then log_string &= vbNewLine End If diff --git a/app/DDWDResultHandler/clsProfil.vb b/app/DDWDResultHandler/clsProfil.vb index a0878f2..9f6d371 100644 --- a/app/DDWDResultHandler/clsProfil.vb +++ b/app/DDWDResultHandler/clsProfil.vb @@ -1,22 +1,25 @@ Imports WINDREAMLib Imports System.IO +Imports System.Text +Imports Newtonsoft.Json + Public Class clsProfil #Region "***** Variablen *****" - Public Shared _Profilname, _profObjekttyp, _profwdSuche, _profDay, _profRunType As String - Public Shared _profGUID As Integer - Public Shared _proflastRun As Date - Private email As New clsEmail + + + Private Shared CriticalError As Boolean = False Private Shared WD_aktivesDokument As WMObject #End Region Public Shared Function Init(guid As Integer) Try + clsLogger.AddDetailLog("Start Initialisierung Profil für GUID: " & guid.ToString) - Dim DT As DataTable = clsSQLITE.Return_Datatable("Select * from TBPROFIL where GUID = " & guid & " AND Running = 0") + Dim DT As DataTable = clsDatatabase.Return_Datatable("Select * from TBWMRH_PROFIL where GUID = " & guid) If DT.Rows.Count > 0 Then For Each DR As DataRow In DT.Rows _profGUID = guid @@ -26,7 +29,7 @@ Public Class clsProfil If CBool(DR.Item("Aktiv")) = False Then clsLogger.Add("## Profil '" & _Profilname & "' ist inaktiv geschaltet", False) clsLogger.Add("", False) - Return 0 + Return False Else _profObjekttyp = CStr(DR.Item("Objekttyp")) _profwdSuche = CStr(DR.Item("WindreamSuche")) @@ -39,9 +42,9 @@ Public Class clsProfil Next Else clsLogger.Add("Achtung - keine Profile für diesen Durchlaufthread verfügbar", False) - Return 1 + Return False End If - + Catch ex As Exception clsLogger.AddError(ex.Message, "Profil_Init") Return False @@ -51,216 +54,363 @@ Public Class clsProfil 'Durchlauf des Profils wird aus dem Service gestartet wenn Init = True war Public Shared Function Profil_Durchlauf() Dim _error As Boolean = False - Try - Dim Run_Profile As Boolean = False - 'Soll die Verarbeitung heute durchgeführt werden?? - Dim Dayofweek As Integer = My.Computer.Clock.LocalTime.DayOfWeek - If _profDay.Substring(Dayofweek - 1, 1) = 1 Then - 'Verarbeitung soll heute durchgeführt werden - clsLogger.AddDetailLog("Verarbeitung soll heute durchgeführt werden!") - clsLogger.AddDetailLog("_RunType: " & _profRunType) - Dim arr As String() - arr = _profRunType.Split(";") - clsLogger.AddDetailLog("arr(1): " & arr(1).ToString) - Select Case arr(0) - Case "TIME" - Dim Time_last As DateTime = clsSQLITE.konf_LASTTICK.ToShortTimeString - ' Dim intervall As Integer = clsSQLITE.konf_intervall / 60 - clsLogger.AddDetailLog("Intervall: 1 Minute") - Dim Time_next As DateTime = _proflastRun.AddMinutes(1) - Dim _RunTime As Date = CDate(arr(1)) - clsLogger.AddDetailLog("ProfilTime: " & _RunTime) - clsLogger.AddDetailLog("_RunTime.ToShortTimeString: " & _RunTime.ToShortTimeString & " # " & "Now.ToShortTimeString: " & Now.ToShortTimeString) - If Time_next.ToString.StartsWith("11.11.1911") Then - clsLogger.AddDetailLog("Manueller Durchlauf des Profils - 11.11.1911") - Run_Profile = True - Else - 'Ist die Uhrzeit in der Range - If _RunTime.ToShortTimeString = Now.ToShortTimeString Then - Run_Profile = True - End If - End If - - Case "INTV" - 'Die Differenz berechnen - Dim DiffMin As Integer = DateDiff(DateInterval.Minute, _proflastRun, Date.Now) - Dim msg As String - msg = "Minutenangaben: " & vbNewLine - msg = msg & "DiffMin: " & DiffMin & vbNewLine - msg = msg & "Intervall: " & arr(1) - clsLogger.AddDetailLog(msg) - If DiffMin >= CInt(arr(1)) Then - 'Den Durchlauf erlauben - Run_Profile = True - End If - Case Else - clsLogger.Add(">> _profRunType konnte nicht ausgewertet werden - " & arr(0), False) - End Select - If Run_Profile = True Then - clsLogger.Add(">> Start des Durchlaufes für Profil '" & _Profilname & "'", False) - 'den Durchlaufszeitpunkt speichern - clsSQLITE.Execute_non_Query("Update TBPROFIL SET Running = 1 WHERE GUID = " & _profGUID) - clsLogger.AddDetailLog("Prüfen der windream-Suche.......") - If File.Exists(_profwdSuche) = False Then - clsLogger.Add("Die Windream-Suche '" & _profwdSuche & "' existiert nicht!", True, "clsProfil.Profil_Durchlauf") - 'wenn die gesuchte File eine Suche ist: per MAil informierne und Indexierung abbrechen - If clsSQLITE.konf_EmailAktiv Then - clsEmail.Send_EMail("Fehler in windream-ResultHandler", "
>> Profilname: '" & _Profilname & "'
>> Die windream-Suche : " & _profwdSuche & " konnte nicht gefunden werden!" & _ - "
>> Mögliche Fehlerursache: Das W-Laufwerk ist nicht verfügbar!") - End If - Return False + 'Try + Dim Run_Profile As Boolean = False + 'Soll die Verarbeitung heute durchgeführt werden?? + Dim Dayofweek As Integer = My.Computer.Clock.LocalTime.DayOfWeek + If _profDay.Substring(Dayofweek - 1, 1) = 1 Then + 'Verarbeitung soll heute durchgeführt werden + clsLogger.AddDetailLog("Verarbeitung soll heute durchgeführt werden!") + clsLogger.AddDetailLog("_RunType: " & _profRunType) + Dim arr As String() + arr = _profRunType.Split(";") + clsLogger.AddDetailLog("arr(1): " & arr(1).ToString) + Select Case arr(0) + Case "TIME" + ' Dim intervall As Integer = clsSQLITE.konf_intervall / 60 + clsLogger.AddDetailLog("Intervall: 1 Minute") + Dim Time_next As DateTime = _proflastRun.AddMinutes(1) + Dim _RunTime As Date = CDate(arr(1)) + clsLogger.AddDetailLog("ProfilTime: " & _RunTime) + clsLogger.AddDetailLog("_RunTime.ToShortTimeString: " & _RunTime.ToShortTimeString & " # " & "Now.ToShortTimeString: " & Now.ToShortTimeString) + If Time_next.ToString.StartsWith("11.11.1911") Then + clsLogger.AddDetailLog("Manueller Durchlauf des Profils - 11.11.1911") + Run_Profile = True Else - ' windream-Suche für Profil starten - clsLogger.AddDetailLog("GetSearchDocuments für Suche '" & _profwdSuche & "' starten: ") - Dim windreamSucheErgebnisse As WMObjects = clsWindream_allgemein.GetSearchDocuments(_profwdSuche) - - If windreamSucheErgebnisse.Count > 0 Then - clsLogger.Add("- Insgesamt sollen '" & windreamSucheErgebnisse.Count & "' Dateien bearbeitet werden", False) - clsLogger.AddDetailLog("SELECT * FROM TBPROFIL_JOB WHERE AKTIV = 1 AND PROFIL_ID = " & _profGUID & " ORDER BY REIHENFOLGE") - Dim DT_PROFIL_JOB As DataTable = clsSQLITE.Return_Datatable("SELECT * FROM TBPROFIL_JOB WHERE AKTIV = 1 AND PROFIL_ID = " & _profGUID & " ORDER BY REIHENFOLGE") - Dim DT_PROFIL_FILE_JOB As DataTable = clsSQLITE.Return_Datatable("SELECT * FROM TBPROFIL_FILE_JOB WHERE AKTIV = 1 AND PROFIL_ID = " & _profGUID & " ORDER BY REIHENFOLGE") - clsLogger.AddDetailLog("DT_PROFIL_JOB und DT_PROFIL_FILE_JOB generiert ") - If DT_PROFIL_JOB.Rows.Count > 0 Then - clsLogger.AddDetailLog("DT_PROFIL_JOB.Rows.Count > 0") - If clsDateiverarbeitung.InitProfilData = True Then - clsLogger.AddDetailLog("clsDateiverarbeitung.InitProfilData = True") - For Each dok As WMObject In windreamSucheErgebnisse - For Each DR_PR_JB As DataRow In DT_PROFIL_JOB.Rows - Select Case DR_PR_JB.Item("JOB_TYP").ToString.ToUpper - Case "Create Mail Attachment".ToUpper - Case "Export HDD".ToUpper - clsLogger.AddDetailLog("Case Export HDD") - 'Für jedes Dokument in der Windream-Ergebnisliste - 'For Each dok As WMObject In windreamSucheErgebnisse - ' aktuelles Dokument zum Export bereitstellen - EXPORTED_FILENAME = "" - If clsDateiverarbeitung.Export_File(dok, DR_PR_JB.Item("STRING1")) = True Then - If DT_PROFIL_FILE_JOB.Rows.Count > 0 Then - clsLogger.AddDetailLog("Anzahl ") - 'Für jeden File-Job - Dim errorFileJob As Boolean = False - For Each DR_PR_FILE_JOB As DataRow In DT_PROFIL_FILE_JOB.Rows - If errorFileJob = True Then Exit For - Select Case DR_PR_FILE_JOB.Item("TYP").ToString.ToLower - Case "Set Index".ToLower - Try - 'Überprüfen ob Value bereits gesetzt wurde? - Dim idxName As String = DR_PR_FILE_JOB.Item("STRING1").ToString - Dim idxvalue As String = DR_PR_FILE_JOB.Item("STRING2").ToString - If idxvalue.Contains("[%DATETIME]") Then - idxvalue = idxvalue.Replace("[%DATETIME]", Now.ToString) - End If - clsLogger.AddDetailLog("Datei soll mit Index '" & idxName & "'indexiert werden...") - Dim arrIndex() As String - ReDim Preserve arrIndex(0) - arrIndex(0) = idxName - clsLogger.AddDetailLog("...nach arrIndex") - - Dim arrValue() As String - - Dim aktvalue As Object - aktvalue = dok.GetVariableValue(idxName) - clsLogger.AddDetailLog("...nach aktValue zuweisen..") - - If aktvalue Is Nothing Then - clsLogger.AddDetailLog("Index '" & idxName & "' ist noch leer.") - ReDim Preserve arrValue(0) - arrValue(0) = idxvalue - Else - clsLogger.AddDetailLog("Index '" & idxName & "' ist bereits gefüllt.") - Dim myArray() - ReDim myArray(0) - myArray(0) = idxvalue - - Dim VektorArray() - VektorArray = Return_VektorArray(dok, idxName, myArray, True) - - If VektorArray Is Nothing = False Then - ReDim arrValue(VektorArray.Length - 1) - Array.Copy(VektorArray, arrValue, VektorArray.Length) - End If - - End If - - If arrValue Is Nothing = False Then - clsWindream_Index.RunIndexing(dok, arrIndex, arrValue, _profObjekttyp) - Else - clsLogger.Add(">> arrValue is nothing - keine Indexierung", False, "clsProfil.Profil_Durchlauf") - End If - - Catch ex As Exception - clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(SetIndex)") - End Try - Case "Rename File with windream Index".ToLower - clsLogger.AddDetailLog("Exportierte Datei soll nach Indexvorgaben umbenannt werden...") - clsDateiverarbeitung.Rename_File(dok, DR_PR_FILE_JOB.Item("STRING1").ToString) - Case "Execute Oracle Command" - Try - Dim oracleconnectionstring = DR_PR_FILE_JOB.Item("STRING1").ToString - Dim oracleCommandRAW = DR_PR_FILE_JOB.Item("STRING2").ToString - errorFileJob = clsDateiverarbeitung.RUN_ORACLE_COMMAND(dok, oracleconnectionstring, oracleCommandRAW) - Catch ex As Exception - clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(ExecuteOracleCommand)") - End Try - Case "Execute MSSQL Command" - Try - errorFileJob = clsDateiverarbeitung.RUN_MSSQL_COMMAND(dok, DR_PR_FILE_JOB.Item("STRING1").ToString, DR_PR_FILE_JOB.Item("STRING2").ToString) - Catch ex As Exception - clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(ExecuteMSSQLCommand)") - End Try - End Select - 'Abschluss Bearbeitung File Job - clsLogger.WriteLog() - Next - Else - clsLogger.Add(">> KEINE File-JOBS für Profil '" & _Profilname & "' angelegt!", False, "clsProfil.Profil_Durchlauf") - clsLogger.WriteLog() - End If - Else - clsSQLITE.Execute_non_Query("UPDATE TBPROFIL SET Running = 0, LETZTER_DURCHLAUF = DATETIME ('now' , 'localtime') WHERE GUID = " & _profGUID) - End If - 'Next - - End Select - 'Abschluss Bearbeitung Job - clsLogger.WriteLog() - Next - - Next - - Else - clsLogger.Add(">> Initialisierung Profil nicht erfolgreich", True) - clsLogger.WriteLog() - End If - Else - clsLogger.Add(">> KEINE JOBS für Profil '" & _Profilname & "' angelegt!", False, "clsProfil.Profil_Durchlauf") - clsLogger.WriteLog() - End If - Else - ' keine Dateien zum Importieren - clsLogger.Add(">> Keine windream-Dokumente für Profil '" & _Profilname & "' vorhanden/gefunden.", False) - clsLogger.Add("", False) - clsLogger.WriteLog() + 'Ist die Uhrzeit in der Range + If _RunTime.ToShortTimeString = Now.ToShortTimeString Then + Run_Profile = True End If End If + Case "INTV" + 'Die Differenz berechnen + Dim DiffMin As Integer = DateDiff(DateInterval.Minute, _proflastRun, Date.Now) + Dim msg As String + msg = "Minutenangaben: " & vbNewLine + msg = msg & "DiffMin: " & DiffMin & vbNewLine + msg = msg & "Intervall: " & arr(1) + clsLogger.AddDetailLog(msg) + If DiffMin >= CInt(arr(1)) Then + 'Den Durchlauf erlauben + Run_Profile = True + End If + Case Else + clsLogger.Add(">> _profRunType konnte nicht ausgewertet werden - " & arr(0), False) + End Select + If Run_Profile = True Then + clsLogger.Add(">> Start des Durchlaufes für Profil '" & _Profilname & "'", False) + 'den Durchlaufszeitpunkt speichern + clsDatatabase.Execute_non_Query("Update TBWMRH_PROFIL SET Running = 1 WHERE GUID = " & _profGUID) + clsLogger.AddDetailLog("Prüfen der windream-Suche.......") + If File.Exists(_profwdSuche) = False Then + clsLogger.Add("Die Windream-Suche '" & _profwdSuche & "' existiert nicht!", True, "clsProfil.Profil_Durchlauf") + 'wenn die gesuchte File eine Suche ist: per MAil informierne und Indexierung abbrechen + clsDatatabase.Execute_non_Query("Update TBWMRH_PROFIL SET Running = 0 WHERE GUID = " & _profGUID) + clsLogger.WriteLog() + Return False + Else + ' windream-Suche für Profil starten + clsLogger.AddDetailLog("GetSearchDocuments für Suche '" & _profwdSuche & "' starten: ") + Dim windreamSucheErgebnisse As WMObjects = clsWindream_allgemein.GetSearchDocuments(_profwdSuche) + If windreamSucheErgebnisse Is Nothing Then + clsLogger.Add("windreamSucheErgebnisse is nothing!", True, "clsProfil.Profil_Durchlauf") + clsLogger.WriteLog() + Return False + End If + If windreamSucheErgebnisse.Count > 0 Then + clsLogger.Add("- Insgesamt sollen '" & windreamSucheErgebnisse.Count & "' Dateien bearbeitet werden", False) + clsLogger.AddDetailLog("SELECT * FROM TBWMRH_PROFIL_JOB WHERE AKTIV = 1 AND PROFIL_ID = " & _profGUID & " ORDER BY REIHENFOLGE") + Dim DT_PROFIL_JOB As DataTable = clsDatatabase.Return_Datatable("SELECT * FROM TBWMRH_PROFIL_JOB WHERE AKTIV = 1 AND PROFIL_ID = " & _profGUID & " ORDER BY REIHENFOLGE") + Dim DT_PROFIL_FILE_JOB As DataTable = clsDatatabase.Return_Datatable("SELECT * FROM TBWMRH_PROFIL_FILE_JOB WHERE AKTIV = 1 AND PROFIL_ID = " & _profGUID & " ORDER BY REIHENFOLGE") + clsLogger.AddDetailLog("DT_PROFIL_JOB und DT_PROFIL_FILE_JOB generiert ") + clsLogger.AddDetailLog("DT_PROFIL_JOB.Rows.Count = " & DT_PROFIL_JOB.Rows.Count) + clsLogger.AddDetailLog("DT_PROFIL_FILE_JOB.Rows.Count = " & DT_PROFIL_FILE_JOB.Rows.Count) + If DT_PROFIL_JOB.Rows.Count > 0 Then + + If clsDateiverarbeitung.InitProfilData = True Then + clsLogger.AddDetailLog("clsDateiverarbeitung.InitProfilData = True") + + + + 'For Each DR_PR_JB As DataRow In DT_PROFIL_JOB.Rows + ' Dim result = DR_PR_JB.Item("JOB_TYP").ToString.ToUpper + ' Select Case DR_PR_JB.Item("JOB_TYP").ToString.ToUpper + ' Case "BNS json Download".ToUpper + ' 'ARRAY oder Äqivalent bilden + ' Dim sb As New StringBuilder() + ' Dim sw As New StringWriter(sb) + ' Using writer As JsonWriter = New JsonTextWriter(sw) + ' writer.Formatting = Formatting.Indented + + ' writer.WriteStartObject() + ' writer.WritePropertyName("CPU") + ' writer.WriteValue("Intel") + ' writer.WritePropertyName("PSU") + ' writer.WriteValue("500W") + ' writer.WritePropertyName("Drives") + ' writer.WriteStartArray() + ' writer.WriteValue("DVD read/writer") + ' writer.WriteComment("(broken)") + ' writer.WriteValue("500 gigabyte hard drive") + ' writer.WriteValue("200 gigabype hard drive") + ' writer.WriteEnd() + ' writer.WriteEndObject() + ' End Using + ' Console.WriteLine(sb.ToString()) + ' End Select + 'Next + Dim FileJobSuccessful As Boolean = False + For Each WMdok As WMObject In windreamSucheErgebnisse + For Each DR_PR_JB As DataRow In DT_PROFIL_JOB.Rows + Select Case DR_PR_JB.Item("JOB_TYP").ToString.ToUpper + Case "Create Mail Attachment".ToUpper + Case "Export HDD".ToUpper + clsLogger.AddDetailLog("Case Export HDD") + 'Für jedes Dokument in der Windream-Ergebnisliste + 'For Each dok As WMObject In windreamSucheErgebnisse + ' aktuelles Dokument zum Export bereitstellen + EXPORTED_FILENAME = "" + If clsDateiverarbeitung.Export_File(WMdok, DR_PR_JB.Item("STRING1")) = True Then + FileJobSuccessful = True + 'If DT_PROFIL_FILE_JOB.Rows.Count > 0 Then + ' clsLogger.AddDetailLog("Anzahl DT_PROFIL_FILE_JOB.Rows.Count:" & DT_PROFIL_FILE_JOB.Rows.Count) + ' 'Für jeden File-Job + + ' For Each DR_PR_FILE_JOB As DataRow In DT_PROFIL_FILE_JOB.Rows + ' If FileJobSuccessful = False Then + ' clsLogger.Add("AUSSTIEG FOR SCHLEIFE...", True) + ' clsLogger.WriteLog() + ' Exit For + ' End If + ' Select Case DR_PR_FILE_JOB.Item("TYP").ToString.ToLower + ' Case "Set Index".ToLower + ' Try + ' 'Überprüfen ob Value bereits gesetzt wurde? + ' Dim idxName As String = DR_PR_FILE_JOB.Item("STRING1").ToString + ' Dim idxvalue As String = DR_PR_FILE_JOB.Item("STRING2").ToString + ' If idxvalue.Contains("[%DATETIME]") Then + ' idxvalue = idxvalue.Replace("[%DATETIME]", Now.ToString) + ' End If + ' clsLogger.AddDetailLog("Datei soll mit Index '" & idxName & "'indexiert werden...") + ' Dim arrIndex() As String + ' ReDim Preserve arrIndex(0) + ' arrIndex(0) = idxName + ' clsLogger.AddDetailLog("...nach arrIndex") + + ' Dim arrValue() As String + + ' Dim aktvalue As Object + ' aktvalue = WMdok.GetVariableValue(idxName) + ' clsLogger.AddDetailLog("...nach aktValue zuweisen..") + + ' If aktvalue Is Nothing Then + ' clsLogger.AddDetailLog("Index '" & idxName & "' ist noch leer.") + ' ReDim Preserve arrValue(0) + ' arrValue(0) = idxvalue + ' Else + ' clsLogger.AddDetailLog("Index '" & idxName & "' ist bereits gefüllt.") + ' Dim myArray() + ' ReDim myArray(0) + ' myArray(0) = idxvalue + + ' Dim VektorArray() + ' VektorArray = Return_VektorArray(WMdok, idxName, myArray, True) + + ' If VektorArray Is Nothing = False Then + ' ReDim arrValue(VektorArray.Length - 1) + ' Array.Copy(VektorArray, arrValue, VektorArray.Length) + ' End If + + ' End If + + ' If arrValue Is Nothing = False Then + ' clsWindream_Index.RunIndexing(WMdok, arrIndex, arrValue, _profObjekttyp) + ' Else + ' clsLogger.Add(">> arrValue is nothing - keine Indexierung", False, "clsProfil.Profil_Durchlauf") + ' End If + + ' Catch ex As Exception + ' clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(SetIndex)") + ' End Try + ' Case "Rename File with windream Index".ToLower + ' clsLogger.AddDetailLog("Exportierte Datei soll nach Indexvorgaben umbenannt werden...") + ' clsDateiverarbeitung.Rename_File(WMdok, DR_PR_FILE_JOB.Item("STRING1").ToString) + ' Case "Rename File with WMVector (only one)".ToLower + ' clsLogger.AddDetailLog("Exportierte Datei soll nach VektorIndexvorgaben umbenannt werden...") + ' clsDateiverarbeitung.Rename_File_Vektor(WMdok, DR_PR_FILE_JOB.Item("STRING1").ToString) + ' Case "Execute Oracle Command".ToLower + ' Try + ' clsLogger.AddDetailLog("Execute Oracle Comman.......") + ' Dim oracleconnectionstring = DR_PR_FILE_JOB.Item("STRING1").ToString + ' Dim oracleCommandRAW = DR_PR_FILE_JOB.Item("STRING2").ToString + ' FileJobSuccessful = clsDateiverarbeitung.RUN_ORACLE_COMMAND(WMdok, oracleconnectionstring, oracleCommandRAW) + ' Catch ex As Exception + ' clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(ExecuteOracleCommand)") + ' End Try + ' Case "Execute MSSQL Command".ToLower + ' Try + ' Dim MSSQLconnectionstring = DR_PR_FILE_JOB.Item("STRING1").ToString + ' Dim MSSQLCommandRAW = DR_PR_FILE_JOB.Item("STRING2").ToString + ' clsLogger.AddDetailLog("Execute MSSQL Command.......") + ' FileJobSuccessful = clsDateiverarbeitung.RUN_MSSQL_COMMAND(WMdok, MSSQLconnectionstring, MSSQLCommandRAW) + ' Catch ex As Exception + ' clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(ExecuteMSSQLCommand)") + ' End Try + ' End Select + ' 'Abschluss Bearbeitung File Job + ' clsLogger.WriteLog() + ' Next + 'Else + ' clsLogger.Add(">> KEINE File-JOBS für Profil '" & _Profilname & "' angelegt!", False, "clsProfil.Profil_Durchlauf") + ' clsLogger.WriteLog() + 'End If + Else + clsDatatabase.Execute_non_Query("UPDATE TBWMRH_PROFIL SET Running = 0, LETZTER_DURCHLAUF = Getdate() WHERE GUID = " & _profGUID) + End If + 'Next + Case "BNS json Download".ToUpper + FileJobSuccessful = clsDateiverarbeitung.BNSjsonDownload(WMdok, DR_PR_JB.Item("STRING1"), DR_PR_JB.Item("STRING2")) + + + End Select + 'Abschluss Bearbeitung Job + clsLogger.WriteLog() + Next + '################################## + 'JETZT DER DURCHLAUF DER DATEI-JOBS + '################################## + If DT_PROFIL_FILE_JOB.Rows.Count > 0 Then + Dim filecount As Integer = 0 + 'Für jeden File-Job + For Each DR_PR_FILE_JOB As DataRow In DT_PROFIL_FILE_JOB.Rows + If FileJobSuccessful = False Then + clsLogger.Add("AUSSTIEG FOR SCHLEIFE...", True) + clsLogger.WriteLog() + Exit For + End If + Select Case DR_PR_FILE_JOB.Item("TYP").ToString.ToLower + Case "Set Index".ToLower + Try + 'Überprüfen ob Value bereits gesetzt wurde? + Dim idxName As String = DR_PR_FILE_JOB.Item("STRING1").ToString + Dim idxvalue As String = DR_PR_FILE_JOB.Item("STRING2").ToString + If idxvalue.Contains("[%DATETIME]") Then + idxvalue = idxvalue.Replace("[%DATETIME]", Now.ToString) + End If + clsLogger.AddDetailLog("Datei soll mit Index '" & idxName & "'indexiert werden...") + Dim arrIndex() As String + ReDim Preserve arrIndex(0) + arrIndex(0) = idxName + clsLogger.AddDetailLog("...nach arrIndex") + + Dim arrValue() As String + + Dim aktvalue As Object + aktvalue = WMdok.GetVariableValue(idxName) + clsLogger.AddDetailLog("...nach aktValue zuweisen..") + + If aktvalue Is Nothing Then + clsLogger.AddDetailLog("Index '" & idxName & "' ist noch leer.") + ReDim Preserve arrValue(0) + arrValue(0) = idxvalue + Else + clsLogger.AddDetailLog("Index '" & idxName & "' ist bereits gefüllt.") + Dim myArray() + ReDim myArray(0) + myArray(0) = idxvalue + + Dim VektorArray() + VektorArray = Return_VektorArray(WMdok, idxName, myArray, True) + + If VektorArray Is Nothing = False Then + ReDim arrValue(VektorArray.Length - 1) + Array.Copy(VektorArray, arrValue, VektorArray.Length) + End If + + End If + + If arrValue Is Nothing = False Then + clsWindream_Index.RunIndexing(WMdok, arrIndex, arrValue, _profObjekttyp) + Else + clsLogger.Add(">> arrValue is nothing - keine Indexierung", False, "clsProfil.Profil_Durchlauf") + End If + + Catch ex As Exception + clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(SetIndex)") + End Try + Case "Rename File with windream Index".ToLower + clsLogger.AddDetailLog("Exportierte Datei soll nach Indexvorgaben umbenannt werden...") + clsDateiverarbeitung.Rename_File(WMdok, DR_PR_FILE_JOB.Item("STRING1").ToString) + Case "Rename File with WMVector (only one)".ToLower + clsLogger.AddDetailLog("Exportierte Datei soll nach VektorIndexvorgaben umbenannt werden...") + clsDateiverarbeitung.Rename_File_Vektor(WMdok, DR_PR_FILE_JOB.Item("STRING1").ToString) + Case "Execute Oracle Command".ToLower + Try + clsLogger.AddDetailLog("Execute Oracle Comman.......") + Dim oracleconnectionstring = DR_PR_FILE_JOB.Item("STRING1").ToString + Dim oracleCommandRAW = DR_PR_FILE_JOB.Item("STRING2").ToString + FileJobSuccessful = clsDateiverarbeitung.RUN_ORACLE_COMMAND(WMdok, oracleconnectionstring, oracleCommandRAW) + Catch ex As Exception + clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(ExecuteOracleCommand)") + End Try + Case "Execute MSSQL Command".ToLower + Try + Dim MSSQLconnectionstring = DR_PR_FILE_JOB.Item("STRING1").ToString + Dim MSSQLCommandRAW = DR_PR_FILE_JOB.Item("STRING2").ToString + clsLogger.AddDetailLog("Execute MSSQL Command.......") + FileJobSuccessful = clsDateiverarbeitung.RUN_MSSQL_COMMAND(WMdok, MSSQLconnectionstring, MSSQLCommandRAW) + Catch ex As Exception + clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(ExecuteMSSQLCommand)") + End Try + End Select + If filecount >= 20 Then + clsLogger.WriteLog() + filecount = 0 + End If + 'Abschluss Bearbeitung File Job + + Next + Else + clsLogger.Add(">> KEINE File-JOBS für Profil '" & _Profilname & "' angelegt!", False, "clsProfil.Profil_Durchlauf") + clsLogger.WriteLog() + End If + Next + clsLogger.WriteLog() + Else + clsLogger.Add(">> Initialisierung Profil nicht erfolgreich", True) + clsLogger.WriteLog() + End If + Else + clsLogger.Add(">> KEINE JOBS für Profil '" & _Profilname & "' angelegt!", False, "clsProfil.Profil_Durchlauf") + clsLogger.WriteLog() + End If + Else + ' keine Dateien zum Importieren + clsLogger.Add(">> Keine windream-Dokumente für Profil '" & _Profilname & "' vorhanden/gefunden.", False) + clsLogger.Add("", False) + clsLogger.WriteLog() + End If End If - Else - clsLogger.AddDetailLog("Verarbeitung für heute NICHT konfiguriert") - clsLogger.WriteLog() + End If - 'Abschluss des Profiles - clsSQLITE.Execute_non_Query("UPDATE TBPROFIL SET Running = 0, LETZTER_DURCHLAUF = DATETIME ('now' , 'localtime') WHERE GUID = " & _profGUID) - clsLogger.AddDetailLog("'UPDATE TBPROFIL SET Running = 0' ausgeführt") + Else + clsLogger.AddDetailLog("Verarbeitung für heute NICHT konfiguriert") clsLogger.WriteLog() - Return True - Catch ex As Exception - clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf") - clsSQLITE.Execute_non_Query("Update TBPROFIL SET Running = 0 WHERE GUID = " & _profGUID) - CriticalError = False - DDWDResultHandler.threadRunner.CancelAsync() - Return False - End Try + End If + 'Abschluss des Profiles + clsDatatabase.Execute_non_Query("UPDATE TBWMRH_PROFIL SET Running = 0, LETZTER_DURCHLAUF = GETDATE() WHERE GUID = " & _profGUID) + clsLogger.AddDetailLog("'UPDATE TBWMRH_PROFIL SET Running = 0' ausgeführt") + clsLogger.WriteLog() + Return True + 'Catch ex As Exception + ' clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf") + ' clsDatatabase.Execute_non_Query("Update TBWMRH_PROFIL SET Running = 0 WHERE GUID = " & _profGUID) + ' CriticalError = False + + ' Return False + 'End Try + End Function Private Shared Function Return_VektorArray(ByVal oDocument As WMObject, vktIndexName As String, NIIndexe As Object, CheckDuplikat As Boolean) Try @@ -366,5 +516,8 @@ Public Class clsProfil End Try End Function + + + End Class diff --git a/app/DDWDResultHandler/clsWindream_Index.vb b/app/DDWDResultHandler/clsWindream_Index.vb index 718a815..4888f16 100644 --- a/app/DDWDResultHandler/clsWindream_Index.vb +++ b/app/DDWDResultHandler/clsWindream_Index.vb @@ -2,7 +2,7 @@ Imports WMOSRCHLib Public Class clsWindream_Index Inherits clsWindream_allgemein - + #Region "+++++ Konstanten +++++" Protected Const WMObjectEditModeObject = &H1F Protected Const WMObjectStreamOpenModeReadWrite = 2 @@ -280,16 +280,14 @@ Public Class clsWindream_Index 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 + clsLogger.AddDetailLog("Indexierung von Index '" & indexname & "'") - '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 @@ -379,7 +377,7 @@ Public Class clsWindream_Index Case Else clsLogger.AddDetailLog("Typ des windream-Indexes konnte nicht bestimmt werden!") clsLogger.AddDetailLog("Versuch des Auslesens (vType): " & vType) - 'MsgBox(vType & vbNewLine & CStr(value), MsgBoxStyle.Exclamation, "Marlon-Case Else") + convertValue = "" End Select If vektor = False Then @@ -599,79 +597,7 @@ Public Class clsWindream_Index #Region "+++++ Allgemeine Funktionen die Informationen zurückliefern +++++" - Public Function GetSearchDocuments(ByVal wdfLocation As String) - If System.IO.File.Exists(wdfLocation) Then - - Try - Dim ProfileName = wdfLocation.Substring(wdfLocation.LastIndexOf("\") + 1) - Dim ProfilePath = wdfLocation.Substring(0, wdfLocation.Length - ProfileName.Length) - - oController.CheckSearchProfile(wdfLocation.ToLower) - Dim suchTyp = oController.SearchProfileTargetProgID - Dim ExSettings As Object - Dim oSearch As Object - ExSettings = oController.SearchProfileExSettings - If ExSettings = 0 Then ExSettings = 7 - - Dim srchQuick As WMOSRCHLib.WMQuickSearch = CreateObject("WMOSrch.WMQuickSearch") - Dim srchIndex As WMOSRCHLib.WMIndexSearch = CreateObject("WMOSrch.WMIndexSearch") - Dim srchObjectType As WMOSRCHLib.WMObjectTypeSearch = CreateObject("WMOSrch.WMObjectTypeSearch") - - '' 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", GetCurrentServer) - - oConnect.LoginSession(srchQuick.WMSession) - - srchQuick.ClearSearch() - srchQuick.SearchProfilePath = ProfilePath - srchQuick.LoadSearchProfile(ProfileName) - - oSearch = srchQuick.GetSearch() - - Case "WMOSRCH.WMINDEXSEARCH" - srchIndex.WMSession = CreateObject("Windream.WMSession", GetCurrentServer) - - oConnect.LoginSession(srchIndex.WMSession) - - srchIndex.ClearSearch() - srchIndex.SearchProfilePath = ProfilePath - srchIndex.LoadSearchProfile(ProfileName) - - oSearch = srchIndex.GetSearch() - - Case "WMOSRCH.WMOBJECTTYPESEARCH" - srchObjectType.WMSession = CreateObject("Windream.WMSession", GetCurrentServer) - - oConnect.LoginSession(srchObjectType.WMSession) - - srchObjectType.ClearSearch() - srchObjectType.SearchProfilePath = ProfilePath - srchObjectType.LoadSearchProfile(ProfileName) - - oSearch = srchObjectType.GetSearch() - - Case Else - clsLogger.Add("KEIN GÜLTIGER WINDREAM-SUCHTYP", True, "GetSearchDocuments") - 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 - clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "GetSearchDocuments") - Return Nothing - End Try - - End If - - Return Nothing - - End Function ''' Liefert den Wert eines Indexes als String ''' _indexname = Name des zu überprüfenden Indexfeldes Public Function GetValueforIndex(ByVal _fullfilepath As String, _indexname As String) @@ -684,7 +610,7 @@ Public Class clsWindream_Index IndexwertAusWindream = _dok.GetVariableValue(_indexname) Return IndexwertAusWindream.ToString Catch ex As Exception - 'MsgBox(ex.Message) + Return Nothing End Try End Function diff --git a/app/DDWDResultHandler/clsWindream_allgemein.vb b/app/DDWDResultHandler/clsWindream_allgemein.vb index 165b5cd..0d3f4fe 100644 --- a/app/DDWDResultHandler/clsWindream_allgemein.vb +++ b/app/DDWDResultHandler/clsWindream_allgemein.vb @@ -295,6 +295,7 @@ Public Class clsWindream_allgemein ''' Public Shared Function GetCurrentServer() As String Try + clsLogger.AddDetailLog(oBrowser.GetCurrentServer.ToString) Return oBrowser.GetCurrentServer 'ClassWindream.oBrowser.GetCurrentServer Catch ex As Exception clsLogger.AddError("Der aktuell gewählte windream-Server konnte nicht ausgelesen werden. Fehler: " & ex.Message, "clswindream.GetCurrentServer") @@ -404,18 +405,14 @@ Public Class clsWindream_allgemein End Try End Function Public Shared Function GetSearchDocuments(ByVal wdfLocation As String) - 'wdfLocation = 'W:\System\Suchen\WDRH\TestPDF.wdf' Try Dim SearchName = wdfLocation.Substring(wdfLocation.LastIndexOf("\") + 1) Dim SearchPath = wdfLocation.Substring(0, wdfLocation.Length - SearchName.Length) - + clsLogger.Add("WMSearch: " & wdfLocation.ToLower, False) If System.IO.File.Exists(wdfLocation.ToLower) Then clsLogger.AddDetailLog("Search exists") - Else - clsLogger.AddError("windream-search not existing: " & wdfLocation) - Return Nothing End If - oController.CheckSearchProfile(wdfLocation.ToLower) + oController.CheckSearchProfile(wdfLocation.ToLower) 'wdfLocation.ToLower) clsLogger.AddDetailLog("oController erzeugt") Dim suchTyp = oController.SearchProfileTargetProgID Dim ExSettings As Object @@ -427,17 +424,12 @@ Public Class clsWindream_allgemein Dim srchIndex As WMOSRCHLib.WMIndexSearch = CreateObject("WMOSrch.WMIndexSearch") Dim srchObjectType As WMOSRCHLib.WMObjectTypeSearch = CreateObject("WMOSrch.WMObjectTypeSearch") clsLogger.AddDetailLog("WD Objekte in GetSearchDocuments erzeugt") - If suchTyp Is Nothing Then - clsLogger.AddError("suchTyp is nothing") - Return Nothing - End If clsLogger.AddDetailLog(suchTyp.ToString.ToUpper) '' Der öffentliche Member CheckSearchProfile für den Typ IWMQuickSearch7 wurde nicht gefunden. [Microsoft.VisualBasic] => GetSearchDocuments() Select Case suchTyp.ToString.ToUpper Case "WMOSRCH.WMQUICKSEARCH" srchQuick.WMSession = CreateObject("Windream.WMSession", GetCurrentServer) oConnect.LoginSession(srchQuick.WMSession) - clsLogger.AddDetailLog("Session created...") srchQuick.ClearSearch() srchQuick.SearchProfilePath = SearchPath srchQuick.LoadSearchProfile(SearchName) @@ -447,15 +439,16 @@ Public Class clsWindream_allgemein srchIndex.WMSession = CreateObject("Windream.WMSession", GetCurrentServer) clsLogger.AddDetailLog("Session created...") oConnect.LoginSession(srchIndex.WMSession) - srchIndex.ClearSearch() + clsLogger.AddDetailLog("LoginSession...") srchIndex.SearchProfilePath = SearchPath + clsLogger.AddDetailLog("SearchPath...") srchIndex.LoadSearchProfile(SearchName) + clsLogger.AddDetailLog("LoadSearchProfile...") oSearch = srchIndex.GetSearch() - + clsLogger.AddDetailLog("GetSearch...") Case "WMOSRCH.WMOBJECTTYPESEARCH" srchObjectType.WMSession = CreateObject("Windream.WMSession", GetCurrentServer) oConnect.LoginSession(srchObjectType.WMSession) - clsLogger.AddDetailLog("Session created...") srchObjectType.ClearSearch() srchObjectType.SearchProfilePath = SearchPath srchObjectType.LoadSearchProfile(SearchName) diff --git a/app/ResultHandler_Konfig/ClassWindream_allgemein.vb b/app/ResultHandler_Konfig/ClassWindream_allgemein.vb deleted file mode 100644 index 2ad5971..0000000 --- a/app/ResultHandler_Konfig/ClassWindream_allgemein.vb +++ /dev/null @@ -1,398 +0,0 @@ -Imports WINDREAMLib -Imports WINDREAMLib.WMCOMEvent -Imports WINDREAMLib.WMEntity -Imports WINDREAMLib.WMObjectEditMode -Imports WINDREAMLib.WMSearchOperator -Imports WINDREAMLib.WMSearchRelation -Imports WMOBRWSLib - -Public Class ClassWindream_allgemein - -#Region "+++++ Konstanten +++++" - Const DEBUG = AUS - Const AUS = 0 - Const WINDREAM = 1 - Const VARIABLEN = 2 -#End Region - -#Region "+++++ Variablen +++++" - Public oConnect ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht) - Public oSession 'As WINDREAMLib.WMSession ' der Typ darf nicht festgelegt werden (warum auch immer... geht sonst nicht) - Public oBrowser As New WMOBRWSLib.ServerBrowser - Public oDokumentTypen As WINDREAMLib.WMObjects -#End Region - - -#Region "+++++ Allgemeine Methoden und Funktionen +++++" - - ''' - ''' Konstruktor für die windream-Klasse - ''' - ''' - Sub New() - ' wenn ein Fehler bei der Initialisierung auftrat - If Not Me.Init() Then - ' Nachricht ausgeben - MsgBox("Es trat ein Fehler bei der Initialisierung der Klasse windream auf. Bitte prüfen Sie ob der windream-Server aktiv ist und alle Dienste gestartet sind.", MsgBoxStyle.Exclamation, "Fehler bei Initialisierung") - - ' das Programm "abschießen" - Process.GetCurrentProcess.Kill() - End If - End Sub - - - ''' - ''' Initialisiert die statische Klasse (Login, Session starten, usw.) - ''' - ''' Liefert True wenn das Anmelden erfolgreich war, sonst False - ''' - Public Function Init() As Boolean - Try - Try - ' Session-Objekt instanziieren und mit dem im Client ausgewählten Server belegen - Me.oSession = CreateObject("Windream.WMSession", Me.GetCurrentServer) - 'If My.Settings.vDetailLog Then ClassLogger.Add(" >> windream-Server: '" & Me.GetCurrentServer & "'", False) - ' Connection-Objekt instanziieren - Me.oConnect = CreateObject("Windream.WMConnect") - 'MsgBox("windrem init 'ed") - Catch ex As Exception - Return False - End Try - - - ' wenn windream nicht angemeldet ist - If Not Me.IsLoggedIn Then - - ' Art der Anmeldung an windream festlegen - ' 0x0L (also 0) = Standard windream Benutzer - ' WM_MODULE_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 - Me.oConnect.ModuleID = 0 - - ' setzt die minimal erwartete windream-Version - Me.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 - Me.oConnect.LoginSession(Me.oSession) - If Me.oSession.aLoggedin = False Then - MsgBox("Es konnte keine Verbindung mit dem windream-Server hergestellt werden", MsgBoxStyle.Exclamation, "Verbindung konnte nicht hergestellt werden") - Return False - End If - - 'If My.Settings.vDetailLog Then - ' ClassLogger.Add(" >> windream-Version: '" & oSession.GetSystemInfo("WindreamVersion") & "'", False) - 'End If - - ' AUSGABE VON SYSTEMINFORMATIONEN - ' Gibt die Versionsart (Lizenztyp) also Small-Business-Edition (SBE), Small-Business-Extension (SBX) - ' oder Business-Edition (BE) aus - 'MsgBox("WindreamVersion: " & oSession.GetSystemInfo("WindreamVersion") & vbNewLine & "LicenceKey: " & oSession.GetSystemInfo("LicenceKey") & vbNewLine & _ - ' vbNewLine & "LicenceName: " & oSession.GetSystemInfo("LicenceName")) - - 'Dim WMCtrl As AISCONTROLDATACOMLib.AISControlData - 'WMCtrl = New AISCONTROLDATACOMLib.AISControlData - - '' liefert die Versionsnummer des Clients - - 'MsgBox(WMCtrl.WMWorkstationBuildNo) - 'MsgBox(WMCtrl.W - '' liefert den Servernamen des angemeldeten windreams - 'MsgBox(WMCtrl.WMServerName) - - Try - Me.oSession.SwitchEvents(WMCOMEventWMSessionNeedIndex, False) - ' der Parameter WMEntityDocument definiert, dass nur Dokumenttypen und keine - ' Ordnertypen ausgelesen werden - Me.oDokumentTypen = Me.oSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument) - Catch ex As Exception - Return False - End Try - - End If - - Return True - - Catch ex As Exception - If Err.Number = -2147220985 Then - MsgBox("Die installierte windream-Version ist nicht ausreichend für den Betrieb der Tool Collection für windream." & vbNewLine & _ - "Bitte kontaktieren Sie Digital Data." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & Err.Description, MsgBoxStyle.Exclamation, "Unzureichende windream-Version") - Else - MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Login an windream") - End If - Return False - End Try - - End Function - -#End Region - - - -#Region "+++++ Funktionen die für den Objekttyp relevate Informationen zurückliefern +++++" - - ''' - ''' Liefert alle Objekttypen des aktuellen Servers als windream-Objekte. - ''' - ''' Alle Objekttypen als WMObjects-Objekt - ''' - Public Function GetObjecttypesAsObjects() As WMObjects - Try - - Return Me.oDokumentTypen - - Catch ex As Exception - MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Auslesen der Objekttypen") - Return Nothing - End Try - End Function - - ''' - ''' Liefert alle Objekttypen des aktuellen Servers als Array aus Strings. - ''' - ''' Array mit allen Objekttypen als Strings - ''' - Public Function GetObjecttypesAsStrings() As String() - - Try - Dim objektTypenStr(Me.oDokumentTypen.Count) As String - - For i As Integer = 0 To Me.oDokumentTypen.Count - objektTypenStr(i) = Me.oDokumentTypen.Item(i).aName - Next - - Return objektTypenStr - - Catch ex As Exception - MsgBox("Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Auslesen der Objekttypen als String") - Return Nothing - End Try - - End Function - Public Function GetTypeOfIndex(ByVal indexname As String) As Integer - Try - Dim oAttribute = Me.oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname) - Dim vType = oAttribute.getVariableValue("dwAttrType") - Return vType - Catch ex As Exception - Return Nothing - End Try - End Function - ''' - ''' Liefert alle Indexe eines Objekttypen. - ''' - ''' Name des Objekttyps - ''' Array mit allen Objekttyp zugeordneten Indexen als String - ''' - Public 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 = Me.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 - ' Indexarray zurückgeben - Array.Sort(aIndexNames) - Return aIndexNames - - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler beim Auslesen der windream-Indexe") - Return Nothing - End Try - End Function - ''' - ''' Liefert einen Objekttyp als WMObject an Hand dessen Name. - ''' - ''' Name des Objekttyps - ''' Objekttyp als WMObject - ''' - Public Function GetObjecttypeByName(ByVal objekttypName As String) As WMObject - Try - ' alle Objekttypen auslesen - Dim oObjectTypes As WMObjects = Me.oSession.GetWMObjectTypes(WINDREAMLib.WMEntity.WMEntityDocument) - - ' alle Objekttypen durchlaufen und nach dem mit dem angegebenen Namen suchen - For Each oObjectType As WMObject In oObjectTypes - If oObjectType.aName = objekttypName Then - Return oObjectType - End If - Next - - Return Nothing - - Catch ex As Exception - MsgBox("Es konnte ein Objekttyp nicht erstellt werden." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Exclamation, "Objekttyp konnte nicht erstellt werden") - Return Nothing - End Try - End Function - - ''' - ''' Ü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 Function ExistIndexInObjekttyp(ByVal objekttyp As String, ByVal indexname As String) As Boolean - Try - Dim indexnamen() As String = Me.GetIndicesByObjecttype(objekttyp) - - If indexnamen Is Nothing Then Return False - - For Each index As String In indexnamen - If index = indexname Then Return True - Next - - Catch ex As Exception - MsgBox("Beim Prüfen ob ein Index für einen Objekttypen existiert, ist ein Fehler aufgetreten." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Prüfen auf Existenz eines Index in einem Objekttyp") - End Try - - Return False - - End Function - -#End Region - - - -#Region "+++++ Allgemeine Funktionen die Informationen zurückliefern +++++" - - ''' - ''' Liefert True wenn die windream-Session angemeldet ist und False für den Fall, dass die Session nicht eingeloggt ist. - ''' - ''' Anmeldestatus als Boolean - ''' - Public Function IsLoggedIn() As Boolean - Try - Return Me.oSession.aLoggedin - Catch ex As Exception - MsgBox("Es konnte nicht erfolgreich geprüft werden, ob das Programm am windream-Server angemeldted ist." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler bei Loggedin-Prüfung") - End Try - - Return False - End Function - - ''' - ''' Liefert den Servernamen an dem windream aktuell angemeldet ist. - ''' - ''' Servername als String - ''' - Public Function GetCurrentServer() As String - Try - Return Me.oBrowser.GetCurrentServer 'ClassWindream.oBrowser.GetCurrentServer - Catch ex As Exception - MsgBox("Der aktuell gewählte windream-Server konnte nicht ausgelesen werden." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Auslesen des windream-Servers") - End Try - - Return "" - End Function - - 'Public Function GetSharedCurrentServer() As String - ' Try - ' Return ClassWindream.oBrowser.GetCurrentServer - ' Catch ex As Exception - ' MsgBox("Der aktuell gewählte windream-Server konnte nicht ausgelesen werden." & vbNewLine & vbNewLine & "Fehlernachricht:" & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Fehler beim Auslesen des windream-Servers") - ' End Try - - ' Return "" - 'End Function - - - ''' - ''' Liefert das Windream-Laufwerk des windream-Servers, in Form '[Laufwerksbuchstabe]:'. (z.B. 'W:') - ''' - ''' Laufwerksbuchstabe mit Doppelpunkt als String - ''' - 'Public Function GetWindreamDriveLetter() As String - - ' Try - ' Dim oControl As AISCONTROLDATACOMLib.AISControlData - ' Dim sDrive As String = "" - - ' oControl = New AISCONTROLDATACOMLib.AISControlData - - ' sDrive = oControl.GetStringValue(&H10040003) - - ' Return sDrive & ":" - - ' Catch ex As Exception - ' MsgBox("Fehlernachricht: " & ex.Message, MsgBoxStyle.Critical, "Fehler beim Auslesen des windream-Laufwerks") - ' End Try - - ' Return "" - 'End Function - - ''' - ''' Liefert den Typen eines Indexes als Integer. - ''' - ''' Name des zu überprüfenden Indexfeldes - ''' Liefert eine Zahl, die einen Typen beschreibt - ''' - - Public Function GetValuesfromAuswahlliste(ByVal _auswahlliste As String) As Object - Try - 'Dim oAttribute = Me.oSession.GetWMObjectByName(WINDREAMLib.WMEntity.WMEntityAttribute, indexname) - 'Dim vType = oAttribute.getVariableValue("vItems") - 'Return vType - Dim oChoiceList = oSession.GetWMObjectByName(WMEntityChoiceList, _auswahlliste) - If Err.Number = 0 And TypeName(oChoiceList) <> "Nothing" Then - Dim Values = oChoiceList - Values = oChoiceList.GetVariableValue("vItems") - Dim anz As Integer = 0 - - For Each CLItem In Values - If oChoiceList.aName IsNot Nothing Then - anz += 1 - End If - Next - Dim strListe(anz - 1) - Dim zahl As Integer = 0 - For Each CLItem In Values - If oChoiceList.aName IsNot Nothing Then - strListe(zahl) = CLItem - zahl += 1 - End If - Next - Return strListe - Else - MsgBox("Auswahlliste: " & _auswahlliste & " nicht gefunden!", MsgBoxStyle.Critical, "Fehler:") - Return Nothing - End If - - Catch ex As Exception - MsgBox(ex.Message, MsgBoxStyle.Critical, "Fehler in GetValuesfromAuswahlliste:") - Return Nothing - End Try - End Function -#End Region -End Class diff --git a/app/ResultHandler_Konfig/ResultHandler_Konfig.vbproj b/app/ResultHandler_Konfig/ResultHandler_Konfig.vbproj index 7b625a7..326ce2f 100644 --- a/app/ResultHandler_Konfig/ResultHandler_Konfig.vbproj +++ b/app/ResultHandler_Konfig/ResultHandler_Konfig.vbproj @@ -111,7 +111,6 @@
- diff --git a/app/ResultHandler_Konfig/frmMain.Designer.vb b/app/ResultHandler_Konfig/frmMain.Designer.vb index 4bbffd4..af8dac5 100644 --- a/app/ResultHandler_Konfig/frmMain.Designer.vb +++ b/app/ResultHandler_Konfig/frmMain.Designer.vb @@ -1344,7 +1344,8 @@ Partial Class frmMain 'NumericUpDown ' Me.NumericUpDown.Increment = New Decimal(New Integer() {5, 0, 0, 0}) - Me.NumericUpDown.Location = New System.Drawing.Point(352, 168) + Me.NumericUpDown.Location = New System.Drawing.Point(352, 169) + Me.NumericUpDown.Maximum = New Decimal(New Integer() {500, 0, 0, 0}) Me.NumericUpDown.Name = "NumericUpDown" Me.NumericUpDown.Size = New System.Drawing.Size(38, 22) Me.NumericUpDown.TabIndex = 101 diff --git a/app/ResultHandler_Konfig/frmMain.resx b/app/ResultHandler_Konfig/frmMain.resx index 0997cd1..6227efa 100644 --- a/app/ResultHandler_Konfig/frmMain.resx +++ b/app/ResultHandler_Konfig/frmMain.resx @@ -215,7 +215,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAI - DAAAAk1TRnQBSQFMAgEBAwEAATgBAQE4AQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + DAAAAk1TRnQBSQFMAgEBAwEAAUgBAQFIAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/app/ResultHandler_Konfig/frmMain.vb b/app/ResultHandler_Konfig/frmMain.vb index cd247f7..28944b9 100644 --- a/app/ResultHandler_Konfig/frmMain.vb +++ b/app/ResultHandler_Konfig/frmMain.vb @@ -588,7 +588,7 @@ Public Class frmMain clsLogger.Add("", False) 'windream initialisieren If _windream.Init() = True Then - clsLogger.AddDetailLog("windream vollumfänglich initialisiert!") + clsLogger.AddDetailLog("windream vollumfänglich initialisiert!") 'Zur sicherheit die DB nochmal initialiseren If clsDatatabase.Init() = True Then Dim DT As DataTable = clsDatatabase.Return_Datatable("SELECT GUID FROM TBWMRH_PROFIL WHERE AKTIV = 1 order by REIHENFOLGE") @@ -619,12 +619,12 @@ Public Class frmMain clsDatatabase.Execute_non_Query("UPDATE TBWMRH_KONFIGURATION SET LAST_TICK = GETDATE() WHERE GUID = 1") Else clsLogger.Add("- clsSQLLite konnte nicht initialisiert werden!", False) - notcompleted = True - End If - Else - clsLogger.Add("# Achtung: Windream-Init mit Fehlern beendet", False) notcompleted = True End If + Else + clsLogger.Add("# Achtung: Windream-Init mit Fehlern beendet", False) + notcompleted = True + End If If notcompleted = True Then clsLogger.WriteLog() End If diff --git a/app/windream-Result-Handler.sln b/app/windream-Result-Handler.sln index b806119..74924c6 100644 --- a/app/windream-Result-Handler.sln +++ b/app/windream-Result-Handler.sln @@ -1,10 +1,8 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26228.9 +VisualStudioVersion = 15.0.27130.2010 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "windream-Result-Handler", "windream-Result-Handler\windream-Result-Handler.vbproj", "{95448D0B-00CF-4870-A90D-C39F20DD8AAB}" -EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ResultHandler_Konfig", "ResultHandler_Konfig\ResultHandler_Konfig.vbproj", "{85F6D07F-4C83-41C6-AEF1-66F228C13C25}" EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "DDWDResultHandler", "DDWDResultHandler\DDWDResultHandler.vbproj", "{190A63D1-A129-499D-A863-59D39D9EA58F}" @@ -18,16 +16,6 @@ Global SingleImage|Any CPU = SingleImage|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {95448D0B-00CF-4870-A90D-C39F20DD8AAB}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU - {95448D0B-00CF-4870-A90D-C39F20DD8AAB}.CD_ROM|Any CPU.Build.0 = Release|Any CPU - {95448D0B-00CF-4870-A90D-C39F20DD8AAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {95448D0B-00CF-4870-A90D-C39F20DD8AAB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {95448D0B-00CF-4870-A90D-C39F20DD8AAB}.DVD-5|Any CPU.ActiveCfg = Debug|Any CPU - {95448D0B-00CF-4870-A90D-C39F20DD8AAB}.DVD-5|Any CPU.Build.0 = Debug|Any CPU - {95448D0B-00CF-4870-A90D-C39F20DD8AAB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {95448D0B-00CF-4870-A90D-C39F20DD8AAB}.Release|Any CPU.Build.0 = Release|Any CPU - {95448D0B-00CF-4870-A90D-C39F20DD8AAB}.SingleImage|Any CPU.ActiveCfg = Release|Any CPU - {95448D0B-00CF-4870-A90D-C39F20DD8AAB}.SingleImage|Any CPU.Build.0 = Release|Any CPU {85F6D07F-4C83-41C6-AEF1-66F228C13C25}.CD_ROM|Any CPU.ActiveCfg = Release|Any CPU {85F6D07F-4C83-41C6-AEF1-66F228C13C25}.CD_ROM|Any CPU.Build.0 = Release|Any CPU {85F6D07F-4C83-41C6-AEF1-66F228C13C25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -52,4 +40,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {19F9A4BE-B0CE-4334-8B86-8BAB1F9D2648} + EndGlobalSection EndGlobal