0

我创建了一个简单的 BIRT 报告,它使用两个不同的 DataSet 从两个 DB 表中选择数据。它还有两个传递给 DataSet 查询的参数。

我的问题是,当我从 Eclipse+BIRT 环境运行报告时,它会按原样获取所有数据,但是当我从 Grails birt-report 服务运行报告时,它只打印静态骨架,而不是来自D B。

首先,我认为我传递给服务的参数值有问题,所以我在报告中添加了一行来打印这些值。参数已按应有的方式传递和打印。
然后我从查询中删除了where部分,但仍然没有任何反应。从 Eclipse 运行时会填写报告,在birt-report插件中运行时报告为空。

这是我用来打印报告的代码:

    params.remove('action')
    params.remove('controller')
    params.remove('name')

    params.put("userId", 10)   //parameter that should be passed
    params.put("resumeId", 5)  //parameter that should be passed

    println params;

    def options = birtReportService.getRenderOption(request, 'doc')
    def result=birtReportService.runAndRender(reportName, params, options)
    response.setHeader("Content-disposition", "attachment; filename=" +reportName + "."+reportExt);
    response.contentType = 'application/doc'
    response.outputStream << result.toByteArray()

任何想法可能是什么原因?

UPD:我怎样才能调试它以查看里面到底发生了什么?

UPD 2:看起来它与应用程序有关,因为当我在新的 Grails 应用程序中启动报告时,它工作正常。

我在查看调试日志时发现成功和失败启动之间的唯一区别是:

我的应用程序日志:

[26/03/2013 13:12:36,909] [org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery] [219] 条目 org.eclipse.birt.data.engine.impl.DataEngineImpl@1ed14cb8 org.eclipse。 birt.data.engine.api.querydefn.QueryDefinition@729b6def org.eclipse.birt.data.engine.impl.OdaDataSetAdapter@200ecb05 {org.eclipse.datatools.connectivity.oda.util_consumerResourceIds=org.eclipse.datatools.connectivity.oda .util.ResourceIdentifiers@2b32c5b4, OdaJDBCDriverPassInConnection=来自数据源的目标连接的事务感知代理 [org.apache.commons.dbcp.BasicDataSource@39547eb6], HTML_RENDER_CONTEXT=org.eclipse.birt.report.engine.api.HTMLRenderContext@1251c294, org.eclipse.birt.data.query.ResultBufferSize=100}
[26/03/2013 13:12:36,909] [org.eclipse.birt.data.engine.impl.DataEngineImpl] [219] PreparedQuery 启动。
[26/03/2013 13:12:36,909] [org.eclipse.birt.data.engine.impl.aggregation.AggregateTable] [219] 条目
[26/03/2013 13:12:36,909] [org.eclipse.birt.data.engine.impl.aggregation.AggregateTable] [219] 返回
[26/03/2013 13:12:36,909] [org.eclipse.birt.data.engine.impl.aggregation.AggregateTable] [219] 条目 C:\Users\SZAGOR~1\AppData\Local\Temp\DataEngine_517033144_2\ [对象对象] []
[26/03/2013 13:12:36,909] [org.eclipse.birt.data.engine.impl.aggregation.AggregateTable] [219] 返回
[26/03/2013 13:12:36,909] [org.eclipse.birt.data.engine.impl.DataEngineImpl] [219] 开始准备 PreparedQuery。
[26/03/2013 13:12:36,909] [org.eclipse.birt.data.engine.impl.aggregation.AggrRegistry] [219] ENTRY 0 -1 true org.eclipse.birt.core.script.ScriptContext@57b32816
[26/03/2013 13:12:36,909] [org.eclipse.birt.data.engine.impl.aggregation.AggrRegistry] [219] 返回

//这些行是可疑的
[26/03/2013 13:12:36,909][org.eclipse.birt.data.engine.expression.InvalidExpression] [219] InvalidExpression 启动
[26/03/2013 13:12:36,912] [org.eclipse.birt.data.engine.expression.InvalidExpression] [219] InvalidExpression 启动

[26/03/2013 13:12:36,912] [org.eclipse.birt.data.engine.impl.GroupBindingColumn] [219] ENTRY null 0 {first_name=org.eclipse.birt.data.engine.api.querydefn。 Binding@f6678eba, last_name=org.eclipse.birt.data.engine.api.querydefn.Binding@77fdce94, coalesce(resume.mobile_phone, "-")=org.eclipse.birt.data.engine.api.querydefn.Binding @9beadc7d}

和新的应用程序日志:

2013-03-26 12:51:08,352 [http-bio-8080-exec-1] 调试 impl.PreparedDataSourceQuery - 条目 org.eclipse.birt.data.engine.impl.DataEngineImpl@79bff971 org.eclipse.birt.data。 engine.api.querydefn.QueryDefinition@1799e2e2 org.eclipse.birt.data.engine.impl.OdaDataSetAdapter@1aec9361 {org.eclipse.datatools.connectivity.oda.util_consumerResourceIds=org.eclipse.datatools.connectivity.oda.util.ResourceIdentifiers @21bfd316,OdaJDBCDriverPassInConnection=来自数据源的目标连接的事务感知代理 [org.apache.commons.dbcp.BasicDataSource@38bb5aa9],HTML_RENDER_CONTEXT=org.eclipse.birt.report.engine.api.HTMLRenderContext@143d2a58,org.eclipse。 birt.data.query.ResultBufferSize=100}
2013-03-26 12:51:08,352 [http-bio-8080-exec-1] 调试 impl.DataEngineImpl - PreparedQuery 启动。
2013-03-26 12:51:08,352 [http-bio-8080-exec-1] 调试聚合。聚合表-条目
2013-03-26 12:51:08,352 [http-bio-8080-exec-1] 调试聚合。聚合表-返回
2013-03-26 12:51:08,352 [http-bio-8080-exec-1] 调试聚合.AggregateTable - 条目 C:\Users\SZAGOR~1\AppData\Local\Temp\DataEngine_2042624369_1\ [对象对象] []
2013-03-26 12:51:08,352 [http-bio-8080-exec-1] 调试聚合。聚合表-返回
2013-03-26 12:51:08,352 [http-bio-8080-exec-1] 调试 impl.DataEngineImpl - 开始准备 PreparedQuery。
2013-03-26 12:51:08,362 [http-bio-8080-exec-1] DEBUG aggregation.AggrRegistry - ENTRY 0 -1 true org.eclipse.birt.core.script.ScriptContext@560fc912
2013-03-26 12:51:08,362 [http-bio-8080-exec-1] 调试聚合.AggrRegistry - 返回

// 这里不一样
2013-03-26 12:51:08,362 [http-bio-8080-exec-1] 调试表达式.ColumnReferenceExpression - ENTRY first_name
2013-03-26 12:51:08,362 [http-bio-8080-exec-1] 调试表达式.ColumnReferenceExpression - 返回
2013-03-26 12:51:08,362 [http-bio-8080-exec-1] 调试表达式。ColumnReferenceExpression - ENTRY last_name
2013-03-26 12:51:08,362 [http-bio-8080-exec-1] 调试表达式.ColumnReferenceExpression - 返回
2013-03-26 12:51:08,362 [http-bio-8080-exec-1] 调试表达式.ColumnReferenceExpression-条目合并(resume.mobile_phone,“-”)
2013-03-26 12:51:08,362 [http-bio-8080-exec-1] 调试表达式.ColumnReferenceExpression - 返回
2013-03-26 12:51:08,362 [http-bio-8080-exec-1] 调试 impl.GroupBindingColumn - ENTRY null 0 {first_name=org.eclipse.birt.data.engine.api.querydefn.Binding@f6678eba, last_name=org.eclipse.birt.data.engine.api.querydefn.Binding@77fdce94, coalesce(resume.mobile_phone, "-")=org.eclipse.birt.data.engine.api.querydefn.Binding@9beadc7d}

在这两种情况下都使用了相同的报告文件。

4

0 回答 0