Imports System.Data.SqlClient Imports System.IO Imports System.Xml Module modMehrfachdruck #Region " Deklarationen" #End Region #Region " Funkionen und Subs" Public Sub StartMehrfachDruck(ByVal userid As String, ByVal iJobID As Integer, ByVal dtData As DataTable, ByRef binOutput As Object) Dim log As New clsLog Try Dim timestamp As String Dim bError As Boolean timestamp = Format(Now, "yyyyMMddHHmmss") 'DataTable in Collection umwandeln Dim colData As New Collection Dim row As DataRow For Each row In dtData.Rows colData.Add(New clsMehrfachdruck_Data(row.Item("DokumentId"), row.Item("PartnerNr"), _ row.Item("Typ"), row.Item("OfficeDokument"), row.Item("DokumentTyp"), row.Item("Auftragnr"), _ row.Item("PartnerName"), row.Item("Erstellungsdatum"))) Next 'TXT erstellen gen_txtfile(userid, iJobID, colData, timestamp, bError) 'CMD erstellen und senden 'send_cmdfile(userid, timestamp, "00", iJobID, bError) 'Auf Datei warten binOutput = WaitForFile(userid, timestamp, "00", iJobID, bError) Catch ex As Exception log.InsertJournale("EDKB07: Beim Warten auf das Cold-Mehrfachdokument " & CType(Now, String) & " Error: " & ex.Message & " DruckjobID: " & iJobID, clsLog.Enum_InfoTyp.Warnung) End Try End Sub Private Sub gen_txtfile(ByVal userid As String, ByVal iJobID As Integer, ByVal colData As Collection, ByVal timestamp As String, ByRef bError As Boolean) 'Erstellt das txt File für den DruckJob Dim log As New clsLog Dim sFilename As String Try Dim i As Integer Dim NewFile As Boolean = True Dim owriter As System.IO.StreamWriter = Nothing Dim Partno As String = "00" Dim gendok As clsMehrfachdruck_Data Dim snrpar00 As String = "" Dim sDokumentNr As String sFilename = userid & Partno & timestamp For i = 1 To colData.Count 'Erstmals neue Datei erstellen If NewFile Then NewFile = False 'part = part + 1 'Partno = LTrim(Str(part)) 'While Len(Partno) < 2 'Partno = "0" + Partno 'End While owriter = File.CreateText(Global_md_ParamFileOutputPath & sFilename & ".123") End If gendok = colData(i) 'Dokumente nummerieren sDokumentNr = i.ToString.Trim While Len(sDokumentNr) < 3 sDokumentNr = "0" + sDokumentNr End While 'Partner Nummer auslesen Try snrpar00 = gendok.PartnerNr Catch ex As Exception m_log.Log("modMehrfachdruck:gen_txtfile:" + ex.Message + ex.StackTrace, Common.Common.JournalEntryType.Warning) End Try ''''NOVA! 'While Len(snrpar00) < 9 'snrpar00 = "0" + snrpar00 'End While Dim sDokumentID As String = gendok.DokumentId Select Case gendok.Typ Case clsMehrfachdruck_Data.Enum_Typ.EDOKA owriter.WriteLine(ParsParamDfg(Global_md_ParamCfgEdoka, snrpar00, gendok, sFilename, sDokumentNr)) Case clsMehrfachdruck_Data.Enum_Typ.HOST If Len(snrpar00) = 9 Then owriter.WriteLine(ParsParamDfg(Global_md_ParamCfgHost, snrpar00, gendok, sFilename, sDokumentNr)) Else owriter.WriteLine(ParsParamDfg(Global_md_ParamCfgAvaloq, snrpar00, gendok, sFilename, sDokumentNr)) End If Case clsMehrfachdruck_Data.Enum_Typ.ZV owriter.WriteLine(ParsParamDfg(Global_md_ParamCfgZv, snrpar00, gendok, sFilename, sDokumentNr)) End Select Next owriter.Close() Catch ex As Exception log.InsertJournale("EDKB07: Fehler bei der Erstellung des TXT-Files (Mehrfachdruck) " & CType(Now, String) & " Error: " & ex.Message & " DruckjobID: " & iJobID, clsLog.Enum_InfoTyp.Warnung) bError = True Finally Rename(Global_md_ParamFileOutputPath & sFilename & ".123", Global_md_ParamFileOutputPath & sFilename & ".txt") log = Nothing End Try End Sub Private Function ParsParamDfg(ByVal sOrgString As String, ByVal snrpar00 As String, ByVal gendok As clsMehrfachdruck_Data, ByVal sFilename As String, ByVal sDokumentNr As String) As String ParsParamDfg = "" 'Parsing Parameter '##PartnerNR## = Partner Nummer '##DokID## = Dokument ID '##DokTyp## = Dokumenttyp '##AuftragNr## = Auftrag-Nr '##Paginator## = Paginator '##FileName## = Dateiname Try 'Partner Nummer ParsParamDfg = sOrgString.Replace("##PartnerNR##", snrpar00) 'Dokument ID ParsParamDfg = ParsParamDfg.Replace("##DokID##", gendok.DokumentId) 'DokumentTyp If gendok.Typ = clsMehrfachdruck_Data.Enum_Typ.ZV Then ParsParamDfg = ParsParamDfg.Replace("##DokTyp##", gendok.DokumentTyp.Substring(0, 6)) Else ParsParamDfg = ParsParamDfg.Replace("##DokTyp##", gendok.DokumentTyp) End If 'AuftragsNr ParsParamDfg = ParsParamDfg.Replace("##AuftragNr##", gendok.Auftragnr) 'PaginatorNr ParsParamDfg = ParsParamDfg.Replace("##Paginator##", gendok.DokumentId) 'FileName ParsParamDfg = ParsParamDfg.Replace("##FileName##", sFilename + sDokumentNr) Catch ex As Exception m_log.Log("modMehrfachdruck:ParsParakDfg:" + ex.Message + ex.StackTrace, Common.Common.JournalEntryType.Warning) End Try End Function 'Private Sub send_cmdfile(ByVal userid As String, ByVal timestamp As String, ByVal partno As String, ByVal jobid As Integer, ByRef bError As Boolean) ' 'Erstellt das CMD-File mit den Übertragungs-Parameter und führt dieses aus. ' Dim log As New clsLog ' Try ' Dim owriter As System.IO.StreamWriter ' Dim scmd As String ' Dim i As Integer ' owriter = File.CreateText(Global_md_CMDFilePath & userid & partno & timestamp & ".cmd") ' 'Command 1 ' scmd = Global_md_CMDFile1Content.Replace("xfilenamex", userid & partno & timestamp & ".txt") ' scmd = scmd.Replace("xfilenameohneendungx", userid & partno & timestamp) ' owriter.WriteLine(scmd) ' 'Command 2 ' scmd = Global_md_CMDFile2Content.Replace("xfilenamex", userid & partno & timestamp & ".txt") ' scmd = scmd.Replace("xfilenameohneendungx", userid & partno & timestamp) ' owriter.WriteLine(scmd) ' owriter.Close() ' owriter = Nothing ' If Not Global_md_UseTestMode Then ' i = Shell(Global_md_CMDFilePath & userid & partno & timestamp & ".cmd", AppWinStyle.NormalFocus, True, 120000) ' Threading.Thread.Sleep(3000) ' log.InsertJournale("EDKB07: Parameterfile Mehrfachdruck per DTO an Cold übergeben " & CType(Now, String) & " DruckjobID: " & jobid, clsLog.Enum_InfoTyp.Keine) ' End If ' Catch ex As Exception ' log.InsertJournale("EDKB07: Fehler bei Übergabe des Parameterfiles Mehrfachdruck an Cold " & CType(Now, String) & " Error: " & ex.Message & " DruckjobID: " & jobid, clsLog.Enum_InfoTyp.Warnung) ' bError = True ' Finally ' log = Nothing ' End Try 'End Sub Private Function WaitForFile(ByVal userid As String, ByVal timestamp As String, ByVal partno As String, ByVal jobid As Integer, ByRef bError As Boolean) As Object WaitForFile = Nothing 'Wartet auf das PDF File Dim log As New clsLog If bError = True Then log.InsertJournale("EDKB07: Beim Anfordern ist ein Fehler aufgetreten " & CType(Now, String) + " DruckjobID: " & jobid, clsLog.Enum_InfoTyp.Keine) Exit Function End If Try Dim dStartZeit As DateTime Dim icnt As Integer = 1 dStartZeit = Now() Do While Microsoft.VisualBasic.DateDiff(DateInterval.Minute, dStartZeit, Now()) < Global_md_MaxWaitTime If File.Exists(Global_md_ParamFileOutputPath & userid & partno & timestamp & ".ret") Then If File.Exists(Global_md_ParamFileOutputPath & userid & partno & timestamp & ".pdf") Then Dim fs As New FileStream(Global_md_ColdMDOutputFolder + userid & partno & timestamp & ".pdf", FileMode.OpenOrCreate, FileAccess.Read) Threading.Thread.Sleep(1000) Dim MyData(fs.Length) As Byte fs.Read(MyData, 0, fs.Length) fs.Close() fs = Nothing WaitForFile = MyData Exit Do End If End If If File.Exists(Global_md_ParamFileOutputPath & userid & partno & timestamp & ".FAILED") Then log.InsertJournale("EDKB07: FAILED Rückmeldung: " & CType(Now, String) & " - Benutzer: " & userid & " DruckjobID: " & jobid, clsLog.Enum_InfoTyp.Warnung) Exit Do End If Threading.Thread.Sleep(1000) Loop Catch ex As Exception log.InsertJournale("EDKB07: Beim Warten auf das Cold-Mehrfachdokument " & CType(Now, String) & " Error: " & ex.Message & " DruckjobID: " & jobid, clsLog.Enum_InfoTyp.Warnung) bError = True Finally log = Nothing End Try End Function #End Region End Module