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.

Kommentar hinzufügen
 
 

 

 
 
 
Beiträge des aktuellen Monats
April 2024
MoDiMiDoFrSaSo
1234567
891011121314
15161718192021
22232425262728
2930 
 
© 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