如何设置参数并将参数传递给由 BIRT 报告设计器通过 BIRT API 创建的 BIRT 报告?

Posted

技术标签:

【中文标题】如何设置参数并将参数传递给由 BIRT 报告设计器通过 BIRT API 创建的 BIRT 报告?【英文标题】:How do you set and pass a parameter to a BIRT report created by the BIRT Report Designer through the BIRT API? 【发布时间】:2012-05-31 14:58:06 【问题描述】:

我创建了一个采用单个参数的简单报告。该参数在查询中使用,直接在报表设计器中执行时执行良好。顺便说一句,我没有为这份报告使用 javascript 或任何脚本。我看到有些人试图在这里使用脚本和/或 javascripts 传递参数以获得答案,但这不是我正在做的。我通过java传递我的所有参数。继续,在这份报告中,我列出了活动/非活动项目。我传入一个“N”来列出不活动的项目,传入一个“Y”来列出活动项目。当我尝试通过 API 传入参数时,无论我传入什么,我总是会得到一个活动项目列表。顺便说一下,“Y”是传入参数的默认值。(我在下面的代码)我遇到的问题是报告似乎不想采用我设置的参数。是的,我传入的变量中的值发生了变化,但报告没有反映这种变化。我的代码如下。我已尝试遵循此链接的建议以及如何设置参数。

http://www.eclipsezone.com/eclipse/forums/t67723.html

如果您转到链接,请转到 #4 并查看要执行的任务列表。这是我试图遵循的。我觉得我可能错过了什么。如果你能做到这一点,你能给我一些关于我所缺少的建议吗?非常感谢!

-戴尔

    public class ReportGenerator 
        public static void main(String args[]) throws Exception
        ReportGenerator rg = new ReportGenerator();
        rg.executeReport("N");
        


        @SuppressWarnings( "unchecked", "deprecation" )
        public void executeReport(String activeIndicator) throws EngineException 

        IReportEngine engine=null;
        EngineConfig config = null;

        try
            config = new EngineConfig( );            
            config.setBIRTHome("C:\\birt-rcp-report-designer-3_7_2\\ReportEngine");
            config.setLogConfig("c:/temp/test", Level.FINEST);
            Platform.startup( config );
            IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
            engine = factory.createReportEngine( config );        


            IReportRunnable reportDesign = null;
            reportDesign = engine.openReportDesign("C:\\workspace\\SimpleReport\\ReportTemplates\\ItemListingReport.rptdesign"); 
            IRunAndRenderTask task = engine.createRunAndRenderTask(reportDesign);
            IGetParameterDefinitionTask parameterDefinitionTask = engine.createGetParameterDefinitionTask(reportDesign);
            parameterDefinitionTask.evaluateDefaults();
            HashMap<String, String> params = parameterDefinitionTask.getDefaultValues();
            params.put("aIndicator", activeIndicator);
            parameterDefinitionTask.setParameterValues(params);

            ConnectionHelper connectionHelper = new ConnectionHelper();
            task.getAppContext().put("OdaJDBCDriverPassInConnection", connectionHelper.getConnection());

            PDFRenderOption options = new PDFRenderOption();
            options.setOutputFormat("pdf");
            options.setOutputFileName("C:\\workspace\\SimpleReport\\output\\itemListingReport.pdf");

            task.setRenderOption(options);

            task.run();
            task.close();
            engine.destroy();
         catch (Exception ex) 
            ex.printStackTrace();
         finally 
            Platform.shutdown();
        
        
    

【问题讨论】:

【参考方案1】:

需要在IRunAndRenderTask上设置参数:

IRunAndRenderTask task =
    engine.createRunAndRenderTask(reportRunnable);
Map< String, Object > birtParams = ...;
task.setParameterValues( birtParams );

【讨论】:

在以前的版本中(BIRT 4 之前),我所要做的就是 new EngineConfig().setAppContext(birtParams)。

以上是关于如何设置参数并将参数传递给由 BIRT 报告设计器通过 BIRT API 创建的 BIRT 报告?的主要内容,如果未能解决你的问题,请参考以下文章

从 s-s-rS 中的表达式将参数传递给数据集

将命令行参数传递给调用带有装饰器参数的装饰函数的函数

在 Visual Studio 2008 中使用设计器将逗号分隔列表作为参数传递给 db2 查询的 IN 子句

如何循环遍历动态大小的数组并将属性作为参数传递给可变参数函数?

将范围参数传递给Crystal对象

如何将 URL 参数传递给选择器