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.
228 lines
10 KiB
228 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
|