Druckeinstellungen und Filterkriterien eines Reports vorbelegen

In einem früheren Beitrag habe ich ja schon demonstriert, wie man einen Report in Dynamics AX per Code aufruft, und diesem dabei einen Query übergibt. Der folgende Code erweitert diesen Aufruf um die Druckeinstellungen (printJobSettings), sodaß es nun möglich ist, einen Report vollautomatisch mit vorgegebenen Filterkriterien und definierten Druckeinstellungen aus X++ heraus aufzurufen.

Im Beispiel wird der Standardbericht Cust verwendet, wobei nur Debitoren der Debitorengruppe 10 in eine PDF-Datei ausgegeben werden sollen.

static void setPrintJobSettingsQuery4Report(Args _args)
{
    ReportRun           ReportRun = new ReportRun(new Args(ReportStr(Cust)));
    printJobSettings    printJobSettings = new printJobSettings();
    ;

    // Modify Query
    sysQuery::findOrCreateRange(ReportRun.query().dataSourceTable(tableNum(custTable)), fieldNum(custTable, custGroup)).value(queryValue('10'));

    ReportRun.query().interactive(false);

    // Create printJobSettings
    printJobSettings.setTarget(PrintMedium::File);
    printJobSettings.format(PrintFormat::PDF);
    printJobSettings.fileName(@"C:\Temp\CustTableReport.pdf");

    // Apply printJobSettings
    ReportRun.printJobSettings(printJobsettings.packPrintJobSettings());

    ReportRun.report().interactive(false);  // Disable default printer-dialog

    ReportRun.run();
}

Update 12.12.2010
Inspiriert von einem Kommentar von Andi habe ich obigen Job etwas abgewandelt und verwende nun die classFactory um den ReportRun zu instanzieren:

static void setPrintJobSettingsQuery4Report_II(Args _args)
{
    ReportRun           ReportRun;
    printJobSettings    printJobSettings = new printJobSettings();
    args                args;
    ;

 

    args = new args();
    args.name(reportstr(Cust));

    ReportRun = classFactory.reportRunClass(args);

    // Modify Query
    sysQuery::findOrCreateRange(ReportRun.query().dataSourceTable(tableNum(custTable)), fieldNum(custTable, custGroup)).value(queryValue('10'));

    ReportRun.query().interactive(false);

    // Create printJobSettings
    printJobSettings.setTarget(PrintMedium::File);
    printJobSettings.format(PrintFormat::PDF);
    printJobSettings.fileName(@"C:\Temp\CustTableReport.pdf");

    // Apply printJobSettings
    ReportRun.printJobSettings(printJobsettings.packPrintJobSettings());

    ReportRun.report().interactive(false);  // Disable default printer-dialog

    ReportRun.run();
}

Dieser Beitrag bezieht sich auf die Version:
Dynamics AX 2009

Andi 10.12.2010 14:01 | #1

ggf. besser die classFactory zur Initialisierung verwenden?!

Heinz 12.12.2010 11:51 | #2

Danke Andi, Du hast natürlich recht. Ich habe deshalb meinen Beitrag entsprechend angepasst.

 
 

 

 
 
 
Beiträge des aktuellen Monats
Mai 2025
MoDiMiDoFrSaSo
 1234
567891011
12131415161718
19202122232425
262728293031 
 
© 2006-2025 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