java报表开发自定义函数实现表间校验
前期准备工作(包括相关工具或所使用的原料等)java报表开发:finereport 详细的操作方法或具体步骤
1. 实现原理
在java实现的自定义函数中,读取报表,传入参数值并执行,从执行后的报表结果中取某个单元格值的并返回,在填报表中便可以使用返回的值进行数据校验了。
对模板reportcheck2.cpt中单元格D2输入的成绩进行校验,比较对象是reportcheck1.cpt中的值,如下如

D2输入的值不能大于另一模板中的最大值,也不能小于另一模板中的最小值。其中reportcheck1的最大值最小值是通过参数最终计算而来的。该例子仅作为原理介绍,因此比较的对象直接引用参数的值,实际情况中可能是报表通过传入的参数,根据参数取得数据,执行报表后某些格子的值,与该例子是一样的。
此时在reportcheck2.cpt中我们怎么获取另一模板的值呢?可以通过自定义函数ReportCheck获取。
ReportCheck函数的使用说明如下:
ReportCheck(para1,para2,para3,para4) :获取报表中某一单元格的值
参数说明:
para1 :报表名称
para2 :传递给报表的参数值列表,格式如"[{name:para1name,value:para1value},{name:para2name,value:para2value},......]"
para3 :获取单元格列号,从0开始
para4 :获取单元格行号,从0开始
实例:
ReportCheck("reportcheck1.cpt","[{name:max,value:100},{name:min,value:0}]",1,0) :获取报表reportcheck1通过传入参数计算后的B1单元格的值
ReportCheck("reportcheck1.cpt","[]",0,0) :若没有参数,则第二个参数值设为"[]"获取报表reportcheck1的A1单元格的值
2. 实现步骤
2. 实现步骤
2.1 编写自定义函数
ReportCheck函数代码如下:
// 自定义函数实现表间校验
package com.fr.function;
import java.io.File;
import java.util.HashMap;
import com.fr.base.Env;
import com.fr.base.FRContext;
import com.fr.io.TemplateWorkBookIO;
import com.fr.json.JSONArray;
import com.fr.json.JSONObject;
import com.fr.main.TemplateWorkBook;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.report.cell.CellElement;
import com.fr.report.elementcase.TemplateElementCase;
import com.fr.script.AbstractFunction;
import com.fr.stable.WriteActor;
public class ReportCheck extends AbstractFunction {
private static HashMap wMap = new HashMap();
public Object run(Object[] args) {
// 获取公式中的参数
2.2 编译自定义函数
编译ReportCheck.java,生成类ReportCheck.class,由于我们的类定义在包com.fr.function下,因此将最终生成的类文件拷贝至WEB-INF\classes\com\fr\function文件夹下,没有这个路径的话可以手动创建。
2.3 注册自定义函数
启动设计器,点击服务器|函数管理器,增加一自定义函数,选择刚保存的类,如下图

2.4 使用自定义函数
打开reportcheck2.cpt模板,点击模板|报表填报属性|数据校验,我们来设置校验公式。
reportcheck2.cpt设置的数据校验如下

校验公式说明
D2 <=ReportCheck("reportcheck1.cpt","[{name:max,value:90},{name:min,value:0}]",1,0)
给reportcheck1传入两个参数,max值为90,min值为0,取执行后结果中第2列第1行即B1单元格的值
D2 >=ReportCheck("reportcheck1.cpt","[{name:max,value:90},{name:min,value:0}]",1,1)
取B2单元格的值
保存,点击填报预览
成绩输入100,点击数据校验,提示“成绩太高,超过最高分”

- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
