Die Feldgruppe AutoReport einer Tabelle und deren Verwendung beim Drucken von Daten aus einem Formular heraus sollte wohl jedem Dynamics AX-Entwickler bekannt sein. Auf Basis dieser Standard-Funktionalität habe ich versucht, selbst einen Report per X++ auf Basis eines Query zu erstellen.
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.
Mehr dazu
Die Feldgruppe AutoReport einer Tabelle und deren Verwendung beim Drucken von Daten aus einem Formular heraus sollte wohl jedem Dynamics AX-Entwickler bekannt sein. Auf Basis dieser Standard-Funktionalität habe ich versucht, selbst einen Report per X++ auf Basis eines Query zu erstellen.
{
query query;
report report;
reportDesign reportDesign;
reportRun reportRun;
reportSection reportSection;
sysReportRun sysReportRun;
reportName reportTemplateName = 'FrontPage';
reportAutoDesignSpecs reportAutoDesignSpecs;
int ds;
int f;
printJobSettings printJobSettings = new printJobSettings();
;
// Build query
query = new query();
query.addDataSource(tableNum(vendTable));
query.dataSourceTable(tableNum(vendTable)).addRange(fieldNum(vendTable, vendGroup)).value('10');
// Add Fieldlist
query.dataSourceTable(tableNum(vendTable)).addSelectionField(fieldNum(vendTable, accountNum));
query.dataSourceTable(tableNum(vendTable)).addSelectionField(fieldNum(vendTable, name));
query.dataSourceTable(tableNum(vendTable)).addSelectionField(fieldNum(vendTable, vendgroup));
// Build printJobSettings
printJobSettings.setTarget(PrintMedium::Screen);
printJobSettings.format(PrintFormat::PDF);
printJobSettings.fileName(@"C:\Temp\TempReportFromQuery.pdf");
// Create report
if( hasSecurityKeyAccess(securityKeyNum(SysDevelopment),
AccessType::Edit))
{
report = new report();
sysReportRun = classfactory.reportRunClass(new Args(reportstr(SysReportAuto)));
sysReportRun.init();
sysReportRun.query(query);
if (!sysReportRun.queryRun())
{
sysReportRun.queryRun(new SysQueryRun(query));
}
sysReportRun.queryRun().query().interactive(false);
Report.interactive(!printJobSettings);
Report.query(sysReportRun.queryRun().query());
reportDesign = report.addDesign();
reportDesign.caption("TmpReportFromQuery");
reportDesign.reportTemplate(reportTemplateName);
reportDesign.orientation(printerOrientation::Auto);
reportAutoDesignSpecs = reportDesign.autoDesignSpecs();
// Add body
for(ds = 1;ds <= sysReportRun.queryRun().query().dataSourceCount(); ds++)
{
reportSection = reportAutoDesignSpecs.addSection(reportBlockType::Body, sysReportRun.queryRun().query().dataSourceNo(ds).table());
reportSection.arrangeMethod(arrangeMethod::Vertical);
for(f=1;f<=sysReportRun.queryRun().query().dataSourceNo(ds).selectionCount();f++)
{
reportSection.addControl(sysReportRun.queryRun().query().dataSourceNo(ds).table(), sysReportRun.queryRun().query().dataSourceNo(ds).fields().field(f));
}
}
// Run the report
reportRun = new reportRun(report);
reportRun.fetch();
// Print the report
if(printJobSettings)
{
reportRun.printJobSettings(printJobSettings.packPrintJobSettings());
}
reportRun.print();
}
}
Das Ergebnis des obigen Codes ist ein sehr einfacher Report: