From 717909d7e897428a82fe6e1843a20a25d51587ac Mon Sep 17 00:00:00 2001 From: pitzm Date: Thu, 5 Jun 2025 10:49:49 +0200 Subject: [PATCH] =?UTF-8?q?Modules.Jobs:=20MIME-Typen=20(pdf,=20xlsx,=20od?= =?UTF-8?q?t)=20-=20Fehlerhandling=20erg=C3=A4nzt,=20wenn=20Dateien=20nich?= =?UTF-8?q?t=20erstellt=20werden=20k=C3=B6nnen.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb | 56 ++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb b/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb index 2c55899b..162d99e4 100644 --- a/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb +++ b/Jobs/ZUGFeRD/ImportZUGFeRDFiles.vb @@ -28,6 +28,10 @@ Public Class ImportZUGFeRDFiles Private Const DIRECTORY_DONT_MOVE = "DIRECTORY_DONT_MOVE" + Private Const MIME_TYPE_PDF = "application/pdf" + Private Const MIME_TYPE_XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + Private Const MIME_TYPE_ODT = "application/vnd.oasis.opendocument.spreadsheet" + ' List of allowed extensions for PDF/A Attachments ' This list should not contain xml so the zugferd xml file will be filtered out Private ReadOnly AllowedExtensions As New List(Of String) From {"docx", "doc", "pdf", "xls", "xlsx", "ppt", "pptx", "txt"} @@ -41,14 +45,16 @@ Public Class ImportZUGFeRDFiles ' Allowed Values are: '- application/pdf '- application/vnd.openxmlformats-officedocument.spreadsheetml.sheet (xlsx) - '- application/vnd.oasis.opendocument.spreadsheet + '- application/vnd.oasis.opendocument.spreadsheet (odt) '- image/jpeg '- image/png '- image/tiff (UBL) '- text/csv '- text/xml (UBL) Private ReadOnly AllowedMimeTypesInEmbeddedFiles As List(Of String) = New List(Of String) From { - "application/pdf", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + MIME_TYPE_PDF, + MIME_TYPE_XLSX, + MIME_TYPE_ODT } Private ReadOnly _logger As Logger @@ -806,12 +812,16 @@ Public Class ImportZUGFeRDFiles pProcessFileResult.EmailAttachmentFiles.Add(New FileInfo(embeddedFilePath)) Else _logger.Error("Could not save File to Disk!") - Return False + Dim oReasonString = "Could not save file " + newAttachmentFilename + " to disk." + AddRejectedState(pMessageId, oReasonString, "EMBEDDED FILE CONSISTENCY NOT OK", "Info GUI", pConnections.SQLServerTransaction) + Continue For End If If TestFileOnDisk(embeddedFilePath, oMimeCodeString) = False Then _logger.Error("Could not save File to Disk!") - Return False + Dim oReasonString = "Validation of file " + newAttachmentFilename + " on disk was NOT succesfully." + AddRejectedState(pMessageId, oReasonString, "EMBEDDED FILE CONSISTENCY NOT OK", "Info GUI", pConnections.SQLServerTransaction) + Continue For End If If InsertAttachmentHistoryEntry(pMessageId, oOrgFilename, embeddedFilePath) = False Then @@ -832,7 +842,7 @@ Public Class ImportZUGFeRDFiles Private Function TestFileOnDisk(pEmbeddedFilePath As String, pMimeCodeString As String) As Boolean Try - If pMimeCodeString = "application/pdf" Then + If pMimeCodeString = MIME_TYPE_PDF Then Dim oGdPicturePDF As New GdPicturePDF Dim oStatus As GdPictureStatus = oGdPicturePDF.LoadFromFile(pEmbeddedFilePath, True) If oStatus <> GdPictureStatus.OK Then @@ -864,11 +874,11 @@ Public Class ImportZUGFeRDFiles End If Select Case pMimeTypeValue.ToLower() - Case "application/pdf" + Case MIME_TYPE_PDF Return "pdf" - Case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + Case MIME_TYPE_XLSX Return "xlsx" - Case "application/vnd.oasis.opendocument.spreadsheet" + Case MIME_TYPE_ODT Return "odt" Case "image/jpeg" Return "jpg" @@ -971,18 +981,20 @@ Public Class ImportZUGFeRDFiles ''' - ''' Speichere base64 als Datei auf der Platte ab + ''' Speichere base64 als Datei auf der Platte ab. ''' Private Function SaveBase64ToDisk(pExportFilePath As String, pBase64String As String) As Boolean Try - Dim base64BinaryDataString As String = pBase64String ' Hier Base64-String einfügen - Dim binaryDataString As Byte() = Convert.FromBase64String(base64BinaryDataString) Dim oFilename As String = pExportFilePath - ' Using verwenden, um blockieren des PDF zu verhindern - Using Stream As FileStream = New FileStream(oFilename, FileMode.Create) - Stream.Write(binaryDataString, 0, binaryDataString.Length) - Stream.Close() + Dim base64BinaryDataString As String = pBase64String + Dim binaryDataString As Byte() = Convert.FromBase64String(base64BinaryDataString) + + ' Using verwenden, um blockieren der Datei zu verhindern + Using fs = New FileStream(oFilename, FileMode.Create, FileAccess.ReadWrite) + fs.Write(binaryDataString, 0, binaryDataString.Length) + fs.Flush() + fs.Close() End Using Return True @@ -1174,6 +1186,15 @@ Public Class ImportZUGFeRDFiles _logger.Warn("Step [{0}] with SQL [{1}] was not successful.", oStep, oDelSQL) End Try + Try + oDelSQL = $"DELETE FROM TBEDMI_ITEM_FILES where REFERENCE_GUID = '{pMessageId}'" + oStep = "TBEDMI_ITEM_FILES Delete MessageID Items" + Dim retValue As Boolean = _mssql.ExecuteNonQueryWithConnectionObject(oDelSQL, pConnections.SQLServerConnection, MSSQLServer.TransactionMode.ExternalTransaction, pConnections.SQLServerTransaction) + Return retValue + Catch ex As Exception + _logger.Warn("Step [{0}] with SQL [{1}] was not successful.", oStep, oDelSQL) + End Try + Return False End Function @@ -1197,6 +1218,10 @@ Public Class ImportZUGFeRDFiles Return True End Function + ''' + ''' Fügt neue Datensätze in Tabelle TBEMLP_HISTORY_STATE ein, + ''' per Prozedur DD_ECM.[dbo].[PRCUST_ADD_HISTORY_STATE] + ''' Private Sub AddRejectedState(pMessageID As String, pTitle As String, pTitle1 As String, pComment As String, pTransaction As SqlTransaction) Try 'PRCUST_ADD_HISTORY_STATE: @MessageID VARCHAR(250), @TITLE1 VARCHAR(250), @TITLE2 VARCHAR(250) @@ -1206,4 +1231,5 @@ Public Class ImportZUGFeRDFiles _logger.Error(ex) End Try End Sub + End Class