You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
282 lines
11 KiB
282 lines
11 KiB
Imports System.IO.File
|
|
Imports System.Data.SqlClient
|
|
Imports System.Data.SqlTypes
|
|
Imports System.ComponentModel
|
|
Imports System
|
|
Imports System.IO
|
|
Imports System.SystemException
|
|
|
|
'''<summary>EDKB08 - Hauptprogramm</summary>
|
|
'''<remarks>EDKB08 ist ein Importfunktion für Dokumente, welche durch
|
|
'''Fremdanwendungen geliefert und in EDOKA importiert werden sollen.
|
|
'''
|
|
'''Als Input werden die einzelenen Dokumente sowie eine oderer mehrer Dateien mit
|
|
'''den zugehörenden Indexinformationen in ein definiertes Verzeichnis gestellt.
|
|
'''
|
|
'''EDKB08 überwacht das definierte Verzeichnis. Sobald eine Datei mit der Endung
|
|
'''".IND" angeliefert wird, startet der eigentliche Importvorgang.</remarks>
|
|
Module Main
|
|
|
|
|
|
#Region "Deklarationen"
|
|
'''<summary>Variable mit dem Namen des zu überwachenden Verzeichnises</summary>
|
|
Dim Watch_Directory As String
|
|
'''<summary>FileSystemWatcher</summary>
|
|
'''<remarks>Dieser Reagiert auf das Ereignis OnCreate im angegebenen Verzeichnis
|
|
'''(Watch_Directory)</remarks>
|
|
Dim FileWatch As New FileSystemWatcher()
|
|
|
|
'''<summary>Varaible zum Zwischenspeichern der Indexdaten einer
|
|
'''Indexdaten-Datei</summary>
|
|
Dim indexdata As DataTable
|
|
|
|
Dim WithEvents JournalTimer As New Timers.Timer()
|
|
|
|
|
|
|
|
|
|
#End Region
|
|
|
|
#Region "Hauptverarbeitung"
|
|
'''<summary>Steuerroutine für EDKB08</summary>
|
|
'''<remarks>Diese Routine wird beim Programmstart durchlaufen. Dabei werden die
|
|
'''benötigten Parameter ausgelesen und an der Konsole angezeigt.
|
|
'''
|
|
'''Nach erfolgreicher Initialisierung werden Aktivitäten im vordefinierten
|
|
'''Verzeichnis abgewartet.</remarks>
|
|
Public Sub Main()
|
|
PrintOut("Start EDKB08")
|
|
JournalTimer.Interval = 3600000
|
|
JournalTimer.Enabled = True
|
|
|
|
'Parameter auslesen
|
|
If Params.Loadparameters = False Then
|
|
PrintOut(Params.Meldung)
|
|
PrintOut("Verarbeitung abgebrochen")
|
|
Exit Sub
|
|
Else
|
|
Watch_Directory = Params.Inputverzeichnis
|
|
PrintOut(Params.Meldung)
|
|
PrintOut("Parameter:")
|
|
PrintOut("Überwachtes Verzeichnis: " + Params.Inputverzeichnis)
|
|
PrintOut("E-Mail OK: " + Params.MailAdresseOK)
|
|
PrintOut("E-Mail NOK:" + Params.MailAdresseNOK)
|
|
End If
|
|
'Datenbank initialisieren
|
|
Dim db_conn As New edokadb.DB_Connection()
|
|
|
|
'Verzeichnis-Überwachung initialisieren und starten
|
|
If Not Init_Filewatcher() Then
|
|
PrintOut("Verarbeitung gestoppt", EventLogEntryType.Error)
|
|
End If
|
|
If Not Start_Watching() Then
|
|
PrintOut("Verarbeitung gestoppt", EventLogEntryType.Error)
|
|
Exit Sub
|
|
End If
|
|
PrintOut("")
|
|
PrintOut("Return-Taste betätigen, um EDKB08 zu stoppen")
|
|
Console.ReadLine()
|
|
PrintOut("EDKB08 gestoppt")
|
|
End Sub
|
|
|
|
'''<summary>Verarbeitung von angelieferten Indexdateien. Die Verarbeitung läuft so
|
|
'''lange, bis keine .IND-Dateien mehr im Improt-Verzeichnis vorhanden
|
|
'''sind.</summary>
|
|
'''<remarks>Die angeleiferten Indexdateien im Verzeichnis werden eingelesen und
|
|
'''verarbeitet.</remarks>
|
|
Private Sub Verarbeiten()
|
|
Dim looper As Boolean = True
|
|
Dim counter As Integer
|
|
counter = 0
|
|
While looper = True
|
|
counter = counter + 1
|
|
Globals.Journal.Open_Journal()
|
|
'Alle .IND-Dateien im Verzeichnis auslesen
|
|
Dim clsindex As New clsIndexData()
|
|
Dim di As New IO.DirectoryInfo(Watch_Directory)
|
|
Dim diar1 As IO.FileInfo() = di.GetFiles("*.ind")
|
|
Dim dra As IO.FileInfo
|
|
If diar1.Length = 0 Then
|
|
looper = False
|
|
clsindex = Nothing
|
|
di = Nothing
|
|
diar1 = Nothing
|
|
Globals.Journal.Delete_Entry()
|
|
Exit Sub
|
|
End If
|
|
|
|
For Each dra In diar1
|
|
Globals.Journal.Insert_Journal("", "", "", dra.FullName, "", "Start der Verarbeitung", "", "")
|
|
PrintOut("File-Nr " + counter + ": " + dra.FullName)
|
|
clsindex.IndexFileName = dra.FullName
|
|
If clsindex.getindexdata Then
|
|
indexdata = clsindex.Indexdata
|
|
Dim check_and_import As New clsCheckandImport()
|
|
check_and_import.IndexData = indexdata
|
|
|
|
If check_and_import.Herkunftsapplikationen_auslesen Then
|
|
'Sofern die Herkunftsapplikation erruiert werden konnte, wird die Journaltabelle mit der Applikationsid nachgeführt
|
|
Globals.Journal.Update_Journal()
|
|
|
|
'Verarbeitung der Daten
|
|
check_and_import.CheckandImport()
|
|
check_and_import = Nothing
|
|
End If
|
|
End If
|
|
Journal.Insert_Journal("", "", "", dra.FullName, "", "Total Index-Datensätze: " + LTrim(Str(indexdata.Rows.Count)), "", "")
|
|
Journal.Insert_Journal("", "", "", dra.FullName, "", "Verarbeitung abgeschlossen.", "", "")
|
|
Logdatei_Erstellen()
|
|
|
|
Next
|
|
clsindex = Nothing
|
|
di = Nothing
|
|
diar1 = Nothing
|
|
Globals.Journal.Close_Journal()
|
|
End While
|
|
End Sub
|
|
|
|
'''<summary>Journaldatei erstellen und je nach Applikationseinstellungen
|
|
'''versenden</summary>
|
|
'''<remarks>Erstellt eine Journaldatei mit den Journaldaten der Verarbeitung und
|
|
'''sendet diese mittels Mail bzw. mittls DTO weiter</remarks>
|
|
Private Sub Logdatei_Erstellen()
|
|
Dim filename As String
|
|
Try
|
|
If Globals.Herkunftsapplikation.Rows(0).Item("log_per_mail") = False And Globals.Herkunftsapplikation.Rows(0).Item("log_mit_dto") = False Then Exit Sub
|
|
If Globals.Herkunftsapplikation.Rows(0).Item("log_per_mail") = True And Globals.Herkunftsapplikation.Rows(0).Item("Mail_Periodizitaet") = 0 Then
|
|
filename = Journal.Print_Log(Globals.Herkunftsapplikation.Rows(0).Item(0), Globals.Herkunftsapplikation.Rows(0).Item(1), Globals.Herkunftsapplikation.Rows(0).Item("outputformat"))
|
|
End If
|
|
If Globals.Herkunftsapplikation.Rows(0).Item("log_mit_dto") = True Then
|
|
filename = Journal.Print_Log(Globals.Herkunftsapplikation.Rows(0).Item(0), Globals.Herkunftsapplikation.Rows(0).Item(1), Globals.Herkunftsapplikation.Rows(0).Item("outputformat"))
|
|
Send_DTO(filename)
|
|
End If
|
|
Catch
|
|
End Try
|
|
End Sub
|
|
|
|
'''<summary>DTO-Versand</summary>
|
|
'''<param name="filename"></param>
|
|
Private Sub Send_DTO(ByVal filename As String)
|
|
Try
|
|
Dim i As Integer
|
|
Dim tw As TextWriter
|
|
Dim s As String
|
|
s = Herkunftsapplikation.Rows(0).Item(3)
|
|
s = s.Replace("%1", filename)
|
|
tw = New StreamWriter(New FileStream(Params.TempPfad + "dtotransfer.cmd", FileMode.Create))
|
|
tw.WriteLine(s)
|
|
tw.Flush()
|
|
tw.Close()
|
|
i = Microsoft.VisualBasic.Shell(Params.TempPfad + "dtotransfer.cmd", AppWinStyle.Hide, True)
|
|
Catch
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub Send_Mail(ByVal filename As String, ByVal empfaenger As String)
|
|
Try
|
|
Dim i As Integer
|
|
Dim tw As TextWriter
|
|
Dim s As String
|
|
s = Herkunftsapplikation.Rows(0).Item(3)
|
|
s = s.Replace("%1", filename)
|
|
tw = New StreamWriter(New FileStream(Params.TempPfad + "dtotransfer.cmd", FileMode.Create))
|
|
tw.WriteLine(s)
|
|
tw.Flush()
|
|
tw.Close()
|
|
i = Microsoft.VisualBasic.Shell(Params.TempPfad + "dtotransfer.cmd", AppWinStyle.Hide, True)
|
|
Catch
|
|
End Try
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "FileWatcher"
|
|
'''<summary>Initialisierung des Filewacher-Objektes</summary>
|
|
'''<remarks>Das Filewacher-Objekt wird mit den entpsrechenden Pfad- sowie
|
|
'''Dateifilter-Angaben initialisiert.</remarks>
|
|
Private Function Init_Filewatcher() As Boolean
|
|
Try
|
|
FileWatch.Path = Watch_Directory
|
|
FileWatch.IncludeSubdirectories = False
|
|
FileWatch.Filter = "*.*"
|
|
Return True
|
|
Catch ex As Exception
|
|
PrintOut("Fehler bei der Initialisierung des Filewacherobjekts auf " + Watch_Directory)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
'''<summary>Eventhandler des FileWatching-Objektes aktivieren</summary>
|
|
Private Function Start_Watching() As Boolean
|
|
Try
|
|
AddHandler FileWatch.Created, New FileSystemEventHandler(AddressOf OnFileEvent)
|
|
FileWatch.EnableRaisingEvents = True
|
|
PrintOut("Event-Handler initialisiert")
|
|
Return True
|
|
Catch ex As Exception
|
|
PrintOut("Fehler bei der Event-Initialisierung")
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
'''<summary>Aktivitäten im Inputverzeichnis verarbeiten</summary>
|
|
'''<remarks>Wird eine Datei mit der Endung .IND angeliefert, wird der Eventhandler
|
|
'''gestoppt und die anstehenden Dokumente verarbeitet.
|
|
'''
|
|
'''Nach abgeschlossener Verarbeitung wird der Eventhandler wieder
|
|
'''eingeschaltet</remarks>
|
|
'''<param name="source"></param>
|
|
'''<param name="e"></param>
|
|
Private Sub OnFileEvent(ByVal source As Object, ByVal e As FileSystemEventArgs)
|
|
If UCase(Microsoft.VisualBasic.Right(e.FullPath, 4)) = ".IND" Then
|
|
PrintOut("Neue Datei " + e.FullPath)
|
|
FileWatch.EnableRaisingEvents = False
|
|
Verarbeiten()
|
|
FileWatch.EnableRaisingEvents = True
|
|
End If
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "Utils"
|
|
#End Region
|
|
|
|
'Public Sub JournalTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles JournalTimer.Elapsed
|
|
|
|
' If Now.Hour > 0 And Now.Hour < 1 Then
|
|
' Dim filename As String
|
|
' Dim dt As DataTable
|
|
' Dim i As Integer
|
|
' PrintOut("Start Tägliche Journalerstellung")
|
|
' dt = get_applikationen()
|
|
' For i = 0 To dt.Rows.Count - 1
|
|
' filename = Journal.Print_Log(dt.Rows(i).Item(0), dt.Rows(i).Item(1), dt.Rows(i).Item(2))
|
|
' Send_Mail(filename, dt.Rows(i).Item(3))
|
|
' PrintOut(dt.Rows(i).Item(1) + ": " + "Journal gesendet")
|
|
' Next
|
|
' End If
|
|
'End Sub
|
|
|
|
'Private Function get_applikationen() As DataTable
|
|
' Dim scmCmdToExecute As SqlCommand = New SqlCommand()
|
|
' Dim dtToReturn As DataTable = New DataTable()
|
|
' Dim sdaAdapter As SqlDataAdapter = New SqlDataAdapter(scmCmdToExecute)
|
|
' scmCmdToExecute.CommandText = "dbo.sp_edoka_import_Journalversand] "
|
|
' scmCmdToExecute.CommandType = CommandType.StoredProcedure
|
|
' scmCmdToExecute.Connection = conn_edoka.scoDBConnection
|
|
' Try
|
|
' sdaAdapter.Fill(dtToReturn)
|
|
' Return dtToReturn
|
|
' Catch ex As Exception
|
|
' PrintOut("Tägliche Journalerstellung fehlgeschlagen. " + ex.Message, EventLogEntryType.Error)
|
|
' Finally
|
|
' scmCmdToExecute.Dispose()
|
|
' sdaAdapter.Dispose()
|
|
' dtToReturn.Dispose()
|
|
' End Try
|
|
'End Function
|
|
|
|
End Module
|
|
|
|
|