A very common task required by Dynamics 365 Finance and Operations clients is to send a report directly from the report viewer. This can be achieved with a view lines of Code. Here is video on Youtube how it works:
https://www.youtube.com/watch?v=0yQ8wvzzJSg
To achieve this create an extension of the SRSReportViewerForm, add a “Send Email” button. Create a OnClicked Event Handler in a Class.
[FormControlEventHandler(formControlStr(SrsReportViewerForm,
FormButtonControl1), FormControlEventType::Clicked)]
public static void FormButtonControl1_OnClicked(FormControl sender,
FormControlEventArgs e)
{
SrsReportViewerControl ct = sender.formRun().design(0).controlName (
‚ReportViewerControl‘);
object viewerForm = ct.formRun();
SrsReportRunController ctr= viewerForm.controller();
Microsoft.Dynamics.AX.Framework.Reporting.Shared.ReportingService.
ParameterValue[] parameterValueArray;
Map reportParametersMap;
SRSReportRunService srsReportRunService = new SrsReportRunService();
srsReportRunService.getReportDataContract(ctr.parmreportcontract().
parmReportName());
srsReportRunService.preRunReport(ctr.parmreportcontract());
reportParametersMap = srsReportRunService.createParamMapFromContract(
ctr.parmReportContract());
parameterValueArray = SrsReportRunUtil::getParameterValueArray(
reportParametersMap);
str fileName = ctr.parmReportName()+ „.pdf“;
SRSPrintDestinationSettings settings;
settings = ctr.parmReportContract().parmPrintSettings();
settings.printMediumType(SRSPrintMediumType::File);
settings.fileName(fileName);
settings.fileFormat(SRSReportFileFormat::PDF);
SRSProxy proxy = SRSProxy::constructWithConfiguration(SRSConfiguration::getDefaultServerConfiguration());
System.Byte[] reportBytes = proxy.renderReportToByteArray(
ctr.parmreportcontract().parmreportpath(),
parameterValueArray,
settings.fileFormat(),
settings.deviceinfo());
if(reportBytes.Length > 0)
{
SysMailerMessageBuilder messageBuilder = new
SysMailerMessageBuilder();
messageBuilder.setSubject(fileName);
messageBuilder.addAttachment(new System.IO.MemoryStream(
reportBytes), fileName);
SysMailerFactory::sendInteractive(messageBuilder.getMessage());
}
}
上一篇 #Dyn365FO POS发票支付 / POS Invoice Pay #Dyn365FO
自定义仓库移动应用程序:多扫描页面 / Customizing the warehouse mobile app: multi-scan pages 下一篇