我希望停止用户从Jasper下载大量报告。 REPORT_MAX_COUNT执行此任务,但用户不知道其生成的部分数据。
当REPORT_COUNT大于REPORT_MAX_COUNT时,我想从Jasper抛出异常。因此用户可以相应地优化搜索过滤器是否可以从Jasper中抛出异常?
答案 0 :(得分: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")
做你的东西
REPORT_COUNT >= REPORT_MAX_COUNT
示例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>