Imports System.ServiceProcess Imports System.Threading Imports System.IO Imports System.Reflection Imports System.IO.File Imports System.Data.SqlClient Imports System.Data.SqlTypes Imports System.ComponentModel Imports System Imports System.SystemException Imports System.Web.Mail ''' Public Class Service1 Inherits System.ServiceProcess.ServiceBase #Region " Vom Component Designer generierter Code " Public Sub New() MyBase.New() ' Dieser Aufruf wird vom Komponenten-Designer benötigt. InitializeComponent() ' Fügen Sie Initialisierungscode hinter dem InitializeComponent()-Aufruf ein End Sub 'UserService überschreibt den Löschvorgang zum Bereinigen der Komponentenliste. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub ' Der Haupteinstiegspunkt für den Vorgang _ Shared Sub Main() '#If Debug Then ' Dim service As New Service1() ' service.Run(Service1) ' service.StartService() ' System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite) '#Else ' Dim ServicesToRun() As System.ServiceProcess.ServiceBase ' ServicesToRun = New System.ServiceProcess.ServiceBase() {New service1} ' System.ServiceProcess.ServiceBase.Run(ServicesToRun) '#End If Dim ServicesToRun() As System.ServiceProcess.ServiceBase ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1()} System.ServiceProcess.ServiceBase.Run(ServicesToRun) End Sub ' Für Komponenten-Designer erforderlich Private components As System.ComponentModel.IContainer ' HINWEIS: Die folgende Prozedur wird vom Komponenten-Designer benötigt. ' Sie kann mit dem Komponenten-Designer modifiziert werden. Verwenden Sie nicht ' den Code-Editor zur Bearbeitung. 'Friend WithEvents ServiceIcon As System.Windows.Forms.NotifyIcon Friend WithEvents ImageList1 As System.Windows.Forms.ImageList Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Service1)) 'Me.ServiceIcon = New System.Windows.Forms.NotifyIcon(Me.components) Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components) ' 'ServiceIcon ' 'Me.ServiceIcon.Icon = CType(resources.GetObject("ServiceIcon.Icon"), System.Drawing.Icon) 'Me.ServiceIcon.Text = "EDKB08WS" 'Me.ServiceIcon.Visible = True ' 'ImageList1 ' Me.ImageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit Me.ImageList1.ImageSize = New System.Drawing.Size(16, 16) Me.ImageList1.ImageStream = CType(resources.GetObject("ImageList1.ImageStream"), System.Windows.Forms.ImageListStreamer) Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent ' 'Service1 ' Me.ServiceName = "Service1" End Sub #End Region #Region "Deklarationen" Private StopThread As Boolean = False '''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 '''Timer zur Auslösung der täglichen Journalaufbereitung Dim WithEvents JournalTimer As New Timers.Timer() 'Anpassungen GSF Dim WithEvents GSF_Timer As New Timers.Timer() #End Region #Region "Hauptverarbeitung" '''Start des Dienstes EDKB08WS '''Beim Start des Dienstes werden neben dem Einlesen der Parameter der '''Journaltimer sowie der Systemfilewatcher zur Verzeichnisüberwachung '''initialisiert. ''' Protected Overrides Sub OnStart(ByVal args() As String) Try 'Dim bmp As New Bitmap(Me.ImageList1.Images(2)) 'ServiceIcon.Icon = Icon.FromHandle(bmp.GetHicon()) 'ServiceIcon.Visible = True 'ServiceIcon.Text = "Starting ..." PrintOut("Start EDKB08") 'Parameter auslesen If Params.Loadparameters = False Then PrintOut(Params.Meldung) PrintOut("Verarbeitung abgebrochen") Exit Sub Else GSF_Timer.Interval = Params.Prop_gsf_TimerInterval GSF_Timer.Enabled = True 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) PrintOut("GSF_Timer:" + Params.Prop_gsf_TimerInterval.ToString) PrintOut("GSF_ConfigPath:" + Params.Prop_gsf_ConfigPath) End If 'Datenbank initialisieren Dim db_conn As New edokadb.DB_Connection() JournalTimer.Interval = Params.JournalTimer_Time JournalTimer.Enabled = True PrintOut("Journaltimer initialisiert. Eventhalndler alle " + LTrim(Str(JournalTimer.Interval / (1000 * 60))) + " Minuten") '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 'Dim bmp1 As New Bitmap(Me.ImageList1.Images(1)) 'ServiceIcon.Icon = Icon.FromHandle(bmp1.GetHicon()) 'ServiceIcon.Text = "Waiting ..." Catch ex As Exception ' Dim bmp1 As New Bitmap(Me.ImageList1.Images(2)) 'ServiceIcon.Icon = Icon.FromHandle(bmp1.GetHicon()) PrintOut("Fehler beim Start von EDKB08" + ex.Message, EventLogEntryType.Error) End Try End Sub Protected Overrides Sub OnStop() ' Dim bmp1 As New Bitmap(Me.ImageList1.Images(2)) 'ServiceIcon.Icon = Icon.FromHandle(bmp1.GetHicon()) 'ServiceIcon.Text = "Stopping..." 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 + ex.Message,EventLogEntryType.Error) 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) AddHandler FileWatch.Renamed, AddressOf OnFileEventRename FileWatch.EnableRaisingEvents = True PrintOut("Filewatch Event-Handler initialisiert: " + Me.Watch_Directory) Return True Catch ex As Exception PrintOut("Fehler bei der Event-Initialisierung " + ex.Message, EventLogEntryType.Error) Return False End Try End Function Dim EventStopped As Boolean = False '''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 EventStopped = True Then Exit Sub If UCase(Microsoft.VisualBasic.Right(e.FullPath, 4)) = ".IND" Then FileWatch.EnableRaisingEvents = False EventStopped = True PrintOut("Neue Datei " + e.FullPath) 'ServiceIcon.Text = "Working..." Verarbeiten() ' ServiceThread = New Thread(AddressOf Verarbeiten) ' ServiceThread.Start() FileWatch.EnableRaisingEvents = True End If End Sub Private Sub OnFileEventRename(ByVal source As Object, ByVal e As RenamedEventArgs) If EventStopped = True Then Exit Sub If UCase(Microsoft.VisualBasic.Right(e.FullPath, 4)) = ".IND" Then FileWatch.EnableRaisingEvents = False EventStopped = True PrintOut("Neue Datei " + e.FullPath) '20130131 - Sleep von 1000 auf 3000 geändert, damit bei FinFox-Dokumente die Verarbeitung nicht aussteigt, sofern die Datei noch nicht angeliefert wurde Threading.Thread.CurrentThread.Sleep(3000) Verarbeiten() FileWatch.EnableRaisingEvents = True End If End Sub #End Region #Region "Verarbeitung" '''Verarbeiten von angelieferten Daten '''In dieser Methode werden angelieferte Indexdateien verarbeitet. ''' '''Bevor die Verarbeitung startet, wird der Systemfilewacher '''ausgeschaltet. '''Die Verarbeitung wird solange durchgeführt, bis alle anstehenden '''Indexdaten und Dokumente abgearbeitet sind. '''Am Schluss der Verarbeitung wird der Systemfilewacher wieder '''gestartet. Private Sub Verarbeiten() Dim gsffilename As String = "" Try PrintOut("Bei Verarbeiten() zuerst 5000ms warten", EventLogEntryType.Information) 'Thread.Sleep(5000) 'hallo, wieder aktivieren 'Dim bmp As New Bitmap(Me.ImageList1.Images(0)) 'ServiceIcon.Icon = Icon.FromHandle(bmp.GetHicon()) Dim looper As Boolean = True While looper = True '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() 'Dim bmp1 As New Bitmap(Me.ImageList1.Images(1)) 'ServiceIcon.Icon = Icon.FromHandle(bmp1.GetHicon()) 'ServiceIcon.Text = "Waiting..." EventStopped = False Exit Sub End If Try For Each dra In diar1 gsffilename = dra.Name.Substring(0, dra.Name.IndexOf(".")) PrintOut("File: " + dra.FullName) Globals.Journal.Open_Journal() Globals.Journal.Insert_Journal("", "", "", dra.FullName, "", "Start der Verarbeitung", "", "") DivFnkt.Save_Indexdata(Journal.JournalNr, 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 = False And indexdata.Rows(0).Item(17) = "" Then Journal.Insert_Journal("", "", "", dra.FullName, "16", "Zuordnung zur Herkunftsapplikation fehlt.", "", "") Else 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() 'PrintOut("test", EventLogEntryType.Error) 'Verarbeitung der Daten check_and_import.CheckandImport() check_and_import = Nothing End If 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() Globals.Journal.Close_Journal() 'Anpassungen EBES-LSV If GSF = True Then If Fehler <> 0 Then OBJ_GSF.Set_DokStatus(dra.Name.Substring(0, dra.Name.IndexOf(".")), EDKB08_GSF.Common.Enum_DokStatus.OK) Else OBJ_GSF.Set_DokStatus(dra.Name.Substring(0, dra.Name.IndexOf(".")), EDKB08_GSF.Common.Enum_DokStatus.OK) End If End If Next Catch ex As Exception PrintOut(ex.Message, EventLogEntryType.Error) End Try clsindex = Nothing di = Nothing diar1 = Nothing End While Catch ex As Exception Try Globals.conn_edoka.CloseConnection(True) Catch End Try Try Globals.conn_journale.CloseConnection(True) Catch End Try Fehler = -16 Try Journal.Insert_Journal("", "", "", "", "-16", ex.Message + ex.StackTrace, "", "") Catch End Try Try Journal.Insert_Journal("", "", "", "", "", "Verarbeitung abgebrochen", "", "") Catch End Try Try Journal.Close_Journal() Catch End Try Try OBJ_GSF.Set_DokStatus(gsffilename, EDKB08_GSF.Common.Enum_DokStatus.FehlerEDKB08) Catch End Try PrintOut("Folgender Fehler ist in EDKB08 aufgetreten:" + ex.Message, EventLogEntryType.Error) FileWatch.EnableRaisingEvents = True 'Dim bmp1 As New Bitmap(Me.ImageList1.Images(1)) 'ServiceIcon.Icon = Icon.FromHandle(bmp1.GetHicon()) 'ServiceIcon.Text = "Waiting ..." EventStopped = False End Try 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_erstellung") <> 1 And Globals.Herkunftsapplikation.Rows(0).Item("log_erstellung") <> 2 Then Exit Sub If Globals.Herkunftsapplikation.Rows(0).Item("log_erstellung") = 1 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")) PrintOut("Aufruf Sendmail") Send_Mail(filename, Globals.Herkunftsapplikation.Rows(0).Item("Mail_Empfaneger")) End If If Globals.Herkunftsapplikation.Rows(0).Item("log_erstellung") = 2 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 ex As Exception Journal.Insert_Journal("", "", "", filename, "-16", "Das Journal " + filename + " konnte nicht erstellt werden." + ex.Message, "", "") End Try End Sub '''DTO-Versand ''' Private Function Send_DTO(ByVal filename As String) As Boolean Try Dim i As Integer Dim tw As TextWriter Dim s As String s = Herkunftsapplikation.Rows(0).Item(3) s = s.Replace("%1", filename) s = s.Replace("%2", 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) If i <> 0 Then Journal.Insert_Journal("", "", "", filename, "0", "DTO-Datei konnte nicht übermittelt werden. RC: " + LTrim(Str(i)), "", "") Else Journal.Insert_Journal("", "", "", filename, "0", "DTO-Datei konnte nicht übermittelt werden. RC: " + LTrim(Str(i)), "", "") End If Return True Catch ex As Exception Fehler = 4 Journal.Insert_Journal("", "", "", filename, "-16", "DTO-Datei konnte nicht übermittelt werden. " + ex.Message, "", "") 'PrintOut("Der Journalversand mittls DTO ist fehlgeschlagen. " + ex.Message, EventLogEntryType.Warning) Return False End Try End Function '''Versand von Journaldaten mittels Email ''' ''' Private Function Send_Mail(ByVal filename As String, ByVal empfaenger As String) As Boolean 'Sofern ein SMTP-Server angegeben wird, wird vie SMTP Versendet If Params.Mailserver <> "" Then Dim strArgs() As String = Command.Split(",") Dim blnSMTP As Boolean = False Dim blnCC As Boolean = False Dim blnAttachments As Boolean = False Try Dim insMail As New System.Net.Mail.MailMessage(Params.Mailabsender, empfaenger) With insMail .Subject = "EDKB08-Journal" '.BodyEndoding = System.Text.Encoding.Unicode .Body = "Dieses Email wurde automatisch von EDKB08 erstellt" ' .Attachments.Add(New MailAttachment(filename)) End With Dim myMail As New System.Net.Mail.SmtpClient myMail.Host = Params.Mailserver myMail.Send(insMail) ''PrintOut("Journal erfolgreich versandt.", EventLogEntryType.Information) Journal.Insert_Journal("", "", "", filename, "0", "E-Mail mit Journal versandt.", "", "") Catch ex As Exception Fehler = 4 Journal.Insert_Journal("", "", "", filename, "-10", "E-Mail konnte nicht versandt werden. " + ex.Message, "", "") 'PrintOut("Journal konnte nicht versandt werden." + ex.Message, EventLogEntryType.Error) Return False End Try Else If Save_Report_To_DB(filename) Then If Fehler = 0 Then send_db_mail(empfaenger, "EDKB08-Dokumentimport erfolgreich: " + filename.Substring(filename.LastIndexOf("\") + 1), filename) Else send_db_mail(empfaenger, "EDKB08-Dokumentimport mit Fehlern: " + filename.Substring(filename.LastIndexOf("\") + 1), filename) End If End If End If End Function Private Function send_db_mail(ByVal empfaenger As String, ByVal Subject As String, ByVal filename As String) As Boolean 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_send_mail" scmCmdToExecute.CommandType = CommandType.StoredProcedure scmCmdToExecute.Connection = conn_journale_Mail.scoDBConnection scmCmdToExecute.Parameters.Add(New SqlParameter("@empfaenger", SqlDbType.VarChar, 255, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, empfaenger)) scmCmdToExecute.Parameters.Add(New SqlParameter("@betreff", SqlDbType.VarChar, 255, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Subject)) filename = filename.Substring(filename.LastIndexOf("\") + 1) scmCmdToExecute.Parameters.Add(New SqlParameter("@filename", SqlDbType.VarChar, 255, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, filename)) scmCmdToExecute.Parameters.Add(New SqlParameter("@jobnr", SqlDbType.Int, 4, ParameterDirection.Input, True, 10, 0, "", DataRowVersion.Proposed, Journal.JournalNr)) scmCmdToExecute.Parameters.Add(New SqlParameter("@errorcode", SqlDbType.Int, 4, ParameterDirection.Output, True, 10, 0, "", DataRowVersion.Proposed, 9)) Try sdaAdapter.Fill(dtToReturn) If scmCmdToExecute.Parameters("@errorcode").Value <> 0 Then 'Journal.Insert_Journal("", "", "", filename, "20", "Mail konnte nicht versandt werden. " + scmCmdToExecute.Parameters("@errorcode").Value, "", "") PrintLog("Mail konnte nicht versandt werden. " + scmCmdToExecute.Parameters("@errorcode").Value, EventLogEntryType.Warning) Return False End If Catch ex As Exception 'Journal.Insert_Journal("", "", "", filename, "20", "Mail konnte nicht versandt werden." + ex.Message, "", "") PrintLog("Mail konnte nicht versandt werden." + ex.Message, EventLogEntryType.Warning) Return False Finally scmCmdToExecute.Dispose() sdaAdapter.Dispose() dtToReturn.Dispose() End Try End Function Private Function Save_Report_To_DB(ByVal Filename As String) As Boolean Dim connection As New SqlConnection() Dim da As New SqlDataAdapter("Select * From import_journaldatei where import_jobnr=" + Journal.JournalNr.ToString, connection) Dim CB As SqlCommandBuilder = New SqlCommandBuilder(da) Dim ds As New DataSet() Try 'Connectionstring zur Datenbank connection.ConnectionString = Globals.sConnectionString_journale connection.Open() da.Fill(ds, "docs") Dim fs As New FileStream(Filename, FileMode.Open, FileAccess.Read) Dim mydata(fs.Length) As Byte fs.Read(mydata, 0, fs.Length) fs.Close() Dim myRow As DataRow If ds.Tables(0).Rows.Count = 0 Then ' Neues Dokument speichern myRow = ds.Tables(0).NewRow myRow.Item(0) = Journal.JournalNr myRow.Item(1) = mydata ds.Tables(0).Rows.Add(myRow) da.Update(ds, "docs") Else 'Bestehendes Dokument sichenr myRow = ds.Tables(0).Rows(0) myRow.Item(1) = mydata da.Update(ds, "docs") End If fs.Close() fs = Nothing File.Delete(Filename) Return True Catch ex As Exception Journal.Insert_Journal("", "", "", Filename, "20", "Das Journal konnte nicht auf der Datenbank gespeichert werden." + vbNewLine + ex.Message, "", "") Return False End Try CB = Nothing ds = Nothing da = Nothing connection.Close() connection = Nothing End Function #End Region #Region "Journaltimer Funktionen" Public Sub JournalTimer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles JournalTimer.Elapsed Dim restartdok As New DataTable() Dim restartjob As New DataTable() restartdok = get_restartdok() restartjob = get_restartjob() Me.JournalTimer.Enabled = False Dim i As Integer Me.FileWatch.EnableRaisingEvents = False For i = 0 To restartdok.Rows.Count - 1 Write_Restartfiles(restartdok.Rows(i).Item(0)) Next For i = 0 To restartjob.Rows.Count - 1 Write_Restartjobfiles(restartjob.Rows(i).Item(0)) Next If restartdok.Rows.Count <> 0 Or restartjob.Rows.Count <> 0 Then Verarbeiten() End If '20120905 - SHU - Wenn IND-Dateien im Input-Verzeichnis vorhanden sind, diese verarbeiten Dim di As New IO.DirectoryInfo(Watch_Directory) Dim diar1 As IO.FileInfo() = di.GetFiles("*.ind") If diar1.Length > 0 Then Verarbeiten() restartjob.Dispose() restartdok.Dispose() If Now.Hour > 0 And Now.Hour < 1 Then Dim filename As String Dim dt As DataTable PrintOut("Start Tägliche Journalerstellung") dt = get_applikationen() For i = 0 To dt.Rows.Count - 1 filename = Journal.Print_Log_Batch(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 Me.JournalTimer.Enabled = True Me.FileWatch.EnableRaisingEvents = True End Sub Private Sub Write_Restartfiles(ByVal itemid As Integer) Dim connection As New SqlConnection() Dim da As New SqlDataAdapter("Select * From import_daten where import_data_nr=" + LTrim(Str(itemid)), connection) Dim CB As SqlCommandBuilder = New SqlCommandBuilder(da) Dim ds As New DataSet() Dim Dokumentfilename As String Dim XMLFilename As String Dim xmlstring As String Dim xmlds As New DataSet() Try 'Connectionstring zur Datenbank connection.ConnectionString = Globals.sConnectionString_journale connection.Open() da.Fill(ds, "docs") Dim myRow As DataRow xmlstring = ds.Tables(0).Rows(0).Item(3) myRow = ds.Tables(0).Rows(0) 'Indexfile schreiben XMLFilename = Params.Inputverzeichnis + LTrim(Str(itemid)) + "_" + Format(Now, "yyyyMMddHHmmss") + ".ind" FileOpen(11, XMLFilename, OpenMode.Output) PrintLine(11, xmlstring) FileClose(11) xmlds.ReadXml(XMLFilename) Dokumentfilename = Params.Inputverzeichnis + xmlds.Tables(0).Rows(0).Item(12) xmlds.Dispose() 'Dokumentdatei schreiben Dim MyData() As Byte MyData = myRow.Item(4) Dim K As Long K = UBound(MyData) Dim fs As New FileStream(Dokumentfilename, FileMode.OpenOrCreate, FileAccess.Write) fs.Write(MyData, 0, K) fs.Close() fs = Nothing Catch ex As Exception FileClose(11) End Try CB = Nothing ds = Nothing da = Nothing connection.Close() connection = Nothing End Sub Private Sub Write_Restartjobfiles(ByVal itemid As Integer) Dim connection As New SqlConnection() Dim da As New SqlDataAdapter("Select * From import_job where import_jobnr=" + LTrim(Str(itemid)), connection) Dim CB As SqlCommandBuilder = New SqlCommandBuilder(da) Dim ds As New DataSet() Try 'Connectionstring zur Datenbank connection.ConnectionString = Globals.sConnectionString_journale connection.Open() da.Fill(ds, "docs") Dim myRow As DataRow myRow = ds.Tables(0).Rows(0) Dim MyData() As Byte MyData = myRow.Item(7) Dim K As Long K = UBound(MyData) Dim fs As New FileStream(Params.Inputverzeichnis + LTrim(Str(itemid)) + "_" + Format(Now, "yyyyMMddHHmmss") + ".ind", FileMode.OpenOrCreate, FileAccess.Write) fs.Write(MyData, 0, K) fs.Close() fs = Nothing Catch ex As Exception End Try CB = Nothing ds = Nothing da = Nothing connection.Close() connection = Nothing 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_get_journalprotag" 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) Return dtToReturn Finally scmCmdToExecute.Dispose() sdaAdapter.Dispose() dtToReturn.Dispose() End Try End Function Private Function get_restartdok() 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_get_restartdok" scmCmdToExecute.CommandType = CommandType.StoredProcedure scmCmdToExecute.Connection = conn_journale.scoDBConnection Try sdaAdapter.Fill(dtToReturn) Return dtToReturn Catch ex As Exception PrintOut("Auslesen von erneut zu ladenden Dokumenten ist fehlgeschlagen. " + ex.Message, EventLogEntryType.Error) Return dtToReturn Finally scmCmdToExecute.Dispose() sdaAdapter.Dispose() dtToReturn.Dispose() End Try End Function Private Function get_restartjob() 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_get_restartjob" scmCmdToExecute.CommandType = CommandType.StoredProcedure scmCmdToExecute.Connection = conn_journale.scoDBConnection Try sdaAdapter.Fill(dtToReturn) Return dtToReturn Catch ex As Exception PrintOut("Auslesen von erneut zu ladenden Dokumenten ist fehlgeschlagen. " + ex.Message, EventLogEntryType.Error) Return dtToReturn Finally scmCmdToExecute.Dispose() sdaAdapter.Dispose() dtToReturn.Dispose() End Try End Function #End Region #Region "GSF" Dim WithEvents OBJ_GSF As New EDKB08_GSF.Common() 'Anpassungen EBES-LSV' Dim GSF As Boolean Public Sub GSF_Verarbeitung(ByVal Startverzeichnis As String) Handles OBJ_GSF.StartVerarbeitung Dim savewatch_directory As String Dim saveInputVerzeichnis As String saveInputVerzeichnis = Params.Inputverzeichnis savewatch_directory = Watch_Directory Try Params.Inputverzeichnis = Startverzeichnis Watch_Directory = Startverzeichnis GSF = True Verarbeiten() GSF = False Catch Finally Params.Inputverzeichnis = saveInputVerzeichnis Watch_Directory = savewatch_directory End Try End Sub Public Sub GSF_Timer_Elapsed(ByVal sender As Object, ByVal e As System.Timers.ElapsedEventArgs) Handles GSF_Timer.Elapsed GSF_Timer.Enabled = False FileWatch.EnableRaisingEvents = False OBJ_GSF.Sub_Init(Params.Prop_gsf_ConfigPath, Params.Prop_gsf_ConfigDateiendung) OBJ_GSF.Start_Checking() OBJ_GSF.Sub_End() FileWatch.EnableRaisingEvents = True GSF_Timer.Enabled = True End Sub Sub GSF_logging(ByVal logeintrag As String, ByVal itype As Integer) Handles OBJ_GSF.LogToBMS PrintOut(logeintrag + " " + itype.ToString) End Sub #End Region End Class