924 lines
62 KiB
VB.net
924 lines
62 KiB
VB.net
Imports WINDREAMLib
|
|
Imports System.IO
|
|
Imports System.Text
|
|
Imports Newtonsoft.Json
|
|
Imports DigitalData.Modules.Logging
|
|
Imports DigitalData.Modules.Messaging
|
|
Imports DigitalData.Modules.Messaging.Mail
|
|
Imports DigitalData.Modules.Messaging.Mail.MailSession
|
|
|
|
Public Class clsProfil
|
|
Inherits clsCURRENT
|
|
Dim Logger As Logger
|
|
Dim MyLogConfig As LogConfig
|
|
#Region "***** Variablen *****"
|
|
Private Shared CriticalError As Boolean = False
|
|
Private windream As clsWindream_allgemein
|
|
Private windream_index As clsWindream_Index
|
|
Private _database As clsDatabase
|
|
Private _dateiverarbeitung As clsDateiverarbeitung
|
|
Private _JobWork As clsJob_Work
|
|
Private _email As MailSender
|
|
Private Shared WD_aktivesDokument As WMObject
|
|
#End Region
|
|
Sub New(pLogConfig As LogConfig, PROFIL_ID As Integer)
|
|
Logger = pLogConfig.GetLogger()
|
|
MyLogConfig = pLogConfig
|
|
windream = New clsWindream_allgemein(pLogConfig)
|
|
windream_index = New clsWindream_Index(pLogConfig)
|
|
_database = New clsDatabase(pLogConfig)
|
|
_dateiverarbeitung = New clsDateiverarbeitung(pLogConfig)
|
|
_email = New MailSender(pLogConfig)
|
|
_JobWork = New clsJob_Work(pLogConfig, _email)
|
|
|
|
End Sub
|
|
Public Function Init(PROFIL_ID As Integer, pManual As Boolean)
|
|
Try
|
|
Logger.Debug("Start Initialisierung Profil für GUID: " & PROFIL_ID.ToString)
|
|
Dim DT As DataTable = _database.Return_Datatable("Select * from TBWMRH_PROFIL where GUID = " & PROFIL_ID)
|
|
If DT.Rows.Count = 1 Then
|
|
For Each DR As DataRow In DT.Rows
|
|
_profGUID = PROFIL_ID
|
|
_Profilname = CStr(DR.Item("Profilname"))
|
|
Logger.Debug("Check Profilname '" & _Profilname & "', GUID: " & _profGUID & " geladen")
|
|
' Überprüfen ob Profil aktiv oder inaktiv
|
|
If CBool(DR.Item("Aktiv")) = False And pManual = False Then
|
|
Logger.Info("## Profil '" & _Profilname & "' ist inaktiv geschaltet")
|
|
Return False
|
|
Else
|
|
_profObjekttyp = CStr(DR.Item("Objekttyp"))
|
|
_profwdSuche = CStr(DR.Item("WindreamSuche"))
|
|
_profDay = CStr(DR.Item("Day"))
|
|
_profRunType = CStr(DR.Item("Run"))
|
|
_proflastRun = DR.Item("Letzter_Durchlauf")
|
|
Logger.Debug("Raw-Daten für Profil '" & _Profilname & "', GUID: " & _profGUID & " geladen")
|
|
Return True
|
|
End If
|
|
Next
|
|
Else
|
|
Logger.Warn("Achtung - keine Profile für diesen Durchlaufthread verfügbar")
|
|
Return False
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
Return False
|
|
End Try
|
|
|
|
End Function
|
|
'Durchlauf des Profils wird aus dem Service gestartet wenn Init = True war
|
|
Public Function Profil_Durchlauf(pManRun As Boolean) As Boolean
|
|
Dim _error As Boolean = False
|
|
Try
|
|
Dim oRunProfile As Boolean = False
|
|
If pManRun = False Then
|
|
'Soll die Verarbeitung heute durchgeführt werden??
|
|
Dim Dayofweek As Integer = My.Computer.Clock.LocalTime.DayOfWeek
|
|
Dim SUBS As Integer = 0
|
|
If Dayofweek = 0 Then
|
|
SUBS = 6
|
|
Else
|
|
|
|
End If
|
|
If _profDay.Substring(Dayofweek - 1, 1) = 1 Then
|
|
oRunProfile = True
|
|
Else
|
|
Logger.Info("Verarbeitung für JETZT NICHT konfiguriert")
|
|
End If
|
|
'Verarbeitung soll heute durchgeführt werden
|
|
Logger.Debug("Verarbeitung soll heute durchgeführt werden!")
|
|
Logger.Debug("_RunType: " & _profRunType)
|
|
Dim arr As String()
|
|
arr = _profRunType.Split(";")
|
|
Logger.Debug("arr(1): " & arr(1).ToString)
|
|
Select Case arr(0)
|
|
Case "TIME"
|
|
' Dim intervall As Integer = clsSQLITE.konf_intervall / 60
|
|
Dim Time_next As DateTime = _proflastRun.AddMinutes(1)
|
|
Dim _RunTime As Date = CDate(arr(1))
|
|
Logger.Debug("ProfilTime: " & _RunTime)
|
|
Logger.Debug("_RunTime.ToShortTimeString: " & _RunTime.ToShortTimeString & " # " & "Now.ToShortTimeString: " & Now.ToShortTimeString)
|
|
If Time_next.ToString.StartsWith("11.11.1911") Then
|
|
Logger.Info("Manueller Durchlauf des Profils - 11.11.1911")
|
|
oRunProfile = True
|
|
Else
|
|
'Ist die Uhrzeit in der Range
|
|
If _RunTime.ToShortTimeString = Now.ToShortTimeString Then
|
|
oRunProfile = True
|
|
Else
|
|
Logger.Debug("No run as " & _RunTime.ToShortTimeString & "<>" & Now.ToShortTimeString)
|
|
End If
|
|
End If
|
|
|
|
Case "INTV"
|
|
'Die Differenz berechnen
|
|
Dim DiffMin As Integer = DateDiff(DateInterval.Minute, _proflastRun, Date.Now)
|
|
|
|
'Logger.Info("DiffMin: " & DiffMin)
|
|
'Logger.Info("Intervall: " & arr(1))
|
|
|
|
If DiffMin >= CInt(arr(1)) Then
|
|
'Den Durchlauf erlauben
|
|
oRunProfile = True
|
|
Else
|
|
Logger.Debug("No run as DiffMin (" & DiffMin & ") <= Intervall(" & arr(1) & ")")
|
|
End If
|
|
Case Else
|
|
Logger.Warn("_profRunType konnte nicht ausgewertet werden - " & arr(0))
|
|
End Select
|
|
Else
|
|
Logger.Info("### This is a manual run of profile! ###")
|
|
oRunProfile = True
|
|
End If
|
|
|
|
|
|
If oRunProfile = True Then
|
|
Logger.Debug($"'{_Profilname}' - Run_Profile = True")
|
|
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
|
|
Logger.Warn("Die Windream-Suche '" & _profwdSuche & "' existiert nicht!", True, "clsProfil.Profil_Durchlauf")
|
|
'wenn die gesuchte File eine Suche ist: per MAil informierne und Indexierung abbrechen
|
|
Return False
|
|
Else
|
|
' windream-Suche für Profil starten
|
|
Logger.Debug("GetSearchDocuments für Suche '" & _profwdSuche & "' starten: ")
|
|
Dim windreamSucheErgebnisse As WMObjects = windream.GetSearchDocuments(_profwdSuche)
|
|
If windreamSucheErgebnisse Is Nothing Then
|
|
Logger.Warn("windreamSucheErgebnisse is nothing!", True, "clsProfil.Profil_Durchlauf")
|
|
Return False
|
|
End If
|
|
If windreamSucheErgebnisse.Count > 0 Then
|
|
Logger.Info($"Working on profile '{_Profilname}'")
|
|
Logger.Info(windreamSucheErgebnisse.Count & " file(s) shall be worked!")
|
|
Logger.Debug("SELECT * FROM TBWMRH_PROFIL_JOB WHERE AKTIV = 1 AND PROFIL_ID = " & _profGUID & " ORDER BY REIHENFOLGE")
|
|
|
|
Dim DT_PROFIL_JOB As DataTable = _database.Return_Datatable("SELECT * FROM TBWMRH_PROFIL_JOB WHERE AKTIV = 1 AND PROFIL_ID = " & _profGUID & " ORDER BY REIHENFOLGE")
|
|
Dim DT_PROFIL_FILE_JOB As DataTable = _database.Return_Datatable("SELECT * FROM TBWMRH_PROFIL_FILE_JOB WHERE AKTIV = 1 AND PROFIL_ID = " & _profGUID & " ORDER BY REIHENFOLGE")
|
|
Logger.Debug($"DT_PROFIL_JOB ({DT_PROFIL_JOB.Rows.Count})and DT_PROFIL_FILE_JOB ({DT_PROFIL_FILE_JOB.Rows.Count}) generiert ")
|
|
If DT_PROFIL_JOB.Rows.Count > 0 Then
|
|
|
|
If _dateiverarbeitung.InitProfilData = True Then
|
|
_database.Execute_non_Query("UPDATE TBWMRH_PROFIL SET Running = 1, LETZTER_DURCHLAUF = GETDATE() WHERE GUID = " & _profGUID)
|
|
Logger.Debug("_dateiverarbeitung.InitProfilData = True")
|
|
For Each _JOBROW As DataRow In DT_PROFIL_JOB.Rows
|
|
Logger.Debug("JOB_TYP: " & _JOBROW.Item("JOB_TYP").ToString.ToUpper & " GUID: " & _JOBROW.Item("GUID").ToString)
|
|
Next
|
|
Dim FileJobSuccessful As Boolean = False
|
|
Dim CountExportedDoc As Integer = 0
|
|
clsCURRENT.PROFILE_HandledFiles = Nothing
|
|
Dim oFileRunNo As String
|
|
Dim oGesamtFiles As Integer
|
|
oGesamtFiles = windreamSucheErgebnisse.Count
|
|
Dim oCountDocs As Integer = 0
|
|
Dim oEmailAttachment_path As String
|
|
|
|
|
|
Dim MAILFROM As String = ""
|
|
Dim MAILSMTP As String = ""
|
|
Dim MAIL_USER As String = ""
|
|
Dim MAIL_USER_PW As String = ""
|
|
Dim MAIL_AUTH_TYPE As String = "SSL"
|
|
Dim MAIL_PORT As String = "25"
|
|
Dim MAILSession As SessionInfo
|
|
|
|
For Each WMdok As WMObject In windreamSucheErgebnisse
|
|
|
|
oEmailAttachment_path = String.Empty
|
|
oCountDocs += 1
|
|
Logger.Debug($"Working on Doc {oCountDocs.ToString}/{windreamSucheErgebnisse.Count}")
|
|
oFileRunNo = "#Doc " & oCountDocs.ToString
|
|
Dim oPointIndex = WMdok.aName.LastIndexOf(".")
|
|
clsCURRENT.FILE_Extension = WMdok.aName.Substring(oPointIndex)
|
|
|
|
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
|
|
Logger.Debug("JobType: Create Mail Attachment")
|
|
'XX
|
|
|
|
Dim Email_Empfänger = DR_PR_JB.Item("STRING1")
|
|
Logger.Debug("Email_Empfänger: " & Email_Empfänger)
|
|
Dim oEmail_Betreff = DR_PR_JB.Item("STRING2")
|
|
Logger.Debug("Email_Betreff: " & oEmail_Betreff)
|
|
Dim Email_Body = DR_PR_JB.Item("STRING3")
|
|
Logger.Debug("Email_Body: " & Email_Body)
|
|
Dim EMAIL_PROFIL = DR_PR_JB.Item("STRING4")
|
|
Logger.Debug("EMAIL_PROFIL: " & EMAIL_PROFIL)
|
|
Dim oRENAMEFILE = DR_PR_JB.Item("STRING5")
|
|
Dim oAttachment_FullFilename As String = ""
|
|
|
|
If Not IsDBNull(oRENAMEFILE) Then
|
|
If oRENAMEFILE.ToString <> String.Empty Then
|
|
Logger.Debug("Attached file shall be renamed...")
|
|
oRENAMEFILE = _dateiverarbeitung.REGEX_REPLACE(WMdok, oRENAMEFILE)
|
|
oAttachment_FullFilename = oRENAMEFILE & clsCURRENT.FILE_Extension
|
|
Logger.Info($"oAttachment: {oAttachment_FullFilename}")
|
|
End If
|
|
End If
|
|
|
|
If Not IsNothing(clsCURRENT.DT_TBDD_EMAIL) And clsCURRENT.DT_TBDD_EMAIL.Rows.Count >= 1 Then
|
|
If _dateiverarbeitung.Export_WMFile2HDD(WMdok, Path.GetTempPath(), oAttachment_FullFilename) = True Then
|
|
oAttachment_FullFilename = clsCURRENT.EXPORTED_FILENAME
|
|
oEmailAttachment_path = oAttachment_FullFilename
|
|
Else
|
|
Logger.Warn($"Could not create a tempfile...")
|
|
FileJobSuccessful = False
|
|
Return False
|
|
End If
|
|
|
|
If oCountDocs = 1 Then
|
|
Logger.Debug("##### EMAIL BASICS CONSTRUCT (oCountDocs = 1) ######")
|
|
For Each emailrow As DataRow In clsCURRENT.DT_TBDD_EMAIL.Rows
|
|
If emailrow.Item("GUID") = CInt(EMAIL_PROFIL) Then
|
|
MAILFROM = emailrow.Item("EMAIL_FROM")
|
|
MAILSMTP = emailrow.Item("EMAIL_SMTP")
|
|
MAIL_USER = emailrow.Item("EMAIL_USER")
|
|
MAIL_USER_PW = emailrow.Item("EMAIL_PW")
|
|
MAIL_AUTH_TYPE = emailrow.Item("AUTH_TYPE")
|
|
MAIL_PORT = emailrow.Item("PORT")
|
|
End If
|
|
Next
|
|
Logger.Debug("Email-Profil Used: " & EMAIL_PROFIL)
|
|
Logger.Debug("EMAIL_AUTH_TYPE: " & MAIL_AUTH_TYPE)
|
|
If MAIL_AUTH_TYPE.ToUpper <> "NONE" Then
|
|
Dim wrapper As New clsEncryption("!35452didalog=")
|
|
Dim PWPlain = wrapper.DecryptData(MAIL_USER_PW)
|
|
If Not IsNothing(PWPlain) Then
|
|
MAIL_USER_PW = PWPlain
|
|
Else
|
|
Logger.Warn("PWPlain is Nothing - Could not decrypt passwort188")
|
|
Return False
|
|
End If
|
|
Else
|
|
Logger.Debug("## No AUTHENTIFICATION in EMail...!##")
|
|
End If
|
|
|
|
If Email_Empfänger.ToString.Contains("[%") Then
|
|
Email_Empfänger = _dateiverarbeitung.REGEX_REPLACE(WMdok, Email_Empfänger)
|
|
Logger.Debug("Email_Empfänger: " & Email_Empfänger)
|
|
End If
|
|
End If
|
|
|
|
|
|
oEmail_Betreff = _dateiverarbeitung.REGEX_REPLACE(WMdok, oEmail_Betreff)
|
|
Email_Body = _dateiverarbeitung.REGEX_REPLACE(WMdok, Email_Body)
|
|
oEmail_Betreff = $"{oEmail_Betreff} [eMail {oCountDocs} von {oGesamtFiles}]"
|
|
If oAttachment_FullFilename <> String.Empty Then
|
|
Logger.Info($"Email Attachment {oAttachment_FullFilename}")
|
|
End If
|
|
Dim oSendto As New List(Of String)
|
|
Dim oSplit = Email_Empfänger.split(";")
|
|
For Each oMailAdress In oSplit
|
|
oSendto.Add(oMailAdress)
|
|
Next
|
|
|
|
Dim oAttMt As New List(Of String)
|
|
If oAttachment_FullFilename <> String.Empty Then
|
|
oAttMt.Add(oAttachment_FullFilename)
|
|
clsCURRENT.TEMP_FILES.Add(oAttachment_FullFilename)
|
|
End If
|
|
|
|
Dim oReInit As Boolean = False
|
|
If oCountDocs = 1 Or IsNothing(MAILSession) Then
|
|
Logger.Debug("Init MAILSession...")
|
|
oReInit = True
|
|
ElseIf IsNothing(_email) Or _email.Connected2Server = False Or MAILSession.Connected = False Then
|
|
Logger.Info("Re-Init MAILSession...")
|
|
oReInit = True
|
|
End If
|
|
If oReInit = True Then
|
|
_email = New MailSender(MyLogConfig)
|
|
MAILSession = _email.Connect(MAILSMTP, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_AUTH_TYPE)
|
|
If MAILSession.Connected = True Then
|
|
Logger.Info($"MAIL: Connection to {MAILSMTP} successfull!")
|
|
Else
|
|
Logger.Warn($"{oFileRunNo} - _email.Connect was not successfull!")
|
|
FileJobSuccessful = False
|
|
End If
|
|
End If
|
|
|
|
If Not IsNothing(_email) And _email.SendMail(oSendto, MAILFROM, oEmail_Betreff, Email_Body, Now, oAttMt, 0) = True Then
|
|
FileJobSuccessful = True
|
|
Else
|
|
FileJobSuccessful = False
|
|
Logger.Info("Setting MAILSession.Connected to [false]")
|
|
MAILSession.Connected = False
|
|
If IsNothing(_email) Then
|
|
Logger.Info($"_email is nothing")
|
|
Else
|
|
Logger.Info($"{oFileRunNo} - Email_SendMail was not successfull!")
|
|
|
|
End If
|
|
|
|
End If
|
|
|
|
Else
|
|
Logger.Warn($"{oFileRunNo} DT_TBDD_EMAIL is nothing or contains no rows")
|
|
Return False
|
|
End If
|
|
|
|
Case "Export HDD".ToUpper
|
|
Logger.Debug($"{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_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!")
|
|
Logger.Debug($"{oFileRunNo} Export HDD completed!")
|
|
End If
|
|
'Next
|
|
Case "BNS json Download".ToUpper
|
|
Logger.Debug($"{oFileRunNo} JobType: BNS json Download")
|
|
FileJobSuccessful = _dateiverarbeitung.BNSjsonDownload(WMdok, DR_PR_JB.Item("STRING1"), DR_PR_JB.Item("STRING2"))
|
|
Case "Archive Document X years from Indexdate".ToUpper
|
|
Logger.Debug($"{oFileRunNo} JobType: Archive Document X years from Indexdate")
|
|
If IsNumeric(DR_PR_JB.Item("STRING1")) And DR_PR_JB.Item("STRING2").ToString.Length > 0 Then
|
|
Dim opDateValue As Object
|
|
Try
|
|
opDateValue = WMdok.GetVariableValue(DR_PR_JB.Item("STRING2"))
|
|
Dim odate = CDate(opDateValue)
|
|
Catch ex As Exception
|
|
Logger.Info($"Could not convert value {opDateValue.ToString} to date!")
|
|
Logger.Error(ex)
|
|
End Try
|
|
If Not IsNothing(opDateValue) Then
|
|
If _dateiverarbeitung.Archive_Document(WMdok, "y", DR_PR_JB.Item("STRING1"), opDateValue.ToString) = True Then
|
|
FileJobSuccessful = True
|
|
End If
|
|
End If
|
|
|
|
|
|
|
|
|
|
End If
|
|
|
|
|
|
End Select
|
|
Next
|
|
|
|
|
|
'##################################
|
|
'JETZT DER DURCHLAUF DER DATEI-JOBS
|
|
'##################################
|
|
If DT_PROFIL_FILE_JOB.Rows.Count > 0 Then
|
|
'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($"{oFileRunNo} FileJobSuccessful = False...Exit For")
|
|
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
|
|
|
|
'Ü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
|
|
idxvalue = _dateiverarbeitung.REGEX_REPLACE(WMdok, 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($"{oFileRunNo} ...nach arrIndex")
|
|
|
|
Dim arrValue() As String
|
|
|
|
Dim aktvalue As Object
|
|
aktvalue = WMdok.GetVariableValue(idxName)
|
|
Logger.Debug($"{oFileRunNo} ...nach aktValue zuweisen..")
|
|
Dim wmtype = clsWindream_allgemein.GetTypeOfIndexAsIntByName(idxName)
|
|
Dim is_vektor As Boolean = False
|
|
Select Case wmtype
|
|
Case 4097
|
|
is_vektor = True
|
|
Case 4098
|
|
is_vektor = True
|
|
Case 4099
|
|
is_vektor = True
|
|
Case 4101
|
|
is_vektor = True
|
|
Case 4103
|
|
is_vektor = True
|
|
Case 4107
|
|
is_vektor = True
|
|
Case 36865
|
|
is_vektor = True
|
|
End Select
|
|
If is_vektor = False Then
|
|
ReDim Preserve arrValue(0)
|
|
arrValue(0) = idxvalue
|
|
Else
|
|
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
|
|
Dim oErrorOccurred = windream_index.RunIndexing(WMdok, arrIndex, arrValue, _profObjekttyp)
|
|
|
|
' 07.01.2019: Weitere Jobs bei Fehler in RunIndexing überspringen
|
|
If oErrorOccurred = True Then
|
|
FileJobSuccessful = False
|
|
|
|
End If
|
|
Else
|
|
Logger.Warn($"{oFileRunNo} arrValue is nothing - keine Indexierung")
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
'clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(SetIndex)")
|
|
End Try
|
|
Case "Rename File with windream Index".ToLower
|
|
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($"{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($"{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)
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
'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
|
|
Logger.Debug($"{oFileRunNo} Execute MSSQL Command.......")
|
|
FileJobSuccessful = _dateiverarbeitung.RUN_MSSQL_COMMAND(WMdok, MSSQLconnectionstring, MSSQLCommandRAW)
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
'clsLogger.AddError("Unvorhergesehener Fehler: " & ex.Message, "clsProfil.Profil_Durchlauf(ExecuteMSSQLCommand)")
|
|
End Try
|
|
End Select
|
|
'Abschluss Bearbeitung File Job
|
|
|
|
Next
|
|
Else
|
|
Logger.Warn("KEINE File-JOBS für Profil '" & _Profilname & "' angelegt!")
|
|
End If
|
|
|
|
Next
|
|
Try
|
|
If Not IsNothing(_email) Then
|
|
If _email.Connected2Server = True Then
|
|
Logger.Warn("KEINE File-JOBS für Profil '" & _Profilname & "' angelegt!")
|
|
_email.Disconnect()
|
|
End If
|
|
|
|
End If
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
'Jetzt nochmal ein Durchlauf für Profiljobs wo alle Dateien abgearbeitet wurden.
|
|
For Each DR_PR_JB As DataRow In DT_PROFIL_JOB.Rows
|
|
Logger.Info("New run for " & DR_PR_JB.Item("JOB_TYP").ToString.ToUpper)
|
|
Select Case DR_PR_JB.Item("JOB_TYP").ToString.ToUpper
|
|
Case "Concat Files to one pdf".ToUpper
|
|
Logger.Info("Again working on Case Concat Files to one pdf....")
|
|
Dim pdftk = clsCURRENT.DT_TBWMRH_KONFIGURATION.Rows(0).Item("PDF_TK_LOCATION")
|
|
Logger.Debug("pdftk location: " & pdftk)
|
|
clsCURRENT.CONCATTED_FILE = DR_PR_JB.Item("STRING1")
|
|
Logger.Debug("CONCATTED_FILE location: " & clsCURRENT.CONCATTED_FILE)
|
|
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
|
|
File.Delete(clsCURRENT.CONCATTED_FILE)
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
|
|
End If
|
|
Try
|
|
Dim myProcess As New Process
|
|
Dim ProcID
|
|
myProcess.StartInfo.FileName = pdftk
|
|
myProcess.StartInfo.CreateNoWindow = False
|
|
|
|
Dim _argument As String
|
|
Dim i As Integer
|
|
For Each str As String In clsCURRENT.PROFILE_HandledFiles
|
|
If i = 0 Then
|
|
_argument = """" & str & """"
|
|
Else
|
|
_argument = _argument & " " & """" & str & """"
|
|
End If
|
|
i += 1
|
|
Next
|
|
If File.Exists(clsCURRENT.CONCATTED_FILE) Then
|
|
Try
|
|
File.Delete(clsCURRENT.CONCATTED_FILE)
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
|
|
End If
|
|
myProcess.StartInfo.Arguments = _argument & " cat output " & clsCURRENT.CONCATTED_FILE
|
|
Logger.Debug("Arguments: " & _argument & " cat output " & clsCURRENT.CONCATTED_FILE)
|
|
myProcess.Start()
|
|
ProcID = myProcess.Id
|
|
|
|
Dim p As Process
|
|
p = Process.GetProcessById(ProcID)
|
|
|
|
Dim sw As Stopwatch = New Stopwatch()
|
|
sw.Start()
|
|
|
|
Do While p.HasExited = False
|
|
|
|
If sw.Elapsed.TotalSeconds = 30 Then
|
|
Logger.Info("Still waiting (30 sec) for ending of process-id: " & ProcID.ToString)
|
|
ElseIf sw.Elapsed.TotalMinutes = 1 Then
|
|
Logger.Info("Still waiting (60 sec) for ending of process-id: " & ProcID.ToString & " - Exit now")
|
|
Exit Do
|
|
End If
|
|
Loop
|
|
Logger.Debug("...process has exited: ")
|
|
sw.Stop()
|
|
Logger.Debug("Waiting for file: " & clsCURRENT.CONCATTED_FILE)
|
|
sw.Start()
|
|
Do While File.Exists(clsCURRENT.CONCATTED_FILE) = False
|
|
If sw.Elapsed.TotalSeconds = 30 Then
|
|
Logger.Info("ATTENTION: Still waiting (30 sec) for file: " & clsCURRENT.CONCATTED_FILE)
|
|
ElseIf sw.Elapsed.TotalMinutes = 1 Then
|
|
Logger.Info("ATTENTION: Still waiting (60 sec) for file: " & clsCURRENT.CONCATTED_FILE)
|
|
FileJobSuccessful = False
|
|
Exit Do
|
|
End If
|
|
|
|
Loop
|
|
sw.Stop()
|
|
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
|
|
|
|
Next
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
Logger.Error(ex) '("Unexpected error: " & ex.Message, "clsProfil.Profil_Durchlauf(Concat Files to one pdf)")
|
|
End Try
|
|
|
|
|
|
Else
|
|
Logger.Warn("pdftk is not existing")
|
|
End If
|
|
Case "Send concatted file via mail".ToUpper
|
|
Logger.Info("Working on CASE Send concatted file via mail.... ")
|
|
If File.Exists(clsCURRENT.CONCATTED_FILE) = True Then
|
|
|
|
Dim Email_Empfänger = DR_PR_JB.Item("STRING1")
|
|
Logger.Debug("Email_Empfänger: " & Email_Empfänger)
|
|
Dim Email_Betreff = DR_PR_JB.Item("STRING2")
|
|
Logger.Debug("Email_Betreff: " & Email_Betreff)
|
|
Dim Email_Body = DR_PR_JB.Item("STRING3")
|
|
Logger.Debug("Email_Body: " & Email_Body)
|
|
Dim EMAIL_PROFIL = DR_PR_JB.Item("STRING4")
|
|
Logger.Debug("EMAIL_PROFIL: " & EMAIL_PROFIL)
|
|
If Not IsNothing(clsCURRENT.DT_TBDD_EMAIL) And clsCURRENT.DT_TBDD_EMAIL.Rows.Count >= 1 Then
|
|
MAILFROM = ""
|
|
MAILSMTP = ""
|
|
MAIL_USER = ""
|
|
MAIL_USER_PW = ""
|
|
MAIL_AUTH_TYPE = "SSL"
|
|
MAIL_PORT = 0
|
|
|
|
For Each emailrow As DataRow In clsCURRENT.DT_TBDD_EMAIL.Rows
|
|
If emailrow.Item("GUID") = CInt(EMAIL_PROFIL) Then
|
|
MAILFROM = emailrow.Item("EMAIL_FROM")
|
|
MAILSMTP = emailrow.Item("EMAIL_SMTP")
|
|
MAIL_USER = emailrow.Item("EMAIL_USER")
|
|
MAIL_USER_PW = emailrow.Item("EMAIL_PW")
|
|
MAIL_AUTH_TYPE = emailrow.Item("AUTH_TYPE")
|
|
MAIL_PORT = emailrow.Item("PORT")
|
|
End If
|
|
Next
|
|
Logger.Debug($"MailCredentials: {MAILFROM}-{MAIL_USER}-{MAIL_USER_PW}")
|
|
Dim wrapper As New clsEncryption("!35452didalog=")
|
|
|
|
Dim PWPlain = wrapper.DecryptData(MAIL_USER_PW)
|
|
If Not IsNothing(PWPlain) Then
|
|
If PWPlain <> "" Then
|
|
MAIL_USER_PW = PWPlain
|
|
Else
|
|
Logger.Info("PWPlain is string.empty!!")
|
|
End If
|
|
|
|
Else
|
|
Logger.Warn("PWPlain is string.empty - Could not decrypt passwort1")
|
|
|
|
Return False
|
|
End If
|
|
Dim oSendto As New List(Of String)
|
|
Dim oSplit = Email_Empfänger.split(";")
|
|
For Each oMailAdress In oSplit
|
|
oSendto.Add(oMailAdress)
|
|
Next
|
|
|
|
Dim oAttMt As New List(Of String)
|
|
If clsCURRENT.CONCATTED_FILE <> String.Empty Then
|
|
oAttMt.Add(clsCURRENT.CONCATTED_FILE)
|
|
clsCURRENT.TEMP_FILES.Add(clsCURRENT.CONCATTED_FILE)
|
|
End If
|
|
If Not IsNothing(_email) And _email.Connected2Server = False And MAILSession.Connected = True Then
|
|
Logger.Debug("Re/init MAILSession(2)...")
|
|
MAILSession = _email.Connect(MAILSMTP, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_AUTH_TYPE)
|
|
If MAILSession.Connected = True Then
|
|
Logger.Info($"MAIL: Connection to {MAILSMTP} successfull!")
|
|
Else
|
|
Logger.Warn($"{oFileRunNo} Email_ConnectToServer was not successfull!")
|
|
FileJobSuccessful = False
|
|
End If
|
|
|
|
End If
|
|
|
|
If MAILSession.Connected = True Then
|
|
If _email.SendMail(oSendto, MAILFROM, Email_Betreff, Email_Body, Now, oAttMt, 0) = True Then
|
|
FileJobSuccessful = True
|
|
Else
|
|
Logger.Warn("Email_SendMail(2) was not successfull!")
|
|
FileJobSuccessful = False
|
|
End If
|
|
_email.Disconnect()
|
|
Else
|
|
Logger.Warn($"Email_ConnectToServer(2) was not successfull!")
|
|
FileJobSuccessful = False
|
|
End If
|
|
|
|
Else
|
|
Logger.Warn("DT_TBDD_EMAIL is nothing or contains no rows")
|
|
|
|
Return False
|
|
End If
|
|
Else
|
|
Logger.Warn("File not existing: " & clsCURRENT.CONCATTED_FILE)
|
|
|
|
End If
|
|
Case "Send to printer".ToUpper
|
|
Logger.Info("Working on CASE Send to printer.... ")
|
|
Dim oPrintername = DR_PR_JB.Item("STRING1")
|
|
For Each oFileString As String In clsCURRENT.PROFILE_HandledFiles
|
|
Try
|
|
Dim myproc As Process = New Process()
|
|
myproc.StartInfo.FileName = """" & oFileString & """"
|
|
myproc.StartInfo.Verb = "printto" '"printto"
|
|
myproc.StartInfo.Arguments = oPrintername
|
|
myproc.StartInfo.UseShellExecute = True
|
|
Logger.Debug($"Send2Printer [{ myproc.StartInfo.FileName} # Verb:{myproc.StartInfo.Verb} # Arguments: {myproc.StartInfo.Arguments}] ")
|
|
myproc.Start()
|
|
System.Threading.Thread.Sleep(500)
|
|
Dim p As Process
|
|
p = Process.GetProcessById(myproc.Id)
|
|
Dim sw As Stopwatch = New Stopwatch()
|
|
sw.Start()
|
|
Do While p.HasExited = False
|
|
If sw.Elapsed.TotalSeconds = 30 Then
|
|
Logger.Info("Still waiting (30 sec) for ending of process-id: " & myproc.Id.ToString)
|
|
ElseIf sw.Elapsed.TotalMinutes = 1 Then
|
|
Logger.Info("Still waiting (60 sec) for ending of process-id: " & myproc.Id.ToString & " - Exit now")
|
|
Exit Do
|
|
End If
|
|
Loop
|
|
Logger.Debug("...process has exited: ")
|
|
FileJobSuccessful = True
|
|
sw.Stop()
|
|
Logger.Info($"Send2Printer successfully [{ myproc.StartInfo.FileName} # Verb:{myproc.StartInfo.Verb} # Arguments: {myproc.StartInfo.Arguments}] ")
|
|
|
|
File.Delete(oFileString)
|
|
Logger.Debug($"Deleted oFileString [{oFileString}]!")
|
|
Catch ex As Exception
|
|
Dim omsg = "ERROR: Could not print (printto) file: " & oFileString
|
|
omsg &= vbNewLine & ex.Message
|
|
Logger.Info(omsg)
|
|
Logger.Error(ex, omsg)
|
|
FileJobSuccessful = False
|
|
Try
|
|
File.Delete(oFileString)
|
|
Catch ex1 As Exception
|
|
|
|
End Try
|
|
|
|
End Try
|
|
Next
|
|
Case "Send InfoMail with WM-Search".ToUpper
|
|
Logger.Info("Working on CASE Send InfoMail with WM-Search.... ")
|
|
'Dim oWMResults As WMObjects = windream.GetSearchDocuments(DR_PR_JB.Item("STRING5"))
|
|
'If oWMResults Is Nothing Then
|
|
' Logger.Warn("windreamSucheErgebnisse is nothing ( Send InfoMail with WM-Search)!", True, "clsProfil.Profil_Durchlauf")
|
|
' Return False
|
|
'End If
|
|
Try
|
|
If windreamSucheErgebnisse.Count > 0 Then
|
|
Logger.Debug("windreamSucheErgebnisse.Count > 0 .... ")
|
|
If _JobWork.New_Mail_with_attachment(DR_PR_JB.Item("STRING1"), DR_PR_JB.Item("STRING2"), DR_PR_JB.Item("STRING3"), DR_PR_JB.Item("STRING4"), clsCURRENT.DT_TBDD_EMAIL, DR_PR_JB.Item("STRING5")) = True Then
|
|
FileJobSuccessful = True
|
|
'If DT_PROFIL_FILE_JOB.Rows.Count > 0 Then
|
|
' For Each DR_PR_FILE_JOB As DataRow In DT_PROFIL_FILE_JOB.Rows
|
|
' For Each oWMDoc As WMObject In oWMResults
|
|
' _dateiverarbeitung.Check_File_job(oWMDoc, DR_PR_FILE_JOB.Item("TYP").ToString.ToLower, DR_PR_FILE_JOB.Item("STRING1").ToString, DR_PR_FILE_JOB.Item("STRING2").ToString, _profObjekttyp, windream_index)
|
|
' Next
|
|
|
|
' Next
|
|
'End If
|
|
|
|
End If
|
|
Else
|
|
Logger.Info("Attention: Send InfoMail with WM-Search - windreamSucheErgebnisse.Count = 0")
|
|
FileJobSuccessful = False
|
|
End If
|
|
Catch ex As Exception
|
|
Logger.Warn($"Unexpected Error in Case [Send InfoMail with WM-Search] Error: [{ex.Message}]")
|
|
FileJobSuccessful = False
|
|
End Try
|
|
|
|
|
|
End Select
|
|
If FileJobSuccessful = True Then
|
|
|
|
End If
|
|
Next
|
|
Else
|
|
Logger.Warn("Initialisierung Profil nicht erfolgreich")
|
|
End If
|
|
Else
|
|
Logger.Warn("KEINE JOBS für Profil '" & _Profilname & "' angelegt!")
|
|
End If
|
|
Else
|
|
' keine Dateien zum Importieren
|
|
Logger.Debug("Keine windream-Dokumente für Profil '" & _Profilname & "' vorhanden/gefunden.")
|
|
End If
|
|
|
|
End If
|
|
|
|
End If
|
|
|
|
'Abschluss des Profiles
|
|
_database.Execute_non_Query("UPDATE TBWMRH_PROFIL SET Running = 0 WHERE GUID = " & _profGUID)
|
|
Return True
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
_database.Execute_non_Query("Update TBWMRH_PROFIL SET Running = 0 WHERE GUID = " & _profGUID)
|
|
CriticalError = True
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Private Function Return_VektorArray(ByVal oDocument As WMObject, vktIndexName As String, NIIndexe As Object, CheckDuplikat As Boolean)
|
|
Try
|
|
Dim missing As Boolean = False
|
|
Dim Anzahl As Integer = 0
|
|
Dim ValueArray()
|
|
'Jeden Wert des Vektorfeldes durchlaufen
|
|
Dim wertWD = oDocument.GetVariableValue(vktIndexName)
|
|
If wertWD Is Nothing = False Then
|
|
'Nochmals prüfen ob wirklich Array
|
|
If wertWD.GetType.ToString.Contains("System.Object") Then
|
|
'Keine Duplikatprüfung also einfach neues Array füllen
|
|
If CheckDuplikat = False Then
|
|
For Each value As Object In wertWD
|
|
'Das Array anpassen
|
|
ReDim Preserve ValueArray(Anzahl)
|
|
'Den Wert im Array speichern
|
|
ValueArray(Anzahl) = value.ToString
|
|
Anzahl += 1
|
|
Next
|
|
'Und jetzt den/die Neuen Wert(e) anfügen
|
|
For Each NewValue As Object In NIIndexe
|
|
If NewValue Is Nothing = False Then
|
|
'Das Array anpassen
|
|
ReDim Preserve ValueArray(Anzahl)
|
|
'Den Wert im Array speichern
|
|
ValueArray(Anzahl) = NewValue.ToString
|
|
Anzahl += 1
|
|
|
|
End If
|
|
Next
|
|
Else
|
|
Logger.Debug("Duplikatprüfung soll durchgeführt werden.")
|
|
'Duplikat Prüfung an, also nur anhängen wenn Wert <>
|
|
For Each WDValue As Object In wertWD
|
|
If WDValue Is Nothing = False Then
|
|
'Erst einmal die ALten Werte schreiben
|
|
ReDim Preserve ValueArray(Anzahl)
|
|
'Den Wert im Array speichern
|
|
ValueArray(Anzahl) = WDValue.ToString
|
|
Logger.Debug("Value (" & Anzahl & ") " & WDValue.ToString)
|
|
Anzahl += 1
|
|
End If
|
|
Next
|
|
'Jetzt die Neuen Werte auf Duplikate überprüfen
|
|
For Each NewValue As Object In NIIndexe
|
|
If NewValue Is Nothing = False Then
|
|
If ValueArray.Contains(NewValue) = False Then
|
|
Logger.Debug("New Value (" & Anzahl & ") " & NewValue.ToString)
|
|
'Das Array anpassen
|
|
ReDim Preserve ValueArray(Anzahl)
|
|
'Den Wert im Array speichern
|
|
ValueArray(Anzahl) = NewValue.ToString
|
|
Anzahl += 1
|
|
Else
|
|
Logger.Debug("Value '" & NewValue.ToString & "' bereits in Vektorfeld enthalten")
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
End If
|
|
Else
|
|
Logger.Debug("Vektorfeld ist noch leer....")
|
|
'Den/die Neuen Wert(e) anfügen
|
|
For Each NewValue As Object In NIIndexe
|
|
If NewValue Is Nothing = False Then
|
|
If CheckDuplikat = True Then
|
|
If ValueArray Is Nothing = False Then
|
|
If ValueArray.Contains(NewValue) = False Then
|
|
'Das Array anpassen
|
|
ReDim Preserve ValueArray(Anzahl)
|
|
'Den Wert im Array speichern
|
|
ValueArray(Anzahl) = NewValue.ToString
|
|
Anzahl += 1
|
|
Else
|
|
Logger.Debug("Value '" & NewValue.ToString & "' bereits in Array enthalten")
|
|
End If
|
|
Else 'Dererste Wert, also hinzufügen
|
|
'Das Array anpassen
|
|
ReDim Preserve ValueArray(Anzahl)
|
|
'Den Wert im Array speichern
|
|
ValueArray(Anzahl) = NewValue.ToString
|
|
Anzahl += 1
|
|
|
|
End If
|
|
|
|
Else
|
|
'Das Array anpassen
|
|
ReDim Preserve ValueArray(Anzahl)
|
|
'Den Wert im Array speichern
|
|
ValueArray(Anzahl) = NewValue.ToString
|
|
Anzahl += 1
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
|
|
Logger.Debug("Return ValueArray: length " & ValueArray.Length)
|
|
Return ValueArray
|
|
Catch ex As Exception
|
|
Logger.Error(ex)
|
|
Return Nothing
|
|
End Try
|
|
End Function
|
|
|
|
|
|
|
|
|
|
End Class
|
|
|