Jasper 报告逻辑条件未从 Netbeans 执行:“未找到函数”错误

Posted

技术标签:

【中文标题】Jasper 报告逻辑条件未从 Netbeans 执行:“未找到函数”错误【英文标题】:Jasper Reports Logic Conditions not executing from Netbeans: "Function IF not found" error 【发布时间】:2014-07-15 15:10:59 【问题描述】:

我正在使用 Jaspersoft Studio 设计我的报告,然后从 Netbeans 执行它们。

我有一个子报表,它将返回值传递给主报表,然后将其添加到主报表中的一个值中以形成总计。

在主报告中,我用 2 个值填充一个文本字段,在文本字段表达式中,我将它们加在一起以获得总计。

来自主报告的变量 - $VSubTotal2

来自子报告的变量 - $VSubTotal1

我遇到的问题是……

当我将表达式编写为 $VSubTotal1 + $VSubTotal2 时,它在 Netbeans 中执行报告时成功。

但是,我需要检查 Subtotal2 是否不为空,所以我需要在其中添加一个 IF 语句,如下所示 -

IF($VSubTotal1==null,0.00,$VSubTotal1) + $VSubTotal2

在 JasperSoft Studio 中使用“预览”选项时,它工作正常,我可以查看报告,但是通过 netbeans 执行它时出现以下错误

Error evaluating expression : 
Source text : IF($VSubTotal1==null,0.00,$VSubTotal1) + $VSubTotal2
net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression : 
Source text : IF($VSubTotal1==null,0.00,$VSubTotal1) + $VSubTotal2
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:244)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:591)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:559)
at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:1016)
at net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:504)
at net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:488)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:259)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:456)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2057)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillGroupFooter(JRVerticalFiller.java:943)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillGroupFooters(JRVerticalFiller.java:809)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportEnd(JRVerticalFiller.java:317)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:158)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:939)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:852)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:87)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:276)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:745)
at nmtbatchservice.jasperreporting.JasperReportGenerator.generateReport(JasperReportGenerator.java:53)
at nmtwebservice.reporting.BillIssuerReport.generateReport(BillIssuerReport.java:178)
at nmtbatchservice.NMTBatchService2.main(NMTBatchService2.java:155)
Caused by: net.sf.jasperreports.engine.JRRuntimeException: Function IF not found
at net.sf.jasperreports.compilers.GroovyEvaluator.functionCall(GroovyEvaluator.java:73)

有什么想法吗?正如我所说 - 它可以通过 Jasper Studio 工作,但在我使用 netbeans 时不能工作。

【问题讨论】:

【参考方案1】:

问题已解决 - 我需要将 jasperreports-functions-5.2.0.jar 添加到我在 Netbeans 中的项目中。请注意,该 Jar 还需要 Joda.org 库 http://joda-time.sourceforge.net/installation.html

【讨论】:

以上是关于Jasper 报告逻辑条件未从 Netbeans 执行:“未找到函数”错误的主要内容,如果未能解决你的问题,请参考以下文章

如何避免获取java.lang.NoClassDefFoundError:org / apache / commons / logging / LogFactory

使用内存中的 CSV 数据源生成 Jasper 报告报告

使用Node-Jasper包在Node.js中生成报告

Jasper 报告无法导出为 PDF

Java合并了两个Jasper Report

连接mysql时Jasper报告服务器连接失败