Imports System.IO Imports System.Globalization Imports System.Xml Imports Renci.SshNet Imports System.Net Imports System.Text Public Class frmMDMNachrichtenVerarbeitung Dim cntDatenEingelesen As Integer = 0 Dim dsNichtErkannt As Integer = 0 Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Dim allowClose = False ' Dim DY_PFAD = "C:\Users\DEVELOPER1\Desktop\test\TEST\" Dim TELOTEC_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_Einarbeitung\" Dim VERARBEITUNGS_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_Einarbeitung\" Dim ZIEL_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_Ablage\" Dim ERROR_PFAD = "" '"C:\Users\DEVELOPER1\Desktop\test\TEST\Nachrichtendaten_ERROR\" ' Dim BOX_VERSION = "8.8" Dim Dateiname = "" Sub New() ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. End Sub Sub New(allowClose) 'autostart ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() Me.allowClose = allowClose ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. End Sub Sub initPfade() Me.TELOTEC_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("PLOSE_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) Me.VERARBEITUNGS_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("VERARBEITUNGS_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) 'VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir() & "DAKOSY\TESTSYSTEM\Nachrichtendaten_Einarbeitung\" Me.ZIEL_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("ZIEL_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) 'VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir() & "DAKOSY\TESTSYSTEM\Nachrichtendaten_Ablage\" Me.ERROR_PFAD = MDM_Worker.cMDM_Paramter.GET_PARAM_ByName("ERROR_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) 'VERAG_PROG_ALLGEMEIN.DATENVERVER_OPTIONS.getRootDir() & "DAKOSY\TESTSYSTEM\Nachrichtendaten_ERROR\" If Not IO.Directory.Exists(VERARBEITUNGS_PFAD) Then IO.Directory.CreateDirectory(VERARBEITUNGS_PFAD) If Not IO.Directory.Exists(ZIEL_PFAD) Then IO.Directory.CreateDirectory(ZIEL_PFAD) If Not IO.Directory.Exists(ERROR_PFAD) Then IO.Directory.CreateDirectory(ERROR_PFAD) 'Me.BOX_VERSION = MDM_Worker.cDY_Paramter.GET_PARAM_ByName("BOX_VERSION", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM) End Sub Private Sub frmDYNachrichtenVerarbeitung_Load(sender As Object, e As EventArgs) Handles Me.Load initPfade() For Each d In System.IO.Directory.GetFiles(VERARBEITUNGS_PFAD) ListBox3.Items.Add(frmStartOptions.cut_file(d)) Me.Refresh() Next End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Me.Enabled = False Try Label9.Visible = True Dim cnt = getNachrichtenDatenFromMDMServices() Label9.Text = cnt & " Datensätze empfangen." Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Me.Enabled = True End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Me.Enabled = False Try Label5.Visible = True DatenEinlesen() If dsNichtErkannt > 0 Then Label6.Text = dsNichtErkannt & " Datensätze nicht " & vbNewLine & "erkannt." Label6.Visible = True End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Me.Enabled = True Label5.Text = cntDatenEingelesen & " Datensätze verarbeitet." End Sub Function getNachrichtenDatenFromMDMServices() As Integer Dim cnt = 0 Try Dim MDM_server = "" Dim MDM_name = "" Dim MDM_pwd = "" Dim MDM_port = "" Dim MDM_PFAD_out = "" MDM_Worker.cMDMFunctions.getSFTPLoginData(MDM_server, MDM_name, MDM_pwd, MDM_port, "", MDM_PFAD_out) Dim Dirlist As New List(Of String) 'I prefer List() instead of an array Dim request As FtpWebRequest = DirectCast(WebRequest.Create(MDM_server & MDM_PFAD_out), FtpWebRequest) request.Method = WebRequestMethods.Ftp.ListDirectory request.Credentials = New NetworkCredential(MDM_name, MDM_pwd) Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse) Dim responseStream As Stream = response.GetResponseStream Using reader As New StreamReader(responseStream) Do While reader.Peek <> -1 Dim fName = reader.ReadLine Loop End Using response.Close() 'Try ' ' Setup session options ' Dim sessionOptions As New SessionOptions ' With sessionOptions ' .Protocol = Protocol.Ftp ' .HostName = "example.com" ' .UserName = "user" ' .Password = "mypassword" ' End With ' Using session As New Session ' ' Will continuously report progress of synchronization ' AddHandler session.FileTransferred, AddressOf FileTransferred ' ' Connect ' session.Open(sessionOptions) ' ' Synchronize files ' Dim synchronizationResult As SynchronizationResult ' synchronizationResult = ' session.SynchronizeDirectories( ' SynchronizationMode.Local, "d:\www", "/home/martin/public_html", False) ' ' Throw on any error ' synchronizationResult.Check() ' End Using ' Return 0 'Catch e As Exception ' Console.WriteLine("Error: {0}", e) ' Return 1 'End Try 'MsgBox(MDM_server & " - " & MDM_name & " - " & MDM_pwd & " - " & MDM_port) 'Dim ConnectionInfo As New ConnectionInfo(MDM_server, MDM_port, MDM_name, New PasswordAuthenticationMethod(MDM_name, MDM_pwd)) 'Using client = New SftpClient(ConnectionInfo) ' client.Connect() ' For Each f In client.ListDirectory(MDM_PFAD_out) ' ' MsgBox(f.Name) ' If Not f.Name.StartsWith(".") Then ' 'Temp. DownloadPfad ' Dim destFilenameTMP = VERARBEITUNGS_PFAD + "." & If(IO.File.Exists(VERARBEITUNGS_PFAD & "." & f.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & f.Name ' 'Datei herunterladen ' Dim downloadFileStream As Stream = File.OpenWrite(destFilenameTMP) ' client.DownloadFile(f.FullName, downloadFileStream) ' If IO.File.Exists(destFilenameTMP) Then client.DeleteFile(f.FullName) 'Datei nach erfolgreichem Herunterladen vom Server löschen ' downloadFileStream.Dispose() ' 'Gültiger Filename ' Dim destFilename = VERARBEITUNGS_PFAD & If(IO.File.Exists(VERARBEITUNGS_PFAD & f.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & f.Name ' IO.File.Move(destFilenameTMP, destFilename) 'Datei umbenennen ' Dim fi As FileInfo = New FileInfo(destFilename) ' ListBox3.Items.Add(frmStartOptions.cut_file(fi.Name)) 'zur Liste hinzufügen ' cnt += 1 ' End If ' Next ' client.Disconnect() 'End Using Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Return cnt End Function Function getNachrichtenDatenFromMDMServices_ALTERNATIV() As Integer Dim cnt = 0 Try For Each f In IO.Directory.GetFiles(TELOTEC_PFAD) Dim FI As New FileInfo(f) If Not FI.Name.StartsWith(".") Then 'Temp. DownloadPfad Dim destFilenameTMP = VERARBEITUNGS_PFAD + "." & If(IO.File.Exists(VERARBEITUNGS_PFAD & "." & FI.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & FI.Name 'Datei herunterladen IO.File.Copy(f, destFilenameTMP) If IO.File.Exists(destFilenameTMP) Then IO.File.Delete(f) 'Datei nach erfolgreichem Herunterladen vom Server löschen 'Gültiger Filename Dim destFilename = VERARBEITUNGS_PFAD & If(IO.File.Exists(VERARBEITUNGS_PFAD & FI.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & FI.Name IO.File.Move(destFilenameTMP, destFilename) 'Datei umbenennen Dim fi_dest As FileInfo = New FileInfo(destFilename) ListBox3.Items.Add(frmStartOptions.cut_file(fi_dest.Name)) 'zur Liste hinzufügen cnt += 1 lblDatenCnt.Text = cnt Me.Refresh() End If Next Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Return cnt 'Dim cnt = 0 'Try ' Dim DY_server = "" ' Dim DY_name = "" ' Dim DY_pwd = "" ' Dim DY_port = "" ' Dim DY_PFAD_out = "" ' DAKOSY_Worker.cDakosyFunftions.getSFTPLoginData(DY_server, DY_name, DY_pwd, DY_port, "", DY_PFAD_out) ' Dim ConnectionInfo As New ConnectionInfo(DY_server, DY_port, DY_name, New PasswordAuthenticationMethod(DY_name, DY_pwd)) ' Using client = New SftpClient(ConnectionInfo) ' client.Connect() ' For Each f In client.ListDirectory(DY_PFAD_out) ' ' MsgBox(f.Name) ' If Not f.Name.StartsWith(".") Then ' 'Temp. DownloadPfad ' Dim destFilenameTMP = VERARBEITUNGS_PFAD + "." & If(IO.File.Exists(VERARBEITUNGS_PFAD & "." & f.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & f.Name ' 'Datei herunterladen ' Dim downloadFileStream As Stream = File.OpenWrite(destFilenameTMP) ' client.DownloadFile(f.FullName, downloadFileStream) ' If IO.File.Exists(destFilenameTMP) Then client.DeleteFile(f.FullName) 'Datei nach erfolgreichem Herunterladen vom Server löschen ' downloadFileStream.Dispose() ' 'Gültiger Filename ' Dim destFilename = VERARBEITUNGS_PFAD & If(IO.File.Exists(VERARBEITUNGS_PFAD & f.Name), Now.ToString("yyMMdd_HHmmss.fff_"), "") & f.Name ' IO.File.Move(destFilenameTMP, destFilename) 'Datei umbenennen ' Dim fi As FileInfo = New FileInfo(destFilename) ' ListBox3.Items.Add(frmStartOptions.cut_file(fi.Name)) 'zur Liste hinzufügen ' cnt += 1 ' End If ' Next ' client.Disconnect() ' End Using 'Catch ex As Exception ' VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) 'End Try 'Return cnt End Function ' Dim toEncodeAsBytes() As Byte = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode) ' string returnValue = System.Convert.ToBase64String(toEncodeAsBytes) Public Function stripNonValidXMLCharacters(ByVal textIn As String) As String Dim textOut As System.Text.StringBuilder = New System.Text.StringBuilder() Dim current As Char If textIn Is Nothing OrElse textIn = String.Empty Then Return String.Empty For i As Integer = 0 To textIn.Length - 1 current = textIn(i) If (current = "9" OrElse current = "10" OrElse current = "13") OrElse ((current >= "32") AndAlso (current <= "55295")) OrElse ((current >= "57344") AndAlso (current <= "65533")) OrElse ((current >= "65536") AndAlso (current <= "1114111")) Then textOut.Append(current) End If Next Return textOut.ToString() End Function Public Function SanitizeXmlString(ByVal xml As String) As String If xml Is Nothing Then Throw New ArgumentNullException("xml") End If Dim buffer As System.Text.StringBuilder = New System.Text.StringBuilder(xml.Length) For Each c As Char In xml If IsLegalXmlChar(Asc(c)) Then buffer.Append(c) End If Next Return buffer.ToString() End Function Public Function IsLegalXmlChar(ByVal character As Integer) As Boolean Return (character = 9 OrElse character = 10 OrElse character = 13 OrElse (character >= 32 AndAlso character <= 55295) OrElse (character >= 57344 AndAlso character <= 65533) OrElse (character >= 65536 AndAlso character <= 1114111)) End Function Sub DatenEinlesen() VERAG_PROG_ALLGEMEIN.cAllgemein.ERR_OP_GLOBAL = VERAG_PROG_ALLGEMEIN.ERROR_OP.MAIL If ListBox3.Items.Count = 0 Then Label6.Text = "Keine Daten zum Einlesen vorhanden." Label6.Visible = True Exit Sub End If For Each d In System.IO.Directory.GetFiles(VERARBEITUNGS_PFAD) Try Dateiname = d cWorker_NCTS.Dateiname = d If IO.File.Exists(d) Then Dim found = False Dim fi As FileInfo = New FileInfo(d) ' EDIFACT ' If fi.Extension = ".edi" Then Dim alreadyMoved = False If fi.Extension.ToLower = ".xml" Then Dim xmlWriterSettings As XmlWriterSettings = New XmlWriterSettings With {.Encoding = System.Text.Encoding.UTF8, .CheckCharacters = True} Dim doc As New XmlDocument() Dim XML_Code = System.IO.File.ReadAllText(d, System.Text.UTF8Encoding.Default) doc.LoadXml(SanitizeXmlString(XML_Code)) Dim VERSION As String = "" '------------------------------------------------------------------------------------------------------------------------------ ' eZOLL '------------------------------------------------------------------------------------------------------------------------------ '------------------------------------------ '------------------ Anmeldung ------------------ '------------------------------------------ 'TC: Versandbestätigung 'If Not found And cGetMsgType.isTC_Anmeldung(doc) Then ' If readTC_Anmeldung(doc, d) <> "" Then found = True ' ' If bezugsNr <> "" Then addDGVEinarbeitung("NCTS: Versandbestätigung", bezugsNr) : found = True 'End If ElseIf fi.Extension.ToLower = ".csv" Then '------------------------------------------------------------------------------------------------------------------------------ ' PLOSE '------------------------------------------------------------------------------------------------------------------------------ '------------------------------------------ '------------------ DETAIL ------------------ '------------------------------------------ 'TC: Versandbestätigung If Not found And cGetMsgType.isPLOSE_Detail(d) Then If readPLOSE_Detail(d) <> "" Then found = True ' If bezugsNr <> "" Then addDGVEinarbeitung("NCTS: Versandbestätigung", bezugsNr) : found = True End If End If If True Then If Not alreadyMoved Then If found Then If Not IO.Directory.Exists(ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") Then IO.Directory.CreateDirectory(ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") frmStartOptions.moveFile(d, ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") Else frmStartOptions.moveFile(d, ERROR_PFAD) End If End If End If Me.Refresh() If found Then cntDatenEingelesen += 1 Else dsNichtErkannt += 1 End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try Next End Sub Function getString(doc As XmlDocument) As Boolean If doc.HasChildNodes Then ' If doc.GetElementsByTagName("DakosyMessageInternal").Count > 0 Then Dim sw = New StringWriter() Dim xw = New XmlTextWriter(sw) doc.WriteTo(xw) Dim XmlString = sw.ToString() MsgBox(XmlString) End If Return False End Function Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click Me.Close() End Sub Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click Me.Close() End Sub Sub addDGVEinarbeitung(art, BezugsNr) dgvEinarbeitung.Rows.Add(art, BezugsNr) Try dgvEinarbeitung.FirstDisplayedScrollingRowIndex = dgvEinarbeitung.RowCount - 1 Catch ex As Exception End Try End Sub Function readPLOSE_Detail(d As String) As String Try readPLOSE_Detail = "" Dim KdnR = "" Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(d, Encoding.UTF8) MyReader.TextFieldType = FileIO.FieldType.Delimited MyReader.SetDelimiters(";") Dim currentRow As String() Dim cnt = 0 If True Then While Not MyReader.EndOfData Try currentRow = MyReader.ReadFields() If currentRow.Length > 24 Then Dim PLOSE As New MDM_Worker.cPLOSE PLOSE.plose_Datensatztyp = SQL.isleernothing(currentRow(0)) PLOSE.plose_KodexMautTankstelle = SQL.isleernothing(currentRow(1)) PLOSE.plose_BeschreibungMautTankstelle = SQL.isleernothing(currentRow(2)) PLOSE.plose_KodexEinfahrt = SQL.isleernothing(currentRow(3)) PLOSE.plose_BeschreibungEinfahrt = SQL.isleernothing(currentRow(4)) PLOSE.plose_KodexAusfahrt = SQL.isleernothing(currentRow(5)) PLOSE.plose_BeschreibungAusfahrt = SQL.isleernothing(currentRow(6)) PLOSE.plose_Kartenkodex = SQL.isleernothing(currentRow(7)) PLOSE.plose_Kontonummer = SQL.isleernothing(currentRow(8)) PLOSE.plose_NummerKarteGeraet = SQL.isleernothing(currentRow(9)) PLOSE.plose_Kennzeichen = SQL.isleernothing(currentRow(10)) PLOSE.plose_InterneNrFahrzeug = SQL.isleernothing(currentRow(11)) PLOSE.plose_POLSEKundennummer = SQL.isleernothing(currentRow(12)) PLOSE.plose_Firmenname = SQL.isleernothing(currentRow(13)) PLOSE.plose_DatumTransaktion = SQL.isleernothingDateFormatstring(currentRow(14)) PLOSE.plose_Produktbeschreibung = SQL.isleernothing(currentRow(15)) PLOSE.plose_Menge = SQL.isNullNothingDbl(currentRow(16)) PLOSE.plose_Preis = SQL.isNullNothingDbl(currentRow(17)) PLOSE.Einheitsrabatt = SQL.isleernothing(currentRow(18)) PLOSE.plose_NettobetragTransaktion = SQL.isNullNothingDbl(currentRow(19)) PLOSE.plose_MWSTBetrag = SQL.isNullNothingDbl(currentRow(20)) PLOSE.plose_BruttobetragTransaktion = SQL.isNullNothingDbl(currentRow(21)) PLOSE.plose_NettobetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(22)) PLOSE.plose_MWSTBetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(23)) PLOSE.plose_BruttobetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(24)) PLOSE.plose_WaehrungLandDiesntleistung = SQL.isleernothing(currentRow(25)) PLOSE.plose_WaehrungAbbuchung = SQL.isleernothing(currentRow(26)) PLOSE.plose_DokumentNrQuittungUhrzeit = SQL.isleernothing(currentRow(27)) PLOSE.plose_ArtTransaktion = SQL.isleernothing(currentRow(28)) PLOSE.plose_Fahrzeugklasse = SQL.isleernothing(currentRow(29)) PLOSE.plose_KlassenidentifikationEURO = SQL.isleernothing(currentRow(30)) PLOSE.plose_ProduktbeschreibungShort = SQL.isleernothing(currentRow(31)) PLOSE.plose_DokumentNrQuittungUhrzeit = SQL.isleernothing(currentRow(32)) PLOSE.plose_Geraetetyp = SQL.isleernothing(currentRow(33)) PLOSE.plose_ProduktCode = SQL.isleernothing(currentRow(34)) PLOSE.plose_ReferenzenBuchungMaut = SQL.isleernothing(currentRow(35)) '''''''''''' If PLOSE.SAVE() Then End If End If cnt += 1 'For Each currentField In currentRow 'Next Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try End While 'Label30.Text = (cnt + 1) & " / " & LineCount 'Label31.Visible = True readPLOSE_Detail = "Zeilen: " & cnt Else MsgBox("FEHLER beim Löschen der vorhandenen OP-Liste.") End If End Using Try ' System.IO.File.Delete(p) Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) End Try addDGVEinarbeitung("PLOSE: Detail" & KdnR, readPLOSE_Detail) ' End Using 'End If Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name) MsgBox(ex.StackTrace & ex.Message) readPLOSE_Detail = "" End Try End Function Private Sub dgvEinarbeitung_SelectionChanged(sender As Object, e As EventArgs) Handles dgvEinarbeitung.SelectionChanged dgvEinarbeitung.ClearSelection() End Sub Private Sub frmTCNachrichtenVerarbeitung_Shown(sender As Object, e As EventArgs) Handles Me.Shown If allowClose Then Me.Refresh() Button2.PerformClick() Button1.PerformClick() System.Threading.Thread.Sleep(2000) Me.Close() End If End Sub End Class