Hello, I have created a batch job to send the customer account statement to the customers via email by passing the parameters of the report from a table that i have created but when running the batch it's throwing the error.
Below is the code that i have added to the run method :
public void run ()
{
SysMailerMessageBuilder mailer = new SysMailerMessageBuilder();
SysMailerSMTP smtp = new SysMailerSMTP();
SrsReportEMailDataContract emailContract;
str fileContentType;
SysEmailContents body;
int i,pagecount;
System.IO.Stream copyto;
System.IO.MemoryStream stream;
DocuRef docuref;
DocuValue DocuValue;
GRML_CustSOAParm GRML_CustSOAParm;
System.Byte[] reportBytes;
while select forupdate * from GRML_CustSOAParm where GRML_CustSOAParm.IsSent == NoYesError::No
{
CustAccountStatementExtController controller = new CustAccountStatementExtController();
controller.parmReportName(ssrsReportStr(CustAccountStatementExt,Report));
controller.parmShowDialog(false);
CustAccountStatementExtContract contract = new CustAccountStatementExtContract();
contract.parmCustAccount(GRML_CustSOAParm.CustAccount);
contract.parmFromDate(GRML_CustSOAParm.FromDate);
contract.parmToDate(GRML_CustSOAParm.ToDate);
contract.parmCustAccountStatementExtTmp(tableStr(CustAccountStatementExtTmp));
controller.parmReportContract().parmRdpContract(contract);
controller.parmReportContract().parmReportExecutionInfo(new SRSReportExecutionInfo());
controller.parmReportContract().parmReportServerConfig(SRSConfiguration::getDefaultServerConfiguration());
SRSPrintDestinationSettings printerSettings = controller.parmReportContract().parmPrintSettings();
printerSettings.printMediumType(SRSPrintMediumType::File);
printerSettings.fileFormat(SRSReportFileFormat::PDF);
printerSettings.parmFileName("Account Statement.pdf");
printerSettings.overwriteFile(true);
SrsReportRunService SrsReportRunService = new SrsReportRunService();
SrsReportRunService.getReportDataContract(controller.parmReportContract().parmReportName());
SrsReportRunService.preRunReport(controller.parmReportContract());
Map reportParametersMap = SrsReportRunService.createParamMapFromContract(controller.parmReportContract());
Microsoft.Dynamics.AX.Framework.Reporting.Shared.ReportingService.ParameterValue[] parameterValueArray =
SrsReportRunUtil::getParameterValueArray(reportParametersMap);
SRSProxy srsProxy = SRSProxy::constructWithConfiguration(controller.parmReportContract().parmReportServerConfig());
reportBytes = srsProxy.renderReportToByteArray(
controller.parmReportContract().parmReportPath(),
parameterValueArray,
printerSettings.fileFormat(),
printerSettings.deviceInfo()
);
stream = new System.IO.MemoryStream();
if(reportBytes)
{
stream.Write(reportBytes,0,reportBytes.Length);
fileContentType = System.Web.MimeMapping::GetMimeMapping("Account Statement.pdf");
stream.Position = 0;
mailer.addAttachment(stream,"Account Statement.pdf",fileContentType);
mailer.setSubject("Account statement");
mailer.setFrom(SysEmailParameters::find().SMTPUserName);
mailer.setBody("Kindly find your account statement in the attachement");
mailer.addTo("");
try
{
smtp.sendNonInteractive(mailer.getMessage());
mailer.reset();
}
catch
{
throw Error ("Email failed to send");
}
}
}
}
It is throwing the exception for this line : SrsReportRunService.preRunReport(controller.parmReportContract());
Kindly help me fix this issue.