Anpassung der Dateinamen von Anhängen nach der Validierung
Anpassung der Dateinamen von Anhängen nachin derDEXPRO ValidierungSQUEEZE
Überblick
Diese Anleitung zeigt, wie Entwickler die Dateinamen von Anhängen in DEXPRO SQUEEZE anpassen können. Das Event OnBeforeAddLineToDocumentJObj wird nach der Plausibilitätsprüfung ausgeführt, sodass alle Dokumentdaten (Kopf)Belegdaten vollständig validiert und verfügbar sind.
Verfügbares Event
OnBeforeAddLineToDocumentJObj
Für Rechnungen/Gutschriften: Codeunit 70954657 "DXP SQZ P. Inv/Crdt Memo Impl."
Für Bestellbestätigungen: Codeunit 70954658 "DXP SQZ P. Order Conf. Impl."
Wann aufgerufen: Nach Header-Verarbeitung, vor Zeilen-Verarbeitung, nach Plausibilitätsprüfung
Warum dieses Event?
✅ Alle Daten verfügbar: Kreditorennummer, Belegdatum, etc. sind validiert
✅ Nach Plausibilitätsprüfung: Datenqualität ist sichergestellt
✅ Optimaler Zeitpunkt: Header fertig verarbeitet, Anhänge verfügbar
Implementierungsbeispiele
Beispiel 1: Einfacher Kreditorenprefix für Rechnungen/Gutschriften
xxxxxxxxxxcodeunit
50100 "Custom Invoice Filename"{ [EventSubscriber(ObjectType::Codeunit, Codeunit::"DXP SQZ P. Inv/Crdt Memo Impl.", 'OnBeforeAddLineToDocumentJObj', '', false, false)] local procedure OnBeforeAddLineToDocumentJObjInvoice(var DocumentJObj: JsonObject; DocHeader: Record "DXP SQZ Document Header") begin CustomizeAttachmentFilenames(DocHeader); end; local procedure CustomizeAttachmentFilenames(DocHeader: Record "DXP SQZ Document Header") var DocumentAttachment: Record "DXP Document Attachment"; VendorPrefix: Text; NewFileName: Text[1024]; begin // Beenden, wenn keine Kreditorinformationen vorhanden if DocHeader."Buy-from Vendor No." = '' then exit; // Kreditorenprefix erstellen VendorPrefix := DocHeader."Buy-from Vendor No." + '_'; // Alle Anhänge für dieses Dokument bearbeiten DocumentAttachment.Reset(); DocumentAttachment.SetRange("Document No.", DocHeader."Core Document No."); if DocumentAttachment.FindSet(true) then repeat // Überspringen, wenn Prefix bereits vorhanden if StrPos(DocumentAttachment."File Name", VendorPrefix) <> 1 then begin // Neuen Dateinamen mit Prefix erstellen NewFileName := VendorPrefix + DocumentAttachment."File Name"; // Aktualisieren, wenn es passt if StrLen(NewFileName) <= MaxStrLen(DocumentAttachment."File Name") then begin DocumentAttachment."File Name" := CopyStr(NewFileName, 1, MaxStrLen(DocumentAttachment."File Name")); DocumentAttachment.Modify(true); end; end; until DocumentAttachment.Next() = 0; end;}Beispiel 2: Bestellbestätigungen - Kreditorenprefix
xxxxxxxxxxcodeunit
50101 "Custom Order Conf Filename"{ [EventSubscriber(ObjectType::Codeunit, Codeunit::"DXP SQZ P. Order Conf. Impl.", 'OnBeforeAddLineToDocumentJObj', '', false, false)] local procedure OnBeforeAddLineToDocumentJObjOrderConf(var DocumentJObj: JsonObject; DocHeader: Record "DXP SQZ Document Header") begin CustomizeAttachmentFilenames(DocHeader); end; local procedure CustomizeAttachmentFilenames(DocHeader: Record "DXP SQZ Document Header") var DocumentAttachment: Record "DXP Document Attachment"; VendorPrefix: Text; NewFileName: Text[1024]; begin // Beenden, wenn keine Kreditorinformationen vorhanden if DocHeader."Buy-from Vendor No." = '' then exit; // Kreditorenprefix erstellen VendorPrefix := DocHeader."Buy-from Vendor No." + '_'; // Alle Anhänge für dieses Dokument bearbeiten DocumentAttachment.Reset(); DocumentAttachment.SetRange("Document No.", DocHeader."Core Document No."); if DocumentAttachment.FindSet(true) then repeat // Überspringen, wenn Prefix bereits vorhanden if StrPos(DocumentAttachment."File Name", VendorPrefix) <> 1 then begin // Neuen Dateinamen mit Prefix erstellen NewFileName := VendorPrefix + DocumentAttachment."File Name"; // Aktualisieren, wenn es passt if StrLen(NewFileName) <= MaxStrLen(DocumentAttachment."File Name") then begin DocumentAttachment."File Name" := CopyStr(NewFileName, 1, MaxStrLen(DocumentAttachment."File Name")); DocumentAttachment.Modify(true); end; end; until DocumentAttachment.Next() = 0; end;}Beispiel 3: Beide Dokumenttypen - Verschiedene Prefixe für Quelldateien
xxxxxxxxxx{ [EventSubscriber(ObjectType::Codeunit, Codeunit::"DXP SQZ P. Inv/Crdt Memo Impl.", 'OnBeforeAddLineToDocumentJObj', '', false, false)] local procedure OnBeforeAddLineToDocumentJObjInvoice(var DocumentJObj: JsonObject; DocHeader: Record "DXP SQZ Document Header") begin CustomizeFilenamesWithSourceHandling(DocHeader); end; [EventSubscriber(ObjectType::Codeunit, Codeunit::"DXP SQZ P. Order Conf. Impl.", 'OnBeforeAddLineToDocumentJObj', '', false, false)] local procedure OnBeforeAddLineToDocumentJObjOrderConf(var DocumentJObj: JsonObject; DocHeader: Record "DXP SQZ Document Header") begin CustomizeFilenamesWithSourceHandling(DocHeader); end; local procedure CustomizeFilenamesWithSourceHandling(DocHeader: Record "DXP SQZ Document Header") var DocumentAttachment: Record "DXP Document Attachment"; VendorPrefix: Text; SourcePrefix: Text; NewFileName: Text[1024]; PrefixToUse: Text; begin // Beenden, wenn keine Kreditorinformationen vorhanden if DocHeader."Buy-from Vendor No." = '' then exit; // Prefixe erstellen VendorPrefix := DocHeader."Buy-from Vendor No." + '_'; SourcePrefix := 'ORIGINAL_' + DocHeader."Buy-from Vendor No." + '_'; // Alle Anhänge bearbeiten DocumentAttachment.Reset(); DocumentAttachment.SetRange("Document No.", DocHeader."Core Document No."); if DocumentAttachment.FindSet(true) then repeat // Prefix je nach Dateityp wählen if DocumentAttachment."Is Source File" then PrefixToUse := SourcePrefix else PrefixToUse := VendorPrefix; // Überspringen, wenn Prefix bereits vorhanden if StrPos(DocumentAttachment."File Name", PrefixToUse) <> 1 then begin NewFileName := PrefixToUse + DocumentAttachment."File Name"; if StrLen(NewFileName) <= MaxStrLen(DocumentAttachment."File Name") then begin DocumentAttachment."File Name" := CopyStr(NewFileName, 1, MaxStrLen(DocumentAttachment."File Name")); DocumentAttachment.Modify(true); end; end; until DocumentAttachment.Next() = 0; end;}Verfügbare Daten zur Event-Zeit:
DocHeader."Buy-from Vendor No."- Kreditorennummer (validiert)DocHeader."Document Date"-DokumentdatumBelegdatumDocHeader."Document Reference"-DokumentreferenzBelegnummerDocHeader."Core Document No."- Verknüpfung zu Anhängen- Alle anderen
DokumentfelderBelegfelder sind verfügbar
Beispielresultate:
- Original:
"Rechnung_2024_001.pdf" - Mit Kreditorenprefix:
"VEND001_Rechnung_2024_001.pdf" - Quelldatei:
"ORIGINAL_VEND001_Rechnung_2024_001.pdf"
Best Practices:
- Duplikatprüfung: Immer prüfen, ob Prefix bereits vorhanden
- Längenvalidierung: Neue Dateinamen dürfen max. 1024 Zeichen
habehaben