- Modules.Jobs: Version 3.8.1.0
- WITH (NOLOCK) in allen Abfragen ergänzt - Deteinamen der PDF-Attachments enthalten nur noch ASCII-Zeichen
This commit is contained in:
@@ -13,7 +13,7 @@ Imports System.Runtime.InteropServices
|
|||||||
<Assembly: AssemblyCompany("Digital Data")>
|
<Assembly: AssemblyCompany("Digital Data")>
|
||||||
<Assembly: AssemblyProduct("Modules.Jobs")>
|
<Assembly: AssemblyProduct("Modules.Jobs")>
|
||||||
<Assembly: AssemblyCopyright("Copyright © 2026")>
|
<Assembly: AssemblyCopyright("Copyright © 2026")>
|
||||||
<Assembly: AssemblyTrademark("3.8.0")>
|
<Assembly: AssemblyTrademark("3.8.1.0")>
|
||||||
|
|
||||||
<Assembly: ComVisible(False)>
|
<Assembly: ComVisible(False)>
|
||||||
|
|
||||||
@@ -30,5 +30,5 @@ Imports System.Runtime.InteropServices
|
|||||||
' Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
' Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||||
' übernehmen, indem Sie "*" eingeben:
|
' übernehmen, indem Sie "*" eingeben:
|
||||||
|
|
||||||
<Assembly: AssemblyVersion("3.8.0.0")>
|
<Assembly: AssemblyVersion("3.8.1.0")>
|
||||||
<Assembly: AssemblyFileVersion("3.8.0.0")>
|
<Assembly: AssemblyFileVersion("3.8.1.0")>
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ Namespace ZUGFeRD
|
|||||||
Dim intCode As Integer = DirectCast(pErrorCode, Integer)
|
Dim intCode As Integer = DirectCast(pErrorCode, Integer)
|
||||||
oErrorCode = $"{EmailStrings.ErrorCodePraefix}{intCode}"
|
oErrorCode = $"{EmailStrings.ErrorCodePraefix}{intCode}"
|
||||||
|
|
||||||
Dim oSQL = $"SELECT COUNT(*) FROM TBDD_GUI_LANGUAGE_PHRASE WHERE TITLE = '{oErrorCode}'"
|
Dim oSQL = $"SELECT COUNT(*) FROM TBDD_GUI_LANGUAGE_PHRASE WITH (NOLOCK) WHERE TITLE = '{oErrorCode}'"
|
||||||
If _mssql.GetScalarValue(oSQL) > 0 Then
|
If _mssql.GetScalarValue(oSQL) > 0 Then
|
||||||
useLegacyMethod = False
|
useLegacyMethod = False
|
||||||
Else
|
Else
|
||||||
@@ -59,7 +59,7 @@ Namespace ZUGFeRD
|
|||||||
' Gibt es das Template in TBDD_EMAIL_TEMPLATE?
|
' Gibt es das Template in TBDD_EMAIL_TEMPLATE?
|
||||||
If useLegacyMethod = False AndAlso pTemplateId > 0 Then
|
If useLegacyMethod = False AndAlso pTemplateId > 0 Then
|
||||||
Try
|
Try
|
||||||
Dim oSQL = $"SELECT COUNT(*) FROM TBDD_EMAIL_TEMPLATE WHERE GUID = {pTemplateId}"
|
Dim oSQL = $"SELECT COUNT(*) FROM TBDD_EMAIL_TEMPLATE WITH (NOLOCK) WHERE GUID = {pTemplateId}"
|
||||||
If _mssql.GetScalarValue(oSQL) <= 0 Then
|
If _mssql.GetScalarValue(oSQL) <= 0 Then
|
||||||
_logger.Warn($"EMAIL_TEMPLATE [{pTemplateId}] not found in TBDD_EMAIL_TEMPLATE!")
|
_logger.Warn($"EMAIL_TEMPLATE [{pTemplateId}] not found in TBDD_EMAIL_TEMPLATE!")
|
||||||
useLegacyMethod = True
|
useLegacyMethod = True
|
||||||
@@ -185,7 +185,7 @@ Namespace ZUGFeRD
|
|||||||
_logger.Debug("To: {0}", oEmailTo)
|
_logger.Debug("To: {0}", oEmailTo)
|
||||||
_logger.Debug("Subject: {0}", oSubject)
|
_logger.Debug("Subject: {0}", oSubject)
|
||||||
_logger.Debug("Body {0}", oFinalBodyText)
|
_logger.Debug("Body {0}", oFinalBodyText)
|
||||||
Dim osql = $"Select MAX(GUID) FROM TBEMLP_HISTORY WHERE EMAIL_MSGID = '{MessageId}'"
|
Dim osql = $"Select MAX(GUID) FROM TBEMLP_HISTORY WITH (NOLOCK) WHERE EMAIL_MSGID = '{MessageId}'"
|
||||||
Dim oHistoryID = _mssql.GetScalarValue(osql)
|
Dim oHistoryID = _mssql.GetScalarValue(osql)
|
||||||
|
|
||||||
If IsNumeric(oHistoryID) Then
|
If IsNumeric(oHistoryID) Then
|
||||||
@@ -223,7 +223,7 @@ Namespace ZUGFeRD
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Function GetEmailDataForMessageId(MessageId As String) As EmailData
|
Public Function GetEmailDataForMessageId(MessageId As String) As EmailData
|
||||||
Dim oSQL = $"SELECT EMAIL_FROM, EMAIL_SUBJECT FROM TBEMLP_HISTORY WHERE EMAIL_MSGID = '{MessageId}'"
|
Dim oSQL = $"SELECT EMAIL_FROM, EMAIL_SUBJECT FROM TBEMLP_HISTORY WITH (NOLOCK) WHERE EMAIL_MSGID = '{MessageId}'"
|
||||||
Try
|
Try
|
||||||
Dim oDatatable = _mssql.GetDatatable(oSQL)
|
Dim oDatatable = _mssql.GetDatatable(oSQL)
|
||||||
Dim oRow As DataRow
|
Dim oRow As DataRow
|
||||||
|
|||||||
@@ -10,5 +10,5 @@
|
|||||||
FileSizeLimitReachedException = 20008
|
FileSizeLimitReachedException = 20008
|
||||||
OutOfMemoryException = 20009
|
OutOfMemoryException = 20009
|
||||||
UnhandledException = 20010
|
UnhandledException = 20010
|
||||||
FileMoveException = 200011
|
FileMoveException = 20011
|
||||||
End Enum
|
End Enum
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
Imports System.Collections.Generic
|
Imports System.Collections.Generic
|
||||||
|
Imports System.Globalization
|
||||||
Imports System.IO
|
Imports System.IO
|
||||||
Imports System.Linq
|
Imports System.Linq
|
||||||
|
Imports System.Text
|
||||||
Imports DigitalData.Modules.Base
|
Imports DigitalData.Modules.Base
|
||||||
Imports DigitalData.Modules.Database
|
Imports DigitalData.Modules.Database
|
||||||
Imports DigitalData.Modules.Interfaces
|
Imports DigitalData.Modules.Interfaces
|
||||||
@@ -91,7 +93,8 @@ Namespace ZUGFeRD
|
|||||||
' Write Embedded Files to disk
|
' Write Embedded Files to disk
|
||||||
For Each oResult In pEmbeddedAttachments
|
For Each oResult In pEmbeddedAttachments
|
||||||
Try
|
Try
|
||||||
Dim oFileName As String = $"{pMessageId}~{oResult.FileName}"
|
Dim oCleanedFilename As String = BereinigeDateinamenAscii(oResult.FileName)
|
||||||
|
Dim oFileName As String = $"{pMessageId}~{oCleanedFilename}"
|
||||||
Dim oFilePath As String = Path.Combine(oAttachmentDirectory, oFileName)
|
Dim oFilePath As String = Path.Combine(oAttachmentDirectory, oFileName)
|
||||||
|
|
||||||
If Not File.Exists(oAttachmentDirectory) Then
|
If Not File.Exists(oAttachmentDirectory) Then
|
||||||
@@ -208,6 +211,7 @@ Namespace ZUGFeRD
|
|||||||
Return False ' Andere Fehler
|
Return False ' Andere Fehler
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function GetEmailPathWithSubjectAsName(RejectedEmailDirectory As String, UncleanedSubject As String) As String
|
Public Function GetEmailPathWithSubjectAsName(RejectedEmailDirectory As String, UncleanedSubject As String) As String
|
||||||
Dim oCleanSubject = String.Join("", UncleanedSubject.Split(Path.GetInvalidPathChars()))
|
Dim oCleanSubject = String.Join("", UncleanedSubject.Split(Path.GetInvalidPathChars()))
|
||||||
Dim oAttachmentDirectory = RejectedEmailDirectory
|
Dim oAttachmentDirectory = RejectedEmailDirectory
|
||||||
@@ -218,6 +222,41 @@ Namespace ZUGFeRD
|
|||||||
|
|
||||||
Return oAttachmentPath
|
Return oAttachmentPath
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
''' <summary>
|
||||||
|
''' 20.8.2026 - In den Dateinamen der Anhänge in einem PDF können Unicode-Zeichen vorkommen
|
||||||
|
''' die später nicht mehr verarbeitet werden können. sie werden hier rausgefiltert
|
||||||
|
''' </summary>
|
||||||
|
''' <param name="pFilename"></param>
|
||||||
|
''' <returns></returns>
|
||||||
|
Function BereinigeDateinamenAscii(pFilename As String) As String
|
||||||
|
If pFilename.IsNullOrEmpty() Then
|
||||||
|
Return String.Empty
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Restliche Diakritika entfernen (é, à, ñ, etc.)
|
||||||
|
Dim normalisiert As String = pFilename.Normalize(NormalizationForm.FormD)
|
||||||
|
Dim sb As New StringBuilder()
|
||||||
|
|
||||||
|
For Each c As Char In normalisiert
|
||||||
|
If CharUnicodeInfo.GetUnicodeCategory(c) = UnicodeCategory.NonSpacingMark Then
|
||||||
|
Continue For
|
||||||
|
End If
|
||||||
|
|
||||||
|
Dim code As Integer = AscW(c)
|
||||||
|
|
||||||
|
If code >= 32 AndAlso code <= 126 Then
|
||||||
|
If "\/:*?""<>|".Contains(c) Then
|
||||||
|
sb.Append("_")
|
||||||
|
Else
|
||||||
|
sb.Append(c)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
' Alles andere (z.B. 你好) wird komplett verworfen
|
||||||
|
Next
|
||||||
|
|
||||||
|
Return sb.ToString()
|
||||||
|
End Function
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
End Namespace
|
End Namespace
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ Public Class HashFunctions
|
|||||||
End If
|
End If
|
||||||
|
|
||||||
' Check if Checksum exists in History Table
|
' Check if Checksum exists in History Table
|
||||||
Dim oCheckCommand = $"SELECT * FROM TBEMLP_HISTORY WHERE GUID = (SELECT MAX(GUID) FROM TBEMLP_HISTORY WHERE UPPER(MD5HASH) = UPPER('{oMD5CheckSum}'))"
|
Dim oCheckCommand = $"SELECT * FROM TBEMLP_HISTORY WITH (NOLOCK) WHERE GUID = (SELECT MAX(GUID) FROM TBEMLP_HISTORY WITH (NOLOCK) WHERE UPPER(MD5HASH) = UPPER('{oMD5CheckSum}'))"
|
||||||
Dim oTable As DataTable = Database.GetDatatable(oCheckCommand, MSSQLServer.TransactionMode.NoTransaction)
|
Dim oTable As DataTable = Database.GetDatatable(oCheckCommand, MSSQLServer.TransactionMode.NoTransaction)
|
||||||
|
|
||||||
' If History entries could not be fetched, just return the MD5 Checksum
|
' If History entries could not be fetched, just return the MD5 Checksum
|
||||||
@@ -94,7 +94,7 @@ Public Class HashFunctions
|
|||||||
Public Function GetOriginalFilename(pFilename As String) As String
|
Public Function GetOriginalFilename(pFilename As String) As String
|
||||||
' Try to get the original filename from Attachment table
|
' Try to get the original filename from Attachment table
|
||||||
' If this fails, falls back to the new filename (<msgid>~Attm<i>.ext)
|
' If this fails, falls back to the new filename (<msgid>~Attm<i>.ext)
|
||||||
Dim oSQL = $"SELECT EMAIL_ATTMT FROM TBEMLP_HISTORY_ATTACHMENT WHERE EMAIL_ATTMT_INDEX = '{pFilename}'"
|
Dim oSQL = $"SELECT EMAIL_ATTMT FROM TBEMLP_HISTORY_ATTACHMENT WITH (NOLOCK) WHERE EMAIL_ATTMT_INDEX = '{pFilename}'"
|
||||||
Dim oEmailAttachment = Database.GetScalarValue(oSQL, MSSQLServer.TransactionMode.NoTransaction)
|
Dim oEmailAttachment = Database.GetScalarValue(oSQL, MSSQLServer.TransactionMode.NoTransaction)
|
||||||
Dim oOriginalName = ObjectEx.NotNull(oEmailAttachment, pFilename)
|
Dim oOriginalName = ObjectEx.NotNull(oEmailAttachment, pFilename)
|
||||||
Return oOriginalName
|
Return oOriginalName
|
||||||
|
|||||||
Reference in New Issue
Block a user