从 Jasper Reports 中抛出异常

Throw Exceptions from Jasper Reports

我想阻止用户从 Jasper 下载大量报告。 REPORT_MAX_COUNT 做了这个工作,但用户不知道它生成了部分数据。

当 REPORT_COUNT 大于 REPORT_MAX_COUNT 时,我想从 Jasper 中抛出异常。因此用户可以相应地优化搜索过滤器。是否可以从 Jasper 中抛出异常?

我会避免从报告中抛出异常,因为您可以用其他方式处理它。

相反,我会使用这些选项:

  1. 我想在生成报告后控制是否显示它(好像是你的情况),检查报告后的REPORT_COUNT >= REPORT_MAX_COUNT是否已填充。

示例 java 代码:

JasperReport report = JasperCompileManager.compileReport("yourReport.jrxml");
JRBaseFiller filler = JRFiller.createFiller(DefaultJasperReportsContext.getInstance(),report); //we need the filler to get the variable value
JasperPrint print = filler.fill(map, connection);
Object rc = filler.getVariableValue("REPORT_COUNT");
Object maxRc = filler.getParameterValue("REPORT_MAX_COUNT");
if (rc instanceof Number && maxRc instanceof Number){
    if (((Number)rc).intValue()>=((Number)maxRc).intValue()){
        System.out.println("REPORT_MAX_COUNT HIT!!, doing something else...");
    }
}

而不是 System.out 做你的事情,如果你喜欢 throw new Exception("OOPS");

  1. 如果 REPORT_COUNT >= REPORT_MAX_COUNT
  2. ,则在报告中显示警告文本

示例 jrxml 代码:

<summary>
    <band height="20">
        <textField evaluationTime="Report">
            <reportElement x="0" y="0" width="200" height="20" isRemoveLineWhenBlank="true" forecolor="#FF0033" uuid="82b89600-1787-4a86-809e-adc5babdd6b6">
                <printWhenExpression><![CDATA[$V{REPORT_COUNT}.intValue()>=$P{REPORT_MAX_COUNT}.intValue()]]></printWhenExpression>
            </reportElement>
            <textElement textAlignment="Center" verticalAlignment="Middle"/>
            <textFieldExpression><![CDATA["REPORT_MAX_COUNT HIT"]]></textFieldExpression>
        </textField>
    </band>
</summary>
  1. 两者都做..,在界面中显示警告,但如果用户愿意,可以让用户下载带有警告文本的生成报告....