Business Central Cloud renaming a PDF report using FileManagement.BLOBExport
Business Central Cloud renaming a PDF report using FileManagement.BLOBExport
On the Business Central Cloud, to save a report in PDF format and change its name while saving, you can use a STREAM BLOB through the “Temp blob” codeunit.
Once this is done, use the function then the BLOBExport function present in the “File Management” codeunit to export the report created with the “REPORT.SAVEAS” command, changing its name during saving.
Example:

Code
pageextension 50001 SalesInvoiceext extends "Sales Invoice"
{
layout
{
}
actions
{
addafter("Test Report")
{
action("Download PDF Report")
{
ApplicationArea = All;
Image = ExportFile;
trigger OnAction()
var
TempBlob_lRec: Codeunit "Temp Blob";
Out: OutStream;
RecRef: RecordRef;
FileManagement_lCdu: Codeunit "File Management";
SalesHeader_lRec: Record "Sales Header";
begin
TempBlob_lRec.CreateOutStream(Out, TEXTENCODING::UTF8); // Create Outstream
// Record filter
SalesHeader_lRec.Reset;
SalesHeader_lRec.Setrange(“Document Type”, “Document Type”::Order);
SalesHeader_lRec.SetRange("No.", Rec."No.");
SalesHeader_lRec.FindFirst();
RecRef.GetTable(SalesHeader_lRec);
// REPORT “SAVEAS” and BLOBExport
REPORT.SAVEAS(5001, '', REPORTFORMAT::Pdf, Out, RecRef); // save report in TempBlob di recRef
FileManagement_lCdu.BLOBExport(TempBlob_lRec, STRSUBSTNO('Proforma_%1.Pdf', "No."), TRUE); // export report in PDF format
end;
}
}
}
}
Link
https://github.com/rstefanetti/AL-Code-Samples-Education/tree/AL-FileManagementBLOBExport_Demo
Hi Roberto, thank you for your article, it is very useful!
We have to do the same but downloading more than one report (in our case we have invoices).
We are doing the same as you in a proccesing only report, we write your code in the OnAfterGetRecord trigger in “Sales Invoice Header” dataitem. In the request page we set an interval of Document No. (f.e: 7033..7035) and when we do the process we only received the last document in the interval (7035).
Could you help us?, Do you know what we could do to receive a pdf of each document?
Thank you for your time.
Alba Rey
Hi Roberto,
Thank you for this. I had a similar request from a client. From BC21 there is a event subscriber that allows you to change the Filename from base app Report Selection per report.
In Code unit “Custom Layout Reporting” we can use the eventsubscriber “OnGenerateFileNameOnAfterAssignFileName” to change the File name. The Code will look something like this. In my case I wanted to change the customer Statement File Name.
[EventSubscriber(ObjectType::Codeunit, Codeunit::”Custom Layout Reporting”, ‘OnGenerateFileNameOnAfterAssignFileName’, ”, true, true)]
local procedure OnGenerateFileNameOnAfterAssignFileName(var FileName: Text; ReportID: Integer; Extension: Text; DataRecRef: RecordRef)
var
Customer: Record Customer;
FileNameDate: Text[20];
dotpdfPos: Integer;
PreFileNameLbl: Label ‘Statement for %1 %2 %3’;
Pos: Integer;
LengthText: Integer;
begin
if ReportID = 1316 then begin
Customer.Get(DataRecRef.RecordId);
Pos := Text.StrPos(FileName, ‘as’);
dotpdfPos := Text.StrPos(FileName, ‘.pdf’);
FileNameDate := Text.CopyStr(FileName, Pos, dotpdfPos);
FileName := StrSubstNo(PreFileNameLbl, Customer.”No.”, Customer.Name, FileNameDate);
end;
end;
This Returns a Filename “Statement for as of .”