Report auf Basis eines Query erstellen

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.

static void createReportFromQuery(Args _args)
{
    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:

Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2009

Kommentar hinzufügen
 
 

 

 
 
 
Beiträge des aktuellen Monats
Mai 2024
MoDiMiDoFrSaSo
 12345
6789101112
13141516171819
20212223242526
2728293031 
 
© 2006-2024 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
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