Initial
This commit is contained in:
281
edkb08/Main.vb
Normal file
281
edkb08/Main.vb
Normal file
@@ -0,0 +1,281 @@
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user