diff --git a/app/ClassWMResulthandler/ModCurrent.vb b/app/ClassWMResulthandler/ModCurrent.vb index 00355d5..738063c 100644 --- a/app/ClassWMResulthandler/ModCurrent.vb +++ b/app/ClassWMResulthandler/ModCurrent.vb @@ -2,4 +2,6 @@ Public CURRENToWMSession_Created As Date = Now Public CURRENToWMConnect As Object Public CURRENToWMSession As Object + Public CURRENT_WMDriveLetter As String = "W" + End Module diff --git a/app/ClassWMResulthandler/My Project/AssemblyInfo.vb b/app/ClassWMResulthandler/My Project/AssemblyInfo.vb index 5e484b4..27b618f 100644 --- a/app/ClassWMResulthandler/My Project/AssemblyInfo.vb +++ b/app/ClassWMResulthandler/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - + diff --git a/app/ClassWMResulthandler/clsCURRENT.vb b/app/ClassWMResulthandler/clsCURRENT.vb index 7196cec..14430fc 100644 --- a/app/ClassWMResulthandler/clsCURRENT.vb +++ b/app/ClassWMResulthandler/clsCURRENT.vb @@ -8,6 +8,6 @@ Public Shared DT_TBDD_EMAIL As DataTable = Nothing Public Shared CONCATTED_FILE As String = "" Public Shared _PROFIL_ID, _profGUID As Integer - + Public Shared TEMP_FILES As List(Of String) = New List(Of String) Public Shared _proflastRun As Date End Class diff --git a/app/ClassWMResulthandler/clsDatabase.vb b/app/ClassWMResulthandler/clsDatabase.vb index 8b44ecd..3db3ea6 100644 --- a/app/ClassWMResulthandler/clsDatabase.vb +++ b/app/ClassWMResulthandler/clsDatabase.vb @@ -54,6 +54,7 @@ Public Class clsDatabase Oracle_Command.AddToStatementCache = True Catch ex As Exception + Logger.Warn($"PLSQL-Command: [{plsqlcommand}]") Logger.Error(ex) 'clsLogger.Add(ex.Message, True, "clsDatatabase.plsqlcommandDefine") Oracle_Conn.Close() @@ -71,6 +72,7 @@ Public Class clsDatabase Return True Catch ex As Exception + Logger.Warn($"PLSQL-Command: [{plsqlcommand}]") Logger.Error(ex) 'clsLogger.Add(ex.Message & vbNewLine & "Execute Command => (" & plsqlcommand & ")", True, "clsDatatabase.ExecuteonOracleDb") Oracle_Conn.Close() @@ -88,6 +90,7 @@ Public Class clsDatabase Catch ex As Exception + Logger.Warn($"PLSQL-Command: [{plsqlcommand}]") Logger.Error(ex) '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 diff --git a/app/ClassWMResulthandler/clsDateiverarbeitung.vb b/app/ClassWMResulthandler/clsDateiverarbeitung.vb index 7baba81..0278768 100644 --- a/app/ClassWMResulthandler/clsDateiverarbeitung.vb +++ b/app/ClassWMResulthandler/clsDateiverarbeitung.vb @@ -4,6 +4,7 @@ Imports System.Net Imports Newtonsoft.Json Imports System.Text Imports DigitalData.Modules.Logging +Imports System.Text.RegularExpressions Public Class clsDateiverarbeitung Dim Logger As Logger @@ -122,64 +123,134 @@ Public Class clsDateiverarbeitung Return False End Try End Function - 'Kopiert die übergebene Datei in den Zielpfad - Public Function Export_File(WDDatei As WMObject, Zielpfad As String) + Private Function CleanInput(strIn As String) As String + ' Replace invalid characters with empty strings. Try - If Not Zielpfad.EndsWith("\") Then - Zielpfad = Zielpfad & "\" + Return Regex.Replace(strIn, "[^\w\.@-]", "") + ' If we timeout when replacing invalid characters, + ' we should return String.Empty. + Catch ex As Exception + Logger.Error(ex) + Return String.Empty + End Try + End Function + Public Function Export_WMFile2HDD(oWMFile As WMObject, MyExportpath As String) + Try + If Not MyExportpath.EndsWith("\") Then + MyExportpath &= "\" End If - Logger.Info("Verarbeitung von Datei: " & WDDatei.aName) - 'Die Quelle zusammensetzen - Logger.Debug("PFAD: " & clsCURRENT.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 - Logger.Debug("ExportFileIO erzeugt.....") - ' Stream Interface bereitstellen - WDDatei.LockFor(WMObjectEditModeFileSystem) Try - If Not WDDatei.aLocked Then - WDDatei.lock() - End If + Logger.Info("Working on WMFile: " & oWMFile.aName) Catch ex As Exception - Logger.Error(ex) 'clsLogger.AddError("Unvorhergesehener Fehler beim Lock-Vorgang: " & ex.Message, "clsDV.Export_File") + Logger.Error(ex) Return False End Try + Dim ExportFileIO = New WMOTOOLLib.WMFileIO ' CreateObject("WMOTOOLLib.WMFileIO") ' New WMOTOOLLib.WMFileIO + Logger.Debug("ExportFileIO created...") - Dim oWMStream = WDDatei.OpenStream("BinaryObject", WMObjectStreamOpenModeReadWrite) + Dim oWMStream = oWMFile.OpenStream("BinaryObject", 1) '### VERSIONIERUNG ### Dim version As Integer = 2 'Dim Stammname As String = System.IO.Path.GetFileNameWithoutExtension(Quelle) - Dim Filename = WDDatei.aName.Substring(0, WDDatei.aName.LastIndexOf(".")) - Dim Extension = WDDatei.aName.Substring(WDDatei.aName.LastIndexOf(".")) - Dim tempFilename As String = Zielpfad & Filename & Extension + Dim oFilename = oWMFile.aName.Substring(0, oWMFile.aName.LastIndexOf(".")) + Dim oExtension = oWMFile.aName.Substring(oWMFile.aName.LastIndexOf(".")) + Dim oTempFilename As String = MyExportpath & oFilename & oExtension 'Überprüfen ob File existiert - Do While IO.File.Exists(tempFilename) = True - tempFilename = Zielpfad & Filename & "_" & version & Extension + Do While IO.File.Exists(oTempFilename) = True + oTempFilename = MyExportpath & oFilename & "_" & version & oExtension version = version + 1 Loop - Logger.Debug("Zieldateiname: " & tempFilename) + Logger.Debug("Exportfilename is: " & oTempFilename) ' den Dateiinhalt der neuen Datei zuweisen + ExportFileIO.bstrOriginalFileName = oTempFilename ExportFileIO.aWMStream = oWMStream - ExportFileIO.bstrOriginalFileName = tempFilename + 'Das eigentliche kopieren ExportFileIO.ExportOriginal(True) ' close the windream file stream oWMStream.Close() - WDDatei.Save() - WDDatei.unlock() - clsCURRENT.EXPORTED_FILENAME = tempFilename - Logger.Info("Datei erfolgreich nach '" & tempFilename & "' verschoben.") - aktfile_Exportresult = tempFilename - Return True - Catch ex As Exception - 'bei einem Fehler einen Eintrag in der Logdatei machen - Logger.Error(ex) + If File.Exists(oTempFilename) Then + clsCURRENT.EXPORTED_FILENAME = oTempFilename + Logger.Info($"File Export to HDD [{clsCURRENT.EXPORTED_FILENAME}]was successfull (File.Exists = True)!") + aktfile_Exportresult = clsCURRENT.EXPORTED_FILENAME + clsCURRENT.TEMP_FILES.Add(clsCURRENT.EXPORTED_FILENAME) + Logger.Debug("FileInfo Added to variables...") + Return True + Else + Logger.Warn($"Export not successfull or File.Exists = false Export: [{oTempFilename}]") + Return False + End If + Catch ex As Exception + Logger.Error(ex) + Logger.Info("Unexpected error in Export_WMFile: " & ex.Message) Return False End Try End Function + + + 'Kopiert die übergebene Datei in den Zielpfad + 'Public Function Export_File(oWMFile As WMObject, oZielpfad As String) + ' Try + ' If Not oZielpfad.EndsWith("\") Then + ' oZielpfad = oZielpfad & "\" + ' End If + ' Dim oNewFilename As String + ' Logger.Info("Verarbeitung von Datei: " & oWMFile.aName) + ' oNewFilename = CleanInput(oWMFile.aName) + ' 'Die Quelle zusammensetzen + ' Logger.Debug("PFAD: " & clsCURRENT.WDLAUFWERK & ":" & oWMFile.aPath & "\" & oWMFile.aName) + ' 'Dim Quelle As String = IO.Path.GetDirectoryName(WDLaufwerk & ":" & WDDatei.aPath & "\" & WDDatei.aName) + + ' Dim ExportFileIO = New WMOTOOLLib.WMFileIO ' CreateObject("WMOTOOLLib.WMFileIO") ' New WMOTOOLLib.WMFileIO + ' Logger.Debug("ExportFileIO erzeugt.....") + ' ' Stream Interface bereitstellen + ' oWMFile.LockFor(WMObjectEditModeFileSystem) + ' Try + ' If Not oWMFile.aLocked Then + ' oWMFile.lock() + ' End If + ' Catch ex As Exception + ' Logger.Error(ex) 'clsLogger.AddError("Unvorhergesehener Fehler beim Lock-Vorgang: " & ex.Message, "clsDV.Export_File") + ' Return False + ' End Try + + ' Dim oWMStream = oWMFile.OpenStream("BinaryObject", WMObjectStreamOpenModeReadWrite) + ' '### VERSIONIERUNG ### + ' Dim version As Integer = 2 + ' 'Dim Stammname As String = System.IO.Path.GetFileNameWithoutExtension(Quelle) + ' Dim oFilename = oWMFile.aName.Substring(0, oWMFile.aName.LastIndexOf(".")) + ' Dim oExtension = oWMFile.aName.Substring(oWMFile.aName.LastIndexOf(".")) + ' Dim oTempFilename As String = oZielpfad & oFilename & oExtension + ' 'Überprüfen ob File existiert + ' Do While IO.File.Exists(oTempFilename) = True + ' oTempFilename = oZielpfad & oFilename & "_" & version & oExtension + ' version = version + 1 + ' Loop + ' Logger.Debug("Zieldateiname: " & oTempFilename) + ' ' den Dateiinhalt der neuen Datei zuweisen + ' ExportFileIO.aWMStream = oWMStream + ' ExportFileIO.bstrOriginalFileName = oTempFilename + ' 'Das eigentliche kopieren + ' ExportFileIO.ExportOriginal(True) + ' ' close the windream file stream + ' oWMStream.Close() + ' oWMFile.Save() + ' oWMFile.unlock() + ' clsCURRENT.EXPORTED_FILENAME = oTempFilename + ' Logger.Info("Datei erfolgreich nach '" & oTempFilename & "' kopiert.") + ' aktfile_Exportresult = oTempFilename + ' clsCURRENT.TEMP_FILES.Add(oTempFilename) + ' Return True + ' Catch ex As Exception + ' 'bei einem Fehler einen Eintrag in der Logdatei machen + ' Logger.Warn($"Unexpected in Export-File: [{oWMFile.aName}]...") + ' Logger.Error(ex) + ' Return False + ' End Try + 'End Function Public Function Rename_File(WMFile As WMObject, konvention As String) Try Logger.Debug("Konvention: '" & konvention & "'") @@ -416,6 +487,9 @@ Public Class clsDateiverarbeitung Dim result = REGEX_REPLACE(WMFile, OracleCommandRAW) If result = Nothing Then Return False + ElseIf result.ToString.Contains("[%") Then + Logger.Warn($"Replace Function OracleCommandRAW did not match all patterns: {result.ToString}") + Return False End If @@ -436,6 +510,9 @@ Public Class clsDateiverarbeitung Dim result = REGEX_REPLACE(WMFile, SQLCommandRAW) If result = Nothing Then Return False + ElseIf result.ToString.Contains("[%") Then + Logger.Warn($"Replace Function SQLCommandRAW did not match all patterns: {result.ToString}") + Return False End If @@ -611,7 +688,7 @@ Public Class clsDateiverarbeitung Logger.Debug("REGEX_String after vector-for-each (" & i & ") " & _STRING) End If Else - Logger.Warn("Attention: Indexvalue is NOTHING, standardvalue '0' will be used", False, "clsDateiverarbeitung.REGEX_REPLACE") + Logger.Info($"Attention: Indexvalue for Index [{reg_element_Ohne_SZ}]is NOTHING, standardvalue '0' will be used - clsDateiverarbeitung.REGEX_REPLACE") _STRING = _STRING.Replace(reg_element.Value, "0") End If End If diff --git a/app/ClassWMResulthandler/clsEmail.vb b/app/ClassWMResulthandler/clsEmail.vb index e5cf9b2..470eee4 100644 --- a/app/ClassWMResulthandler/clsEmail.vb +++ b/app/ClassWMResulthandler/clsEmail.vb @@ -4,6 +4,9 @@ Imports Independentsoft.Email Imports Independentsoft.Email.Smtp Imports Independentsoft.Email.Mime Imports DigitalData.Modules.Logging +Imports System.Net.Mail +Imports System.Net +Imports System.Net.Mime Public Class clsEmail Dim Logger As DigitalData.Modules.Logging.Logger @@ -15,30 +18,135 @@ Public Class clsEmail mailfrom As String, mailsmtp As String, mailport As Integer, mailUser As String, mailPW As String, AUTH_TYPE As String, Optional attment As String = "") Try - Dim message As New Message() - message.From = New Mailbox(mailUser, mailUser) - message.To.Add(New Mailbox(mailto)) - message.Subject = mailSubject - message.Body = mailBody - message.ContentType = New ContentType("text", "plain", "iso-8859-1") - message.ContentTransferEncoding = ContentTransferEncoding.QuotedPrintable + Dim oReceipiants As String() + If mailto.Contains(";") Then + oReceipiants = mailto.Split(";") + Else + ReDim Preserve oReceipiants(0) + oReceipiants(0) = mailto + End If + For Each oMailReceipiant As String In oReceipiants + Dim sClient = New Mail.SmtpClient(mailsmtp) + Dim mymesssage As New MailMessage + sClient.Port = mailport + If AUTH_TYPE = "SSL" Then + sClient.EnableSsl = True + Else + sClient.EnableSsl = False + End If - Dim client As New SmtpClient(mailsmtp, mailport) - client.EnableSsl = True - client.ValidateRemoteCertificate = False + sClient.Credentials = New NetworkCredential(mailUser, mailPW) + sClient.UseDefaultCredentials = False + + mymesssage.Body = $"This is the body (text will be replaced within profile)!
mailsmtp: {mailsmtp}
mailport: {mailport}
mailUser: {mailUser}
mailPW: XXXX
AUTH_TYPE: {AUTH_TYPE}" + Dim htmlView As AlternateView = AlternateView.CreateAlternateViewFromString(mymesssage.Body) + htmlView.ContentType = New System.Net.Mime.ContentType("text/html") + mymesssage.AlternateViews.Add(htmlView) + + mymesssage.From = New MailAddress(mailfrom) + mymesssage.Subject = mailSubject + mymesssage.To.Add(New MailAddress(oMailReceipiant)) + + If attment <> String.Empty Then + Dim oAttment As String = attment.Replace("W:\", "\\windream\objects\") + + If System.IO.File.Exists(oAttment) Then + Logger.Info($"working on attachment {oAttment}...") + Dim oAttachment As New System.Net.Mail.Attachment(oAttment) + + mymesssage.Attachments.Add(oAttachment) + Else + MsgBox($"Attachment {oAttment.ToString} is not existing - Mail won't be send!") + Return False + End If + End If + + + sClient.Send(mymesssage) + Logger.Info($"Email has been send to {oMailReceipiant}!!") + Next - client.Connect() - client.Login(mailUser, mailPW) - client.Send(message) - client.Disconnect() Return True Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.Critical) + Return False End Try End Function + Public Function Email_Send(ByVal mailSubject As String, ByVal mailBody As String, mailto As String, + mailfrom As String, mailsmtp As String, mailport As Integer, mailUser As String, mailPW As String, + AUTH_TYPE As String, Optional attment As String = "", Optional Test As Boolean = False) + Try + Dim oError As Boolean = False + Dim oReceipiants As String() + If mailto.Contains(";") Then + oReceipiants = mailto.Split(";") + Else + ReDim Preserve oReceipiants(0) + oReceipiants(0) = mailto + End If + For Each oMailReceipiant As String In oReceipiants + Dim sClient = New Net.Mail.SmtpClient(mailsmtp) + Dim mymesssage As New MailMessage + sClient.Port = mailport + If AUTH_TYPE = "SSL" Then + sClient.EnableSsl = True + Else + sClient.EnableSsl = False + End If + sClient.Credentials = New NetworkCredential(mailUser, mailPW) + sClient.UseDefaultCredentials = False + If Test = True Then + mymesssage.Body = $"This is the body (text will be replaced within profile)!
mailsmtp: {mailsmtp}
mailport: {mailport}
mailUser: {mailUser}
mailPW: XXXX
AUTH_TYPE: {AUTH_TYPE}" + Else + mymesssage.Body = mailBody + End If + + 'mymesssage.IsBodyHtml = True + Dim htmlView As AlternateView = AlternateView.CreateAlternateViewFromString(mymesssage.Body) + htmlView.ContentType = New System.Net.Mime.ContentType("text/html") + mymesssage.AlternateViews.Add(htmlView) + attment = attment.Replace("W:\", "\\windream\objects\") + If attment <> String.Empty Then + If System.IO.File.Exists(attment) Then + Logger.Info($"working on attachment {attment.ToString}...") + Dim oAttachment As New System.Net.Mail.Attachment(attment) + + 'If attment.ToLower.EndsWith("pdf") Then + ' oAttachment.ContentType = New Independentsoft.Email.Mime.ContentType("application", "pdf") + 'ElseIf attment.ToLower.EndsWith("jpg") Then + ' oAttachment.ContentType = New Independentsoft.Email.Mime.ContentType("application", "jpg") + 'ElseIf attment.ToLower.EndsWith("docx") Then + ' oAttachment.ContentType = New Independentsoft.Email.Mime.ContentType("application", "MS-word") + 'End If + mymesssage.Attachments.Add(oAttachment) + Else + Logger.Warn($"Attachment {attment.ToString} is not existing - Mail won't be send!") + oError = True + + End If + End If + + + mymesssage.From = New MailAddress(mailfrom) + mymesssage.Subject = mailSubject + mymesssage.To.Add(New MailAddress(oMailReceipiant)) + sClient.Send(mymesssage) + Next + If oError = False Then + Return True + Else + Return False + End If + + Catch ex As Exception + Logger.Error(ex) + Return False + End Try + + End Function Public Function Email_Send_Independentsoft(ByVal mailSubject As String, ByVal mailBody As String, mailto As String, mailfrom As String, mailsmtp As String, mailport As Integer, mailUser As String, mailPW As String, AUTH_TYPE As String, Optional attment As String = "") @@ -64,28 +172,31 @@ Public Class clsEmail message.Subject = mailSubject Logger.Debug($"Message created..") Dim textBodyPart As New BodyPart() - textBodyPart.ContentType = New ContentType("text", "html", "utf-8") + textBodyPart.ContentType = New Independentsoft.Email.Mime.ContentType("text", "html", "utf-8") textBodyPart.ContentTransferEncoding = ContentTransferEncoding.QuotedPrintable textBodyPart.Body = mailBody message.BodyParts.Add(textBodyPart) + attment = attment.Replace("W:\", "\\windream\objects\") If attment <> String.Empty Then If System.IO.File.Exists(attment) Then - Dim attachment1 As New Attachment(attment) + Logger.Info($"working on attachment {attment.ToString}...") + Dim attachment1 As New Independentsoft.Email.Mime.Attachment(attment) If attment.ToLower.EndsWith("pdf") Then - attachment1.ContentType = New ContentType("application", "pdf") + attachment1.ContentType = New Independentsoft.Email.Mime.ContentType("application", "pdf") ElseIf attment.ToLower.EndsWith("jpg") Then - attachment1.ContentType = New ContentType("application", "jpg") + attachment1.ContentType = New Independentsoft.Email.Mime.ContentType("application", "jpg") ElseIf attment.ToLower.EndsWith("docx") Then - attachment1.ContentType = New ContentType("application", "MS-word") + attachment1.ContentType = New Independentsoft.Email.Mime.ContentType("application", "MS-word") End If message.BodyParts.Add(attachment1) Else - Logger.Warn($"Attachment {attment.ToString} is not existing!") + Logger.Warn($"Attachment {attment.ToString} is not existing - Mail won't be send!") + Return False End If End If - Dim client As SmtpClient + Dim client As Smtp.SmtpClient Try - client = New SmtpClient(mailsmtp, mailport) + client = New Smtp.SmtpClient(mailsmtp, mailport) Catch ex As Exception Logger.Warn("clsEmail.Create Client: " & ex.Message) _error = True diff --git a/app/ClassWMResulthandler/clsJob_Work.vb b/app/ClassWMResulthandler/clsJob_Work.vb index 7169e12..5cb8760 100644 --- a/app/ClassWMResulthandler/clsJob_Work.vb +++ b/app/ClassWMResulthandler/clsJob_Work.vb @@ -44,7 +44,7 @@ Public Class clsJob_Work Logger.Warn("PWPlain is Nothing - Could not decrypt passwort 44") Return False End If - If _mail.Email_Send_Independentsoft(Email_subject, Email_Body, Email_receipiants, oMAILFROM, oMAILSMTP, oMAIL_PORT, oMAIL_USER, oMAIL_USER_PW, oMAIL_AUTH_TYPE, Attachment_Filename) = True Then + If _mail.Email_Send(Email_subject, Email_Body, Email_receipiants, oMAILFROM, oMAILSMTP, oMAIL_PORT, oMAIL_USER, oMAIL_USER_PW, oMAIL_AUTH_TYPE, Attachment_Filename) = True Then Return True Else Logger.Warn("Email_Send_Independentsoft was not successfull!") diff --git a/app/ClassWMResulthandler/clsProfil.vb b/app/ClassWMResulthandler/clsProfil.vb index c1dfc07..e94ccc4 100644 --- a/app/ClassWMResulthandler/clsProfil.vb +++ b/app/ClassWMResulthandler/clsProfil.vb @@ -128,6 +128,7 @@ Public Class clsProfil Logger.Info($"Working on profile '{_Profilname}'") clsCURRENT.DT_TBDD_EMAIL = _database.Return_Datatable("SELECT * FROM TBDD_EMAIL_ACCOUNT WHERE ACTIVE = 1") clsCURRENT.PROFILE_HandledFiles = Nothing + clsCURRENT.EXPORTED_FILENAME = "" Logger.Debug("Start RUN of profile '" & _Profilname & "'") 'den Durchlaufszeitpunkt speichern If File.Exists(_profwdSuche) = False Then @@ -160,7 +161,11 @@ Public Class clsProfil Dim FileJobSuccessful As Boolean = False Dim CountExportedDoc As Integer = 0 clsCURRENT.PROFILE_HandledFiles = Nothing + Dim oFileRunNo As String + Dim oCountDocs As Integer = 0 For Each WMdok As WMObject In windreamSucheErgebnisse + oCountDocs += 1 + oFileRunNo = "#DocRun" & oCountDocs.ToString 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 @@ -178,6 +183,15 @@ Public Class clsProfil If Not IsNothing(clsCURRENT.DT_TBDD_EMAIL) And clsCURRENT.DT_TBDD_EMAIL.Rows.Count >= 1 Then Dim oAttachment = clsCURRENT.WDLAUFWERK & ":" & WMdok.aPath + If _dateiverarbeitung.Export_WMFile2HDD(WMdok, Path.GetTempPath()) = True Then + oAttachment = clsCURRENT.EXPORTED_FILENAME + + Else + Logger.Warn($"Could not create a tempfile...") + FileJobSuccessful = False + Return False + End If + Dim MAILFROM As String = "" Dim MAILSMTP As String = "" @@ -201,16 +215,10 @@ Public Class clsProfil Dim PWPlain = wrapper.DecryptData(MAIL_USER_PW) If Not IsNothing(PWPlain) Then - If PWPlain <> "" Then - MAIL_USER_PW = PWPlain - Else - Logger.Warn("PWPlain is string.empty - Could not decrypt passwort181") - - Return False - End If + MAIL_USER_PW = PWPlain Else - Logger.Warn("PWPlain is string.empty - Could not decrypt passwort188") + Logger.Warn("PWPlain is Nothing - Could not decrypt passwort188") Return False End If @@ -222,32 +230,34 @@ Public Class clsProfil Email_Betreff = _dateiverarbeitung.REGEX_REPLACE(WMdok, Email_Betreff) Email_Body = _dateiverarbeitung.REGEX_REPLACE(WMdok, Email_Body) - If _email.Email_Send_Independentsoft(Email_Betreff, Email_Body, Email_Empfänger, MAILFROM, MAILSMTP, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_AUTH_TYPE, oAttachment) = True Then + If _email.Email_Send(Email_Betreff, Email_Body, Email_Empfänger, MAILFROM, MAILSMTP, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_AUTH_TYPE, oAttachment) = True Then FileJobSuccessful = True Else - Logger.Warn("Email_Send_Independentsoft was not successfull!") + Logger.Warn($"{oFileRunNo} Email_Send_Independentsoft 1 was not successfull!") + FileJobSuccessful = False End If Else - Logger.Warn("DT_TBDD_EMAIL is nothing or contains no rows") + Logger.Warn($"{oFileRunNo} DT_TBDD_EMAIL is nothing or contains no rows") Return False End If Case "Export HDD".ToUpper - Logger.Info("JobType: Case Export HDD") + Logger.Info($"{oFileRunNo} JobType: Case Export HDD") 'Für jedes Dokument in der Windream-Ergebnisliste 'For Each dok As WMObject In windreamSucheErgebnisse ' aktuelles Dokument zum Export bereitstellen clsCURRENT.EXPORTED_FILENAME = "" - If _dateiverarbeitung.Export_File(WMdok, DR_PR_JB.Item("STRING1")) = True Then + If _dateiverarbeitung.Export_WMFile2HDD(WMdok, DR_PR_JB.Item("STRING1")) = True Then ReDim Preserve clsCURRENT.PROFILE_HandledFiles(CountExportedDoc) clsCURRENT.PROFILE_HandledFiles(CountExportedDoc) = clsCURRENT.EXPORTED_FILENAME CountExportedDoc += 1 FileJobSuccessful = True + Logger.Info($"{oFileRunNo} Export HDD completed!") End If 'Next Case "BNS json Download".ToUpper - Logger.Info("JobType: BNS json Download") + Logger.Info($"{oFileRunNo} JobType: BNS json Download") FileJobSuccessful = _dateiverarbeitung.BNSjsonDownload(WMdok, DR_PR_JB.Item("STRING1"), DR_PR_JB.Item("STRING2")) 'Case "Send to printer".ToUpper ' Logger.Info("JobType: Send to printer") @@ -305,9 +315,26 @@ Public Class clsProfil 'Für jeden File-Job For Each DR_PR_FILE_JOB As DataRow In DT_PROFIL_FILE_JOB.Rows If FileJobSuccessful = False Then - Logger.Info("AUSSTIEG FOR SCHLEIFE cause FileJobSuccessful = False...") + Logger.Info($"{oFileRunNo} AUSSTIEG FOR SCHLEIFE cause FileJobSuccessful = False...") Exit For End If + + If DR_PR_FILE_JOB.Item("STRING2").ToString.Contains("EXPORTED_FILENAME") Then + If clsCURRENT.EXPORTED_FILENAME = "" Then + Logger.Warn($"{oFileRunNo} clsCURRENT.EXPORTED_FILENAME Is empty! So FileJobSuccessful will be set to FALSE") + FileJobSuccessful = False + Continue For + Else + If File.Exists(clsCURRENT.EXPORTED_FILENAME) = False Then + Logger.Warn($"{oFileRunNo} clsCURRENT.EXPORTED_FILENAME [{clsCURRENT.EXPORTED_FILENAME}] not existing! So FileJobSuccessful will be set to FALSE") + FileJobSuccessful = False + Continue For + Else + Logger.Debug($"{oFileRunNo} clsCURRENT.EXPORTED_FILENAME [{clsCURRENT.EXPORTED_FILENAME}] exists!") + End If + End If + End If + Select Case DR_PR_FILE_JOB.Item("TYP").ToString.ToLower Case "Set Index".ToLower Try @@ -319,17 +346,17 @@ Public Class clsProfil idxvalue = idxvalue.Replace("[%DATETIME]", Now.ToString) End If idxvalue = _dateiverarbeitung.REGEX_REPLACE(WMdok, idxvalue) - Logger.Debug($"Index '{idxName}' shall be set with value '{idxvalue}'") + Logger.Debug($"{oFileRunNo} Index '{idxName}' shall be set with value '{idxvalue}'") Dim arrIndex() As String ReDim Preserve arrIndex(0) arrIndex(0) = idxName - Logger.Debug("...nach arrIndex") + Logger.Debug($"{oFileRunNo} ...nach arrIndex") Dim arrValue() As String Dim aktvalue As Object aktvalue = WMdok.GetVariableValue(idxName) - Logger.Debug("...nach aktValue zuweisen..") + Logger.Debug($"{oFileRunNo} ...nach aktValue zuweisen..") Dim wmtype = clsWindream_allgemein.GetTypeOfIndexAsIntByName(idxName) Dim is_vektor As Boolean = False Select Case wmtype @@ -372,9 +399,10 @@ Public Class clsProfil ' 07.01.2019: Weitere Jobs bei Fehler in RunIndexing überspringen If oErrorOccurred = True Then FileJobSuccessful = False + End If Else - Logger.Warn("arrValue is nothing - keine Indexierung") + Logger.Warn($"{oFileRunNo} arrValue is nothing - keine Indexierung") End If Catch ex As Exception @@ -382,14 +410,14 @@ Public Class clsProfil 'clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(SetIndex)") End Try Case "Rename File with windream Index".ToLower - Logger.Debug("Exportierte Datei soll nach Indexvorgaben umbenannt werden...") + Logger.Debug($"{oFileRunNo} Exportierte Datei soll nach Indexvorgaben umbenannt werden...") _dateiverarbeitung.Rename_File(WMdok, DR_PR_FILE_JOB.Item("STRING1").ToString) Case "Rename File with WMVector (only one)".ToLower - Logger.Debug("Exportierte Datei soll nach VektorIndexvorgaben umbenannt werden...") + Logger.Debug($"{oFileRunNo} Exportierte Datei soll nach VektorIndexvorgaben umbenannt werden...") _dateiverarbeitung.Rename_File_Vektor(WMdok, DR_PR_FILE_JOB.Item("STRING1").ToString) Case "Execute Oracle Command".ToLower Try - Logger.Debug("Execute Oracle Command.......") + Logger.Debug($"{oFileRunNo} Execute Oracle Command.......") Dim oracleconnectionstring = DR_PR_FILE_JOB.Item("STRING1").ToString Dim oracleCommandRAW = DR_PR_FILE_JOB.Item("STRING2").ToString FileJobSuccessful = _dateiverarbeitung.RUN_ORACLE_COMMAND(WMdok, oracleconnectionstring, oracleCommandRAW) @@ -401,7 +429,7 @@ Public Class clsProfil Try Dim MSSQLconnectionstring = DR_PR_FILE_JOB.Item("STRING1").ToString Dim MSSQLCommandRAW = DR_PR_FILE_JOB.Item("STRING2").ToString - Logger.Debug("Execute MSSQL Command.......") + Logger.Debug($"{oFileRunNo} Execute MSSQL Command.......") FileJobSuccessful = _dateiverarbeitung.RUN_MSSQL_COMMAND(WMdok, MSSQLconnectionstring, MSSQLCommandRAW) Catch ex As Exception Logger.Error(ex) @@ -426,8 +454,8 @@ Public Class clsProfil Logger.Debug("pdftk location: " & pdftk) clsCURRENT.CONCATTED_FILE = DR_PR_JB.Item("STRING1") Logger.Debug("CONCATTED_FILE location: " & clsCURRENT.CONCATTED_FILE) - Dim deleteJaNein = DR_PR_JB.Item("STRING2").ToString.ToUpper - Logger.Debug("deleteJaNein: " & deleteJaNein.ToString) + Dim oDeleteResultFile = DR_PR_JB.Item("STRING2").ToString.ToUpper + Logger.Debug("deleteJaNein: " & oDeleteResultFile.ToString) If File.Exists(pdftk) Then If File.Exists(clsCURRENT.CONCATTED_FILE) Then Try @@ -496,10 +524,11 @@ Public Class clsProfil Loop sw.Stop() - If deleteJaNein = "JA" Then + If oDeleteResultFile = "JA" Then For Each str As String In clsCURRENT.PROFILE_HandledFiles Try File.Delete(str) + Logger.Debug($"Deleted file [{str}]!") Catch ex As Exception Logger.Error(ex) End Try @@ -562,10 +591,11 @@ Public Class clsProfil Return False End If - If _email.Email_Send_Independentsoft(Email_Betreff, Email_Body, Email_Empfänger, MAILFROM, MAILSMTP, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_AUTH_TYPE, clsCURRENT.CONCATTED_FILE) = True Then + If _email.Email_Send(Email_Betreff, Email_Body, Email_Empfänger, MAILFROM, MAILSMTP, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_AUTH_TYPE, clsCURRENT.CONCATTED_FILE) = True Then FileJobSuccessful = True Else - Logger.Warn("Email_Send_Independentsoft was not successfull!") + Logger.Warn("Email_Send_Independentsoft 2 was not successfull!") + FileJobSuccessful = False End If @@ -581,10 +611,10 @@ Public Class clsProfil Case "Send to printer".ToUpper Logger.Info("Working on CASE Send to printer.... ") Dim printername = DR_PR_JB.Item("STRING1") - For Each str As String In clsCURRENT.PROFILE_HandledFiles + For Each oFileString As String In clsCURRENT.PROFILE_HandledFiles Try Dim myproc As Process = New Process() - myproc.StartInfo.FileName = """" & str & """" + myproc.StartInfo.FileName = """" & oFileString & """" myproc.StartInfo.Verb = "printto" myproc.StartInfo.Arguments = printername myproc.StartInfo.UseShellExecute = True @@ -605,9 +635,10 @@ Public Class clsProfil FileJobSuccessful = True sw.Stop() ' myproc.Kill() - File.Delete(str) + File.Delete(oFileString) + Logger.Debug($"Deleted oFileString [{oFileString}]!") Catch ex As Exception - Logger.Warn("Could not print (printto) file: " & str) + Logger.Warn("Could not print (printto) file: " & oFileString) Logger.Error(ex) End Try Next diff --git a/app/ClassWMResulthandler/clsWindream_Allgemein.vb b/app/ClassWMResulthandler/clsWindream_Allgemein.vb index fa7cfbf..a2d27a9 100644 --- a/app/ClassWMResulthandler/clsWindream_Allgemein.vb +++ b/app/ClassWMResulthandler/clsWindream_Allgemein.vb @@ -43,7 +43,7 @@ Public Class clsWindream_allgemein ' wenn ein Fehler bei der Initialisierung auftrat If Not Init() Then ' Nachricht ausgeben - Logger.Warn("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") + Logger.Warn("Error while initializing WM-Class!!") ' das Programm "abschießen" Process.GetCurrentProcess.Kill() End If @@ -464,7 +464,7 @@ Public Class clsWindream_allgemein Return oSearch.execute Catch ex As Exception Logger.Error(ex) - Logger.Warn($"WM-SEARCH ({wdfLocation})") + Logger.Warn($"WM-SEARCH in Exception ({wdfLocation})") Return Nothing End Try @@ -552,10 +552,17 @@ Public Class clsWindream_allgemein If WMObjects.Count > 0 Then For Each dok As WMObject In WMObjects - Dim oPath As String = dok.aPath Dim oDOC_ID = dok.GetVariableValue(NameIndexDocID) Dim oCreated = dok.GetVariableValue(NameIndexCreated) - Logger.Debug($"Adding DocInfo {oDOC_ID.ToString}|{oPath}|{oCreated}") + Logger.Debug($"Adding DocInfo {oDOC_ID.ToString}|{dok.aPath}|{oCreated}") + Dim oPath As String + If dok.aPath.StartsWith("\") Then + oPath = dok.aPath.Substring(1, dok.aPath.Length - 1) + Else + oPath = dok.aPath + End If + + dtresult.Rows.Add(oDOC_ID, oPath, oCreated) Next dtresult.AcceptChanges() @@ -563,11 +570,33 @@ Public Class clsWindream_allgemein Return dtresult Catch ex As Exception Logger.Error(ex) - Logger.Warn($"WM-SEARCH ({wdfLocation})") + Logger.Warn($"WM-SEARCH from GetSearchDocumentsDT ({wdfLocation})") Return dtresult End Try End Function + Public Function TestFileExists(Path As String) As Boolean + Return TestObjectExists(GetNormalizedPath(Path), WMEntityDocument) + End Function + Private Function TestObjectExists(ObjectName As String, ObjectType As WMEntity) As Boolean + Try + Dim oObjectId = 0 + Dim oObjectDbId = 0 + Return CURRENToWMSession.WMObjectExists(ObjectType, ObjectName, oObjectId, oObjectDbId) + Catch ex As Exception + Logger.Error(ex, "Error while checking existence of WMObject {0} of type {1}", ObjectName, ObjectType.ToString) + Return False + End Try + End Function + Private Function GetNormalizedPath(Path As String) As String + Dim oNormalizedPath = Path + + If Not Path.StartsWith("\") And Path.ToUpper().StartsWith(CURRENT_WMDriveLetter.ToUpper) Then + oNormalizedPath = Path.Substring(2) + End If + + Return oNormalizedPath + End Function #End Region End Class diff --git a/app/DDWDResultHandler/App.config b/app/DDWDResultHandler/App.config index bef02ee..1b577f1 100644 --- a/app/DDWDResultHandler/App.config +++ b/app/DDWDResultHandler/App.config @@ -6,6 +6,9 @@
+ +
+ @@ -13,11 +16,11 @@ - + Data Source=172.24.12.41\tests;Initial Catalog=DD_ECM_RENOLIT;Persist Security Info=True;User ID=sa;Password=dd - Data Source=172.24.12.41\tests;Initial Catalog=DD_ECM_TEST;Persist Security Info=True;User ID=sa;Password=dd + @@ -40,4 +43,11 @@ + + + + + + + \ No newline at end of file diff --git a/app/DDWDResultHandler/DDWDResultHandler.vb b/app/DDWDResultHandler/DDWDResultHandler.vb index 261aa66..edce853 100644 --- a/app/DDWDResultHandler/DDWDResultHandler.vb +++ b/app/DDWDResultHandler/DDWDResultHandler.vb @@ -9,7 +9,7 @@ Public Class DDWDResultHandler Private _database As DD_WMResulthandler.clsDatabase Private _profil As clsProfil - Public Shared threadRunner As BackgroundWorker + Public Shared threadResultHandler As BackgroundWorker Public Shared threadPMRefresh As BackgroundWorker Private Logger As Logger @@ -33,14 +33,6 @@ Public Class DDWDResultHandler ' Code zum Starten des Dienstes hier einfügen. Diese Methode sollte Vorgänge ' ausführen, damit der Dienst gestartet werden kann. 'EventLog1.WriteEntry("Dienst 'DD windream Result Handler' gestartet") - - Try - If Not System.Diagnostics.EventLog.SourceExists("DDWMResultHandler") Then - System.Diagnostics.EventLog.CreateEventSource("DDWMResultHandler", "DigitalData Log") - End If - Catch ex As Exception - EventLog.WriteEntry("DDWMResultHandler", "ERROR in Creating source:" & ex.ToString(), EventLogEntryType.Error) - End Try Try Try MyLogger = New LogConfig(LogConfig.PathType.CustomPath, Path.Combine(My.Application.Info.DirectoryPath, "Log")) @@ -52,59 +44,62 @@ Public Class DDWDResultHandler End Try - If My.Settings.SQLSERVER_CS = String.Empty Then - Logger.Warn("Achtung: Es wurde noch kein Datenbank-ConnectionString hinterlegt.") + 'If _database.Init(My.Settings.SQLSERVER_CS_RH, True) = False Then + ' Logger.Warn("Achtung: Es konnte keine Verbindung zur Datenbank '" & My.Settings.SQLSERVER_CS_RH & "' hergestellt werden!") + ' Else + + If clsCURRENT.LOG_ERRORS_ONLY = False Then + MyLogger.Debug = True Else - If _database.Init(My.Settings.SQLSERVER_CS, True) = False Then - Logger.Warn("Achtung: Es konnte keine Verbindung zur Datenbank '" & My.Settings.SQLSERVER_CS & "' hergestellt werden!") - Else + MyLogger.Debug = False + End If + oFirstRun = True + ' '#Thread für Durchlauf generieren + DDWDResultHandler.threadResultHandler = New BackgroundWorker() + DDWDResultHandler.threadResultHandler.WorkerReportsProgress = True + DDWDResultHandler.threadResultHandler.WorkerSupportsCancellation = True + AddHandler threadResultHandler.DoWork, AddressOf RUN_RESULTHANDLER + AddHandler threadResultHandler.RunWorkerCompleted, AddressOf Thread_Completed - If clsCURRENT.LOG_ERRORS_ONLY = False Then - MyLogger.Debug = True - Else - MyLogger.Debug = False - End If - oFirstRun = True - ' '#Thread für Durchlauf generieren - DDWDResultHandler.threadRunner = New BackgroundWorker() - DDWDResultHandler.threadRunner.WorkerReportsProgress = True - DDWDResultHandler.threadRunner.WorkerSupportsCancellation = True - AddHandler threadRunner.DoWork, AddressOf RUN_THREAD - AddHandler threadRunner.RunWorkerCompleted, AddressOf Thread_Completed - - ' '### Den Timer generieren - Dim Timer_Durchlauf As New System.Timers.Timer() - 'Das Event hinterlegen welches bei "Tick" ausgelöst wird - AddHandler Timer_Durchlauf.Elapsed, AddressOf Thread_Run - ' Set the Interval - Timer_Durchlauf.Interval = 60000 - 'ClassLogger.Add("Timer - Intervall: " & clsSQLITE.konf_intervall & " Minuten", False) - Timer_Durchlauf.Enabled = True - Logger.Debug("Timer gestartet") - ' Und den Durchlauf das erste Mal starten + ' '### Den Timer generieren + Dim Timer_Durchlauf As New System.Timers.Timer() + 'Das Event hinterlegen welches bei "Tick" ausgelöst wird + AddHandler Timer_Durchlauf.Elapsed, AddressOf Thread_Run + ' Set the Interval + Timer_Durchlauf.Interval = 60000 + Timer_Durchlauf.Enabled = True + Logger.Debug("Timer gestartet") + ' Und den Durchlauf das erste Mal starten - DDWDResultHandler.threadPMRefresh = New BackgroundWorker() - DDWDResultHandler.threadPMRefresh.WorkerReportsProgress = True - DDWDResultHandler.threadPMRefresh.WorkerSupportsCancellation = True - AddHandler threadPMRefresh.DoWork, AddressOf RUNPMRefresh - AddHandler threadPMRefresh.RunWorkerCompleted, AddressOf ThreadPMRefresh_Completed + DDWDResultHandler.threadPMRefresh = New BackgroundWorker() + DDWDResultHandler.threadPMRefresh.WorkerReportsProgress = True + DDWDResultHandler.threadPMRefresh.WorkerSupportsCancellation = True + AddHandler threadPMRefresh.DoWork, AddressOf RUNPMRefresh + AddHandler threadPMRefresh.RunWorkerCompleted, AddressOf ThreadPMRefresh_Completed - ' '### Den Timer generieren - Dim TimerPMRefresh As New System.Timers.Timer() - 'Das Event hinterlegen welches bei "Tick" ausgelöst wird - AddHandler TimerPMRefresh.Elapsed, AddressOf ThreadPMRefreshRun + ' '### Den Timer generieren + Dim TimerPMRefresh As New System.Timers.Timer() + 'Das Event hinterlegen welches bei "Tick" ausgelöst wird + AddHandler TimerPMRefresh.Elapsed, AddressOf ThreadPMRefreshRun - - ' Und den Durchlauf das erste Mal starten - threadRunner.RunWorkerAsync() - ' Set the Interval - TimerPMRefresh.Interval = 120000 '2 minutes - 'ClassLogger.Add("Timer - Intervall: " & clsSQLITE.konf_intervall & " Minuten", False) - TimerPMRefresh.Enabled = True + ' Set the Interval + TimerPMRefresh.Interval = 120000 '2 minutes + 'ClassLogger.Add("Timer - Intervall: " & clsSQLITE.konf_intervall & " Minuten", False) + TimerPMRefresh.Enabled = True + 'End If + If My.Settings.SQLSERVER_CS_RH = "" And My.Settings.SQLSERVER_CS_PMRefresh <> "" Then + Logger.Info("Thread PM Refresh will now be started for initial Run as Resulthandler's ConnString is empty...") + threadPMRefresh.RunWorkerAsync() + Else + If My.Settings.SQLSERVER_CS_RH <> "" Then + Logger.Info("Thread ResultHandler will now be started for initial Run..") + threadResultHandler.RunWorkerAsync() + Logger.Info("Thread PM Refresh will be started after 2mins for initial Run..") End If End If + Catch ex As Exception EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in OnStart: " & ex.ToString(), EventLogEntryType.Error) Logger.Error(ex) @@ -112,8 +107,8 @@ Public Class DDWDResultHandler End Sub Public Sub Thread_Run() - If Not threadRunner.IsBusy Then - threadRunner.RunWorkerAsync() + If Not threadResultHandler.IsBusy Then + threadResultHandler.RunWorkerAsync() End If End Sub Public Sub ThreadPMRefreshRun() @@ -127,20 +122,24 @@ Public Class DDWDResultHandler Protected Overrides Sub OnStop() Try ' Hier Code zum Ausführen erforderlicher Löschvorgänge zum Beenden des Dienstes einfügen. - Logger.Warn("WindreamResultHandler wurde gestoppt!") - 'LoggerPMR.Warn("WindreamResultHandler has been stopped!") - _database.Execute_non_Query("Update TBWMRH_PROFIL SET Running = 1 WHERE GUID = " & _PROFIL_ID) + Logger.Info("WindreamResultHandler wurde gestoppt!") + Catch ex As Exception EventLog.WriteEntry("DDWMResultHandler", "Unexpected error in OnStop: " & ex.ToString(), EventLogEntryType.Error) End Try End Sub - Public Sub RUN_THREAD(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) + Public Sub RUN_RESULTHANDLER(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Try MyLogger = New LogConfig(LogConfig.PathType.CustomPath, Path.Combine(My.Application.Info.DirectoryPath, "Log")) Logger = MyLogger.GetLogger() _database = New clsDatabase(MyLogger) + If My.Settings.SQLSERVER_CS_RH = "" Then + Logger.Debug("RESULT HANDLER ConString not configured... No Run") + Exit Sub + End If + Dim notcompleted As Boolean = False 'clsLogger.Init(My.Application.Info.DirectoryPath & "\Log", "_SERVICEResultHandler") Logger.Debug("RUN_THREAD WMResulthandler started..") @@ -148,9 +147,10 @@ Public Class DDWDResultHandler _windream = New clsWindream_allgemein(MyLogger) 'windream initialisieren If _windream.Init() = True Then + clsCURRENT.TEMP_FILES.Clear() Logger.Debug("windream vollumfänglich initialisiert!") 'Zur sicherheit die DB nochmal initialiseren - If _database.Init(My.Settings.SQLSERVER_CS, True) = True Then + If _database.Init(My.Settings.SQLSERVER_CS_RH, True) = True Then Dim DT As DataTable = _database.Return_Datatable("select * from TBWMRH_KONFIGURATION where GUID = 1") If DT.Rows.Count = 1 Then clsCURRENT.DT_TBWMRH_KONFIGURATION = DT @@ -188,6 +188,17 @@ Public Class DDWDResultHandler Logger.Info("Keine aktiven Profile WMResulthandler vorhanden") notcompleted = True End If + Try + For Each _file In clsCURRENT.TEMP_FILES + 'Dim oFile As New FileInfo(_file) + 'If (DateTime.UtcNow - oFile.CreationTimeUtc > TimeSpan.FromDays(1)) Then + System.IO.File.Delete(_file) + 'End If + Next + Catch ex As Exception + + End Try + _database.Execute_non_Query("UPDATE TBWMRH_KONFIGURATION SET LAST_TICK = GETDATE() WHERE GUID = 1") If oFirstRun = True Then oFirstRun = False @@ -275,8 +286,8 @@ Public Class DDWDResultHandler End Sub Public Function Thread_Abbrechen() Try - If DDWDResultHandler.threadRunner.IsBusy Then - DDWDResultHandler.threadRunner.CancelAsync() + If DDWDResultHandler.threadResultHandler.IsBusy Then + DDWDResultHandler.threadResultHandler.CancelAsync() End If Return True Catch ex As Exception diff --git a/app/DDWDResultHandler/My Project/Settings.Designer.vb b/app/DDWDResultHandler/My Project/Settings.Designer.vb index b49b8e3..e4aac9b 100644 --- a/app/DDWDResultHandler/My Project/Settings.Designer.vb +++ b/app/DDWDResultHandler/My Project/Settings.Designer.vb @@ -58,21 +58,32 @@ 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 SQLSERVER_CS() As String + Public ReadOnly Property SQLSERVER_CS_RH() As String Get - Return CType(Me("SQLSERVER_CS"),String) + Return CType(Me("SQLSERVER_CS_RH"),String) End Get End Property _ + Global.System.Configuration.DefaultSettingValueAttribute("")> _ Public ReadOnly Property SQLSERVER_CS_PMRefresh() As String Get Return CType(Me("SQLSERVER_CS_PMRefresh"),String) End Get End Property + + _ + Public Property PMREFRESH_INTERVALL() As String + Get + Return CType(Me("PMREFRESH_INTERVALL"),String) + End Get + Set + Me("PMREFRESH_INTERVALL") = value + End Set + End Property End Class End Namespace diff --git a/app/DDWDResultHandler/My Project/Settings.settings b/app/DDWDResultHandler/My Project/Settings.settings index c5424ef..a729f31 100644 --- a/app/DDWDResultHandler/My Project/Settings.settings +++ b/app/DDWDResultHandler/My Project/Settings.settings @@ -2,11 +2,11 @@ - + Data Source=172.24.12.41\tests;Initial Catalog=DD_ECM_RENOLIT;Persist Security Info=True;User ID=sa;Password=dd - Data Source=172.24.12.41\tests;Initial Catalog=DD_ECM_TEST;Persist Security Info=True;User ID=sa;Password=dd + \ No newline at end of file diff --git a/app/DDWDResultHandler/clsPMRefresh.vb b/app/DDWDResultHandler/clsPMRefresh.vb index 61e6465..50cf76f 100644 --- a/app/DDWDResultHandler/clsPMRefresh.vb +++ b/app/DDWDResultHandler/clsPMRefresh.vb @@ -9,7 +9,7 @@ Public Class clsPMRefresh Private oConfigschedule Private oConfigIDXName_DocID Private oConfigIDXName_Created - Private oConfigWMDrive + 'Private oConfigWMDrive Private oConfigLOGERRONLY As Boolean Sub New(theLogger As LogConfig) MyLogger = theLogger @@ -31,7 +31,7 @@ Public Class clsPMRefresh oConfigschedule = oDTPM_CONFIG.Rows(0).Item("SERVICE_SCHEDULE").ToString oConfigIDXName_DocID = oDTPM_CONFIG.Rows(0).Item("SERVICE_IDXNAME_DOCID").ToString oConfigIDXName_Created = oDTPM_CONFIG.Rows(0).Item("SERVICE_IDXNAME_CREATED").ToString - oConfigWMDrive = oDTPM_CONFIG.Rows(0).Item("SERVICE_WMDRIVE_LETTER").ToString + 'oConfigWMDrive = oDTPM_CONFIG.Rows(0).Item("SERVICE_WMDRIVE_LETTER").ToString oConfigLOGERRONLY = oDTPM_CONFIG.Rows(0).Item("SERVICE_LOG_ERRORS_ONLY") Dim oSplit As String() oSplit = oConfigschedule.Split(";") @@ -125,7 +125,6 @@ Public Class clsPMRefresh '---------------------- für jedes Profil die Dateien überprüfen ------------------------ For Each Profile_Row In oDTPROFILES.Rows oStep = "4a" - Console.WriteLine(">> Dateien für Profil '" & Profile_Row.Item("NAME") & "' eintragen") Logger.Debug("Add info for profile '" & Profile_Row.Item("NAME") & "'") Dim oPROFILE_ID As Integer = Profile_Row.Item("GUID") WD_Search = Nothing @@ -139,6 +138,7 @@ Public Class clsPMRefresh oStep = "4d" Dim oDocCount As Integer = 0 If IsNothing(oDTWM_Results) Then + Logger.Warn("ATTENTION: oDTWM_Results is NOTHING") Continue For End If 'Die aktuellen Files auf refreshed = 0 setzten @@ -151,7 +151,7 @@ Public Class clsPMRefresh Dim Profil_Docs(oDTWM_Results.Rows.Count - 1, 2) As String For Each oRow As DataRow In oDTWM_Results.Rows Dim oDOC_ID = oRow.Item(0) - Dim oWMFilePath As String = oConfigWMDrive & ":" & oRow.Item(1) + Dim oWMFilePath As String = oRow.Item(1) Profil_Docs(oDocCount, 0) = oRow.Item(0) Profil_Docs(oDocCount, 1) = oWMFilePath '------DMS Erstell-Datum holen -------- @@ -215,6 +215,8 @@ Public Class clsPMRefresh Else Logger.Warn("ATTENTION: Refresh could not be executed " & oSQLCommand) End If + Else + Logger.Warn("ATTENTION: WM-Search is nothing.. ") End If Next oStep = "4i" diff --git a/app/ResultHandler_Konfig/frmMain.Designer.vb b/app/ResultHandler_Konfig/frmMain.Designer.vb index f38a599..2239dba 100644 --- a/app/ResultHandler_Konfig/frmMain.Designer.vb +++ b/app/ResultHandler_Konfig/frmMain.Designer.vb @@ -228,6 +228,9 @@ Partial Class frmMain Me.LOG_ERRORS_ONLYCheckBox = New System.Windows.Forms.CheckBox() Me.LAST_TICKTextBox = New System.Windows.Forms.TextBox() Me.TabPage4 = New System.Windows.Forms.TabPage() + Me.Button6 = New System.Windows.Forms.Button() + Me.txtAttachment = New System.Windows.Forms.TextBox() + Me.Label6 = New System.Windows.Forms.Label() Me.Button5 = New System.Windows.Forms.Button() Me.AUTH_TYPEComboBox = New System.Windows.Forms.ComboBox() Me.TBDD_EMAIL_ACCOUNTBindingSource = New System.Windows.Forms.BindingSource(Me.components) @@ -2360,6 +2363,9 @@ Partial Class frmMain ' 'TabPage4 ' + Me.TabPage4.Controls.Add(Me.Button6) + Me.TabPage4.Controls.Add(Me.txtAttachment) + Me.TabPage4.Controls.Add(Me.Label6) Me.TabPage4.Controls.Add(Me.Button5) Me.TabPage4.Controls.Add(AUTH_TYPELabel) Me.TabPage4.Controls.Add(Me.AUTH_TYPEComboBox) @@ -2401,14 +2407,40 @@ Partial Class frmMain Me.TabPage4.Text = "Email" Me.TabPage4.UseVisualStyleBackColor = True ' + 'Button6 + ' + Me.Button6.Location = New System.Drawing.Point(872, 347) + Me.Button6.Name = "Button6" + Me.Button6.Size = New System.Drawing.Size(30, 23) + Me.Button6.TabIndex = 38 + Me.Button6.Text = "..." + Me.Button6.UseVisualStyleBackColor = True + ' + 'txtAttachment + ' + Me.txtAttachment.Location = New System.Drawing.Point(395, 347) + Me.txtAttachment.Name = "txtAttachment" + Me.txtAttachment.Size = New System.Drawing.Size(471, 22) + Me.txtAttachment.TabIndex = 37 + ' + 'Label6 + ' + Me.Label6.AutoSize = True + Me.Label6.Location = New System.Drawing.Point(392, 331) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(91, 13) + Me.Label6.TabIndex = 36 + Me.Label6.Text = "Test Attachment:" + ' 'Button5 ' Me.Button5.Location = New System.Drawing.Point(294, 381) Me.Button5.Name = "Button5" - Me.Button5.Size = New System.Drawing.Size(75, 23) + Me.Button5.Size = New System.Drawing.Size(95, 23) Me.Button5.TabIndex = 35 - Me.Button5.Text = "Button5" + Me.Button5.Text = "Test Email(RAW)" Me.Button5.UseVisualStyleBackColor = True + Me.Button5.Visible = False ' 'AUTH_TYPEComboBox ' @@ -3034,4 +3066,7 @@ Partial Class frmMain Friend WithEvents EncryptToolStripMenuItem As ToolStripMenuItem Friend WithEvents Button5 As Button Friend WithEvents TextBox1 As TextBox + Friend WithEvents txtAttachment As TextBox + Friend WithEvents Label6 As Label + Friend WithEvents Button6 As Button End Class diff --git a/app/ResultHandler_Konfig/frmMain.resx b/app/ResultHandler_Konfig/frmMain.resx index 3787f2e..1fa529d 100644 --- a/app/ResultHandler_Konfig/frmMain.resx +++ b/app/ResultHandler_Konfig/frmMain.resx @@ -260,7 +260,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAI - DAAAAk1TRnQBSQFMAgEBAwEAAVABAwFQAQMBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + DAAAAk1TRnQBSQFMAgEBAwEAAXgBAwF4AQMBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/app/ResultHandler_Konfig/frmMain.vb b/app/ResultHandler_Konfig/frmMain.vb index 9366de4..a9022f6 100644 --- a/app/ResultHandler_Konfig/frmMain.vb +++ b/app/ResultHandler_Konfig/frmMain.vb @@ -826,17 +826,44 @@ Public Class frmMain Dim PWPlain = wrapper.DecryptData(EMAIL_PWTextBox.Text) Dim sClient = New SmtpClient(EMAIL_SMTPTextBox.Text) Dim mymesssage As New MailMessage - sClient.Port = 587 - sClient.EnableSsl = True + sClient.Port = PORTTextBox.Text + If AUTH_TYPEComboBox.Text = "SSL" Then + sClient.EnableSsl = True + Else + sClient.EnableSsl = False + End If + sClient.Credentials = New NetworkCredential(EMAIL_USERTextBox.Text, PWPlain) sClient.UseDefaultCredentials = False - mymesssage.Body = "Test" - mymesssage.From = New MailAddress(EMAIL_FROMTextBox.Text) - mymesssage.Subject = "TestSubject" - mymesssage.CC.Add(New MailAddress(txtTestmail.Text)) - sClient.Send(mymesssage) - Catch ex As Exception + mymesssage.Body = $"This is the body (text will be replaced within profile)!
mailsmtp: {EMAIL_SMTPTextBox.Text}
mailport: {PORTTextBox.Text}
mailUser: {EMAIL_USERTextBox.Text}
mailPW: XXXX
AUTH_TYPE: {AUTH_TYPEComboBox.Text}" + Dim htmlView As AlternateView = AlternateView.CreateAlternateViewFromString(mymesssage.Body) + htmlView.ContentType = New System.Net.Mime.ContentType("text/html") + mymesssage.AlternateViews.Add(htmlView) + + mymesssage.From = New MailAddress(EMAIL_FROMTextBox.Text) + mymesssage.Subject = "TestSubject from RAW Method" + mymesssage.To.Add(New MailAddress(txtTestmail.Text)) + + If txtAttachment.Text <> String.Empty Then + Dim oAttment As String = txtAttachment.Text.Replace("W:\", "\\windream\objects\") + + If System.IO.File.Exists(oAttment) Then + Logger.Info($"working on attachment {oAttment}...") + Dim oAttachment As New System.Net.Mail.Attachment(oAttment) + + mymesssage.Attachments.Add(oAttachment) + Else + MsgBox($"Attachment {oAttment.ToString} is not existing - Mail won't be send!") + Exit Sub + End If + End If + + + sClient.Send(mymesssage) + MsgBox("Email has been sent!") + Catch ex As Exception + MsgBox(ex.Message, MsgBoxStyle.Critical) End Try @@ -851,9 +878,9 @@ Public Class frmMain Dim PWPlain = wrapper.DecryptData(EMAIL_PWTextBox.Text) - If _email.Testmail("Testmail DD Windream-ResultHandler", "This is the body (text will be replaced within profile)", txtTestmail.Text, - EMAIL_FROMTextBox.Text, EMAIL_SMTPTextBox.Text, PORTTextBox.Text, EMAIL_USERTextBox.Text, PWPlain, AUTH_TYPEComboBox.Text, "") = True Then - MsgBox("Email was send successfully.", MsgBoxStyle.Information) + If _email.Email_Send("Testmail from GUI WMResultHandler", "This is the body (text will be replaced within profile)", txtTestmail.Text, + EMAIL_FROMTextBox.Text, EMAIL_SMTPTextBox.Text, PORTTextBox.Text, EMAIL_USERTextBox.Text, PWPlain, AUTH_TYPEComboBox.Text, txtAttachment.Text, True) = True Then + MsgBox("Email(s) has/have been sent successfully.", MsgBoxStyle.Information) Else MsgBox("Could not send the testmail. Please check the log.", MsgBoxStyle.Exclamation) End If @@ -962,4 +989,18 @@ Public Class frmMain Private Sub LOG_ERRORS_ONLYCheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles LOG_ERRORS_ONLYCheckBox.CheckedChanged End Sub + + Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click + Dim oFD As OpenFileDialog = New OpenFileDialog() + + oFD.Title = "Get a test-attachment:" + 'oFD.InitialDirectory = "C:\" + oFD.Filter = "All files (*.*)|*.*|All files (*.*)|*.*" + oFD.FilterIndex = 2 + oFD.RestoreDirectory = True + + If oFD.ShowDialog() = DialogResult.OK Then + txtAttachment.Text = oFD.FileName + End If + End Sub End Class