Imports System.IO.File
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports System.ComponentModel
Imports System
Imports System.IO
Imports System.SystemException
'''EDKB08 - Hauptprogramm
'''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.
Module Main
#Region "Deklarationen"
'''Variable mit dem Namen des zu überwachenden Verzeichnises
Dim Watch_Directory As String
'''FileSystemWatcher
'''Dieser Reagiert auf das Ereignis OnCreate im angegebenen Verzeichnis
'''(Watch_Directory)
Dim FileWatch As New FileSystemWatcher()
'''Varaible zum Zwischenspeichern der Indexdaten einer
'''Indexdaten-Datei
Dim indexdata As DataTable
Dim WithEvents JournalTimer As New Timers.Timer()
#End Region
#Region "Hauptverarbeitung"
'''Steuerroutine für EDKB08
'''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.
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
'''Verarbeitung von angelieferten Indexdateien. Die Verarbeitung läuft so
'''lange, bis keine .IND-Dateien mehr im Improt-Verzeichnis vorhanden
'''sind.
'''Die angeleiferten Indexdateien im Verzeichnis werden eingelesen und
'''verarbeitet.
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
'''Journaldatei erstellen und je nach Applikationseinstellungen
'''versenden
'''Erstellt eine Journaldatei mit den Journaldaten der Verarbeitung und
'''sendet diese mittels Mail bzw. mittls DTO weiter
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
'''DTO-Versand
'''
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"
'''Initialisierung des Filewacher-Objektes
'''Das Filewacher-Objekt wird mit den entpsrechenden Pfad- sowie
'''Dateifilter-Angaben initialisiert.
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
'''Eventhandler des FileWatching-Objektes aktivieren
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
'''Aktivitäten im Inputverzeichnis verarbeiten
'''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
'''
'''
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