I hope the picture appears now.
public System.Byte[] saveCustInvoiceAsPDF(CustInvoiceJour _custInvoiceJour, FileName _fileName)
{
#ISOCountryRegionCodes
Args args = new Args();
SalesInvoiceController controller = SalesInvoiceController::construct();
SalesInvoiceContract contract;
ReportName reportName = PrintMgmtDocType::construct(PrintMgmtDocumentType::SalesOrderInvoice).getDefaultReportFormat();
System.Byte[] reportBytes = new System.Byte[0]();
SRSPrintDestinationSettings settings;
SRSProxy srsProxy;
SRSReportRunService srsReportRunService = new SrsReportRunService();
Microsoft.Dynamics.AX.Framework.Reporting.Shared.ReportingService.ParameterValue[] parameterValueArray;
Map reportParametersMap;
SRSReportExecutionInfo executionInfo = new SRSReportExecutionInfo();
args.record(_custInvoiceJour);
args.parmEnumType(enumNum(PrintCopyOriginal));
args.parmEnum(PrintCopyOriginal::Original);
// Provide details to controller and add contract
controller.parmReportName(reportName);
controller.parmShowDialog(false);
controller.parmLoadFromSysLastValue(false);
controller.parmExecutionMode(SysOperationExecutionMode::Synchronous);
controller.parmArgs(args);
contract = controller.parmReportContract().parmRdpContract() as SalesInvoiceContract;
contract.parmRecordId(_custInvoiceJour.RecId);
contract.parmCountryRegionISOCode(SysCountryRegionCode::countryInfo());
contract.parmPrintCopyOriginal(PrintCopyOriginal::Original);
// Provide printer settings
settings = controller.parmReportContract().parmPrintSettings();
settings.printMediumType(SRSPrintMediumType::File);
//Change file extension or add a new parameter to function
settings.fileName(_fileName);
settings.fileFormat(SRSReportFileFormat::PDF);
// Below is a part of code responsible for rendering the report
controller.parmReportContract().parmReportServerConfig(SRSConfiguration::getDefaultServerConfiguration());
controller.parmReportContract().parmReportExecutionInfo(executionInfo);
srsReportRunService.getReportDataContract(controller.parmreportcontract().parmReportName());
//srsReportRunService.DAX_ParmSuppressRdpExecutionFlagSet(true);
srsReportRunService.preRunReport(controller.parmreportcontract());
reportParametersMap = srsReportRunService.createParamMapFromContract(controller.parmReportContract());
parameterValueArray = SrsReportRunUtil::getParameterValueArray(reportParametersMap);
srsProxy = SRSProxy::constructWithConfiguration(controller.parmReportContract().parmReportServerConfig());
// Actual rendering to byte array
reportBytes = srsproxy.renderReportToByteArray(controller.parmreportcontract().parmreportpath(),
parameterValueArray,
settings.fileFormat(),
settings.deviceinfo());
return reportBytes;
}