Anpassung der Dateinamen von Anhängen nach der Validierung
Ü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 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
Implementierungsbeispiele
Beispiel 1: Einfacher Kreditorenprefix für Rechnungen/Gutschriften
codeunit 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 not DocumentAttachment."File Name".Contains(VendorPrefix) then begin
// Neuen Dateinamen mit Prefix erstellen
NewFileName := VendorPrefix + DocumentAttachment."File Name";
// Aktualisieren
DocumentAttachment."File Name" := CopyStr(NewFileName, 1, MaxStrLen(DocumentAttachment."File Name"));
DocumentAttachment.Modify(true);
end;
until DocumentAttachment.Next() = 0;
end;
}
Beispiel 2: Bestellbestätigungen - Kreditorenprefix
codeunit 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 not DocumentAttachment."File Name".Contains(VendorPrefix) then begin
// Neuen Dateinamen mit Prefix erstellen
NewFileName := VendorPrefix + DocumentAttachment."File Name";
// Aktualisieren
DocumentAttachment."File Name" := CopyStr(NewFileName, 1, MaxStrLen(DocumentAttachment."File Name"));
DocumentAttachment.Modify(true);
end;
until DocumentAttachment.Next() = 0;
end;
}
Beispiel 3: Beide Dokumenttypen - Verschiedene Prefixe für Quelldateien
codeunit 50102 "Advanced Filename Handling"
{
[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 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 not DocumentAttachment."File Name".Contains(VendorPrefix) then begin
// Neuen Dateinamen mit Prefix erstellen
NewFileName := VendorPrefix + DocumentAttachment."File Name";
// Aktualisieren
DocumentAttachment."File Name" := CopyStr(NewFileName, 1, MaxStrLen(DocumentAttachment."File Name"));
DocumentAttachment.Modify(true);
end;
until DocumentAttachment.Next() = 0;
end;
}
Praktische Hinweise
Verfügbare Daten zur Event-Zeit:
DocHeader."Buy-from Vendor No."
- Kreditorennummer (validiert)DocHeader."Document Date"
- BelegdatumDocHeader."Document Reference"
- BelegnummerDocHeader."Core Document No."
- Verknüpfung zu Anhängen- Alle anderen Belegfelder 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 haben
No Comments