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
November 2024
MoDiMiDoFrSaSo
 123
45678910
11121314151617
18192021222324
252627282930 
 
© 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