You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

230 lines
10 KiB

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