• [AX]AX2012 从代码运行SSRS报表


    在AX中SSRS除了从menu item运行,还可以从X++类运行,和AX3的runbasereport类类似,AX2012提供了SrsReportRunController、SrsReportDataContract、SrsReportRdlDataContract 、SrsReportDataContractUIBuilder、SrsPrintDestinationSettings 等类来运行SSRS报表,下面是一个运行vend.report报表结果保存到pdf文件的例子(转自http://axinternals.blogspot.com/2011/11/running-report-via-code-in-ax2012.html):

    static void RunSSRSReport(Args _args)
    {
        SrsReportRunController  reportRunController;
        Map                     queryContracts;
        MapEnumerator           mapEnum;
        Query                   query;
        QueryBuildRange         range;
        ;
    
        // Create the report run controller
        reportRunController = new SrsReportRunController();
        reportRunController.parmReportName('Vend.Report');
        reportRunController.parmLoadFromSysLastValue(false);
    
        // NB call to parmLoadFromSysLastValue must occur before any reference to
        // parmReportContract, otherwise the previous values (query ranges etc)
        // are defaulted in.
    
        // Set printer settings (print to file, format, filename, etc).
        reportRunController.parmReportContract().parmPrintSettings().printMediumType(SRSPrintMediumType::File);
        reportRunController.parmReportContract().parmPrintSettings().overwriteFile(true);
        reportRunController.parmReportContract().parmPrintSettings().fileFormat(SRSReportFileFormat::PDF);
        reportRunController.parmReportContract().parmPrintSettings().fileName('c:\\test.pdf');
    
        // Find/enumerate queries in the contract. The return from parmQueryContracts is
        // a map of type <ParameterName,Query(class)>
    
        queryContracts = reportRunController.parmReportContract().parmQueryContracts();
        mapEnum = queryContracts.getEnumerator();
        while(mapEnum.moveNext())
        {
            // Get the query and update the datasource as required
            query = mapEnum.currentValue();
            range = SysQuery::findOrCreateRange(query.dataSourceTable(tableNum(VendTable)),fieldNum(VendTable,AccountNum));
            range.value('1*');
        }
    
        // Run the report
        reportRunController.runReport();
    
    }

    除了可以直接使用SrsReportRunController,AX也提供了很多它的扩展类,比如SrsPrintMgmtFormLetterController,从它扩展了类GiroPrintMgmtFormLetterController,而具体很多打印invoice的类比如SalesInvoiceController又继承自GiroPrintMgmtFormLetterController,使用这个类可以打印一组Invoice journal,具体如何使用可以参看系统自带的报表比如SalesInvoice。

    微软就报表编程模型提供了一份白皮书,这里下载:http://www.microsoft.com/en-us/download/details.aspx?id=27725

  • 相关阅读:
    mysql +java中文乱码
    POJ1325二分匹配或者DINIC(最小路径覆盖)
    POJ1324贪吃蛇(状态压缩广搜)
    POJ1324贪吃蛇(状态压缩广搜)
    POJ1548最小路径覆盖
    POJ1548最小路径覆盖
    POJ1018贪心(多路归并的想法)
    POJ1018贪心(多路归并的想法)
    POJ2771最大独立集元素个数
    POJ2771最大独立集元素个数
  • 原文地址:https://www.cnblogs.com/duanshuiliu/p/2658190.html
Copyright © 2020-2023  润新知