【问题标题】:Can't use Row Data Resulted from Scripted DataSet无法使用脚本数据集产生的行数据
【发布时间】:2014-03-30 18:57:06
【问题描述】:

使用 BIRT 执行测试我能够创建报告并将其呈现为 PDF,但不幸的是我没有得到预期的结果。

对于我的数据源,我创建了一个脚本化数据源,其中不需要任何代码(据我所知,我可以看到文档来实现我想要做的事情)。

对于我的数据集,我使用我的脚本数据源作为源创建了一个脚本数据集。在那里我定义了打开脚本:

importPackage(Packages.org.springframework.context);
importPackage(Packages.org.springframework.web.context.support);

var sc = reportContext.getHttpServletRequest().getSession().getServletContext();

var spring = WebApplicationContextUtils.getWebApplicationContext(sc);

myPojo = spring.getBean("myDao").findById(params["pojoId"]);

获取脚本如下:

if(myPojo != null){
       row["title"] = myPojo.getTitle();
       myPojo = null;
       return true;
}
return false;

由于row 的填充将在运行时完成,我无法自动获取 DataSet 列,因此我使用以下配置创建了一个:name: columnTitle(因为这是用于填充行的名称获取代码中的对象)。

之后我编辑了报告的布局并将列添加到我的布局中。

我能够确认spring.getBean("myDao").findById(params["pojoId"]); 已被执行。但是我渲染的报告没有显示标题。如果我双击报告布局上的列标签,我可以看到表达式是dataSetRow["columnTitle"],对吗?即使我在我的提取脚本中使用行?我在这里错过了什么?

【问题讨论】:

    标签: java report birt


    【解决方案1】:

    那么,conctractVersion 是什么? 它显然没有在open 事件中初始化。 这应该是myPojo.contractVersion 还是myPojo.getContractVersion()

    还有一点:列“columnTitle”的DS是否绑定到布局?

    您还应该以 HTML 格式或在预览器中运行报告以检查脚本错误。 不幸的是,在将报告生成为 PDF 时,这些都会被忽略...

    【讨论】:

    • 抱歉获取版本错误,我刚刚更正了。我只是将它拖放到布局中,应该足够了不是吗?当在那里使用row 变量并将行的键(在本例中为columnTitle)声明为列输出时,fetch 的代码是否正确?
    • 您是否以 HTML 格式运行报告并查找以红色显示的 Javascript 错误?
    • 也许有必要创建一个报告变量来存储 myPojo,在代码中使用 vars["myPojo"] 访问它,而不仅仅是 myPojo。
    • +1 用于在呈现 PDF 时隐藏异常的提示
    【解决方案2】:

    问题在于两次使用蜡染(两个不同的版本),一个依赖于 BIRT,另一个依赖于 DOCX4J。

    这个问题很难识别,因为没有日志输出渲染 PDF 文件。

    渲染 HTML 我可以看到一条错误消息,我可以调查并找到问题。

    就我而言,我可以从 Maven POM 中删除 DocX4j。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 2019-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多