Hi All,
Process: Running the batch class which will generate the report and send the output as Excel file in mail attachment.
Issue: Unable to open the excel file from the mail attachment, getting the below error.
When the file format is PDF / CSV its working fine. Only facing issue when the file format is Excel facing the issue.
settings.fileFormat(SRSReportFileFormat::Excel);
In excel properties found few property changes
Looking for your valuable solutions, Thanks in advance.
public void sendMail()
{
Filename fileName = 'Test.xlsx';
Str messageText;
SrsReportRunController controller = new SrsReportRunController();
SrsReportDataContract contract = new SrsReportDataContract();
SRSPrintDestinationSettings settings;
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();
System.Byte[] binData1;
System.IO.Stream stream1;
controller.parmReportName(ssrsReportStr(DashboardReport, Report));
//controller.parmExecutionMode(SysOperationExecutionMode::Synchronous);
controller.parmShowDialog(false);
controller.parmLoadFromSysLastValue(false);
controller.parmReportContract().parmRdpContract(contract);
settings = controller.parmReportContract().parmPrintSettings();
settings.printMediumType(SRSPrintMediumType::File);
settings.fileName(fileName);
settings.fileFormat(SRSReportFileFormat::Excel);
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());
reportBytes = srsproxy.renderReportToByteArray(controller.parmreportcontract().parmreportpath(),parameterValueArray,settings.fileFormat(),settings.deviceinfo());
container binData;
Binary binaryData;
System.IO.MemoryStream mstream = new System.IO.MemoryStream(reportBytes);
binaryData = Binary::constructFromMemoryStream(mstream);
if (binaryData)
{
binData = binaryData.getContainer();
}
for (int i = 0; i < conLen(binData); i++)
{
binData1 = conPeek(binData,i+1);
stream1 = new System.IO.MemoryStream(binData1);
}
//File::SendFileToUser(stream1,filename);
var mail = SysMailerFactory::getNonInteractiveMailer();
var messageBuilder = new SysMailerMessageBuilder();
messageText = "Dear Sir/Madam,\nTesting mail with attachment.\nThanks.";
messageBuilder.reset()
.setFrom('From mail address')
.addTo("To mail address")
.setSubject('Test mail')
.setBody(messageText);
if (stream1 != null)
{
messageBuilder.addAttachment(stream1,filename);
}
mail.sendNonInteractive(messageBuilder.getMessage());
}