Generate a financial report in X++ and download it as a file.

 

Purpose

The purpose of this blog post is to demonstrate how can we generate a financial report in X++ and download it as a file.

Product

Dynamics 365 Finance.

Description

Please find the code snippet below which can be used to generate a financial report in X++. The code generates the report in XML format. The same code can be used to export the report in Excel and XPS file formats. Once generated the code allows the user to download the generated report.

public static void main(Args _args)
{
	financialReportVersion financialReportVersion;
	FinancialReports       financialReports;
	PeriodEnd              periodEndDate;
	str                    reportName;
	str                    fileContent;
	const str              fileName = 'FinancialReport.xml';

	reportName = "12 Month Rolling Single Column Income Statement - Default";
	periodEndDate = FiscalCalendarYear::findYearByCalendarDate(
		Ledger::fiscalCalendar(CompanyInfo::find().RecId), systemDateGet()).EndDate;
	
	select firstonly financialReportVersion
		order by recid desc
	join financialReports
		where financialReports.DesignId==financialReportVersion.DesignId
			&& financialReports.reportName == reportName;
	
	FinancialReportingIReportExport reportExporter = new FinancialReportingReportExport();
	System.Text.Encoding encodingGB18030 = System.Text.Encoding::GetEncoding("utf-8");
	
	if (!financialReports.DesignId)
	{
		throw error(strfmt("Design not found for Report %1", reportName));
	}
	
	System.IO.Stream stream = reportExporter.GenerateAndExportReport(
		financialReports.DesignId,
		curExt(),
		periodEndDate,
		FinancialReportingReportExportFormat::Xml,
		encodingGB18030);
	
	if (stream == null)
	{
		throw error(strfmt("Stream is empty for Report %1 period %2",
			reportName, periodEndDate));
	}
	
	System.IO.StreamReader sReader = new System.IO.StreamReader(stream);
	fileContent = sReader.ReadToEnd();
	File::SendStringAsFileToUser(fileContent, fileName);
}

Comments