class NW_EmailAssetTransferRequestController extends SrsReportRunController { public static void main(args _args) { NW_EmailAssetTransferRequestContract contract = new NW_EmailAssetTransferRequestContract(); SRSPrintDestinationSettings settings; SrsReportEMailDataContract emailContract; AssetTransferRequest _AssetTransferRequest; System.IO.MemoryStream _stream; SysMailerMessageBuilder mailer = new SysMailerMessageBuilder(); SysMailerSMTP smtp = new SysMailerSMTP(); Filename fileName; Array arrayFiles; System.Byte[] reportBytes = new System.Byte[0](); SRSProxy srsProxy; SRSReportRunService srsReportRunService = new SrsReportRunService(); Microsoft.Dynamics.AX.Framework.Reporting.Shared.ReportingService.ParameterValue[] parameterValueArray; Map reportParametersMap; SRSReportExecutionInfo executionInfo = new SRSReportExecutionInfo(); NW_EmailAssetTransferRequestController controller = new NW_EmailAssetTransferRequestController(); _AssetTransferRequest = _args.record(); fileName = 'Asset Transfer.PDF'; contract.parmRequestId(_AssetTransferRequest.RequestId); // Provide details to controller and add contract controller.parmArgs(_args); controller.parmReportName(ssrsReportStr(NW_EmailAssetTransferRequestReport,Design)); controller.parmShowDialog(false); controller.parmLoadFromSysLastValue(false); controller.parmReportContract().parmRdpContract(contract); // Provide printer settings settings = controller.parmReportContract().parmPrintSettings(); settings.printMediumType(SRSPrintMediumType::File); 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.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()); if (reportBytes) { // Converting byte array to memory stream System.IO.MemoryStream stream = new System.IO.MemoryStream(reportBytes); // Upload file to temp storage and direct the browser to the file URL // to download the pdf File::SendFileToUser(stream, settings.parmFileName()); stream.Position = 0; str fileContentType = System.Web.MimeMapping::GetMimeMapping(fileName); _stream = stream; } // UserInfo _UserInfo; // select _UserInfo where _UserInfo.id == HcmWorker::find( _AssetTransferRequest.Employee); str ToEmail = HcmWorker::find( _AssetTransferRequest.Employee).email(); // _UserInfo.networkAlias; mailer.setSubject(" AssetTransfer Request Report"); mailer.setFrom("hub@sanabil.com"); mailer.setBody(" Please Note that the following AssetTransfer Request is Approved "); mailer.addTo(ToEmail); if (_AssetTransferRequest.AssetTypes == AssetTypes::OffBoarding && _AssetTransferRequest.Release==NoYes::Yes) { // mailer.addTo(""); } mailer.addAttachment(_stream, strFmt('%1%2','AssetTransferRequest Report', '.PDF')); // send email part try { smtp.sendNonInteractive(mailer.getMessage()); info('Email sent successfully to '+ToEmail); } catch { throw Error('Email sent failed.'); } } }