Adjustment of attachment file names after validation
Overview
This guide shows how developers can customize the file names of attachments in DEXPRO SQUEEZE. The OnBeforeAddLineToDocumentJObj event is executed after the plausibility check, ensuring that all document data is fully validated and available.
Available Event
OnBeforeAddLineToDocumentJObj
For invoices/credit notes: Codeunit 70954657 "DXP SQZ P. Inv/Crdt Memo Impl."
For orderconfirmations: Codeunit 70954658 "DXP SQZ P. Order Conf. Impl."
When accessed: After header processing, before line processing, after plausibility check
Implementation examples
Example 1: Simple vendor prefix for invoices/credit notes
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;
}
Example 2: Order confirmations - vendor prefix
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;
}
Example 3: Both document types - Different prefixes for source files
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;
}
Practical information
Available data at the time of the event:
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
Example results:
- Original:
"Rechnung_2024_001.pdf" - Mit Kreditorenprefix:
"VEND001_Rechnung_2024_001.pdf" - Quelldatei:
"ORIGINAL_VEND001_Rechnung_2024_001.pdf"
Best Practices:
- Duplicate check: Always check whether prefix already exists
- Length validation: New file names may have a maximum of 1024 characters.
No Comments