- 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:
2026-08-20 12:34:58 +02:00
parent 5b0807d4b5
commit c129b35862
5 changed files with 50 additions and 11 deletions

View File

@@ -1,6 +1,8 @@
Imports System.Collections.Generic
Imports System.Globalization
Imports System.IO
Imports System.Linq
Imports System.Text
Imports DigitalData.Modules.Base
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Interfaces
@@ -91,7 +93,8 @@ Namespace ZUGFeRD
' Write Embedded Files to disk
For Each oResult In pEmbeddedAttachments
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)
If Not File.Exists(oAttachmentDirectory) Then
@@ -208,6 +211,7 @@ Namespace ZUGFeRD
Return False ' Andere Fehler
End Try
End Function
Public Function GetEmailPathWithSubjectAsName(RejectedEmailDirectory As String, UncleanedSubject As String) As String
Dim oCleanSubject = String.Join("", UncleanedSubject.Split(Path.GetInvalidPathChars()))
Dim oAttachmentDirectory = RejectedEmailDirectory
@@ -218,6 +222,41 @@ Namespace ZUGFeRD
Return oAttachmentPath
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 Namespace