自定义函数实现表间校验

编辑
  • 文档创建者:印然
  • 浏览次数:4509次
  • 编辑次数:13次
  • 最近更新:susie 于 2019-05-17
  • 1. 描述

    对于在填报提交时,编辑单元格的值需要与另一报表中某个参数或者某一单元格的值进行校验的需求,FineReport 可以通过自定义函数来实现。

    2. 原理

    在 JAVA 实现的自定义函数中,读取报表,传入参数值并执行,从执行后的报表结果中取某个单元格值的并返回,在填报表中便可以使用返回的值进行数据校验了。

    对模板 reportcheck2.cpt 中单元格 D2 输入的成绩进行校验,比较对象是 reportcheck1.cpt 中的值,如下图:


    D2 输入的值不能大于 reportcheck1.cpt 中的最大值,也不能小于 reportcheck1.cpt 中的最小值。
    其中 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.1 编写自定义函数

    ReportCheck 函数代码如下:

    https://git.fanruan.com/demo/example/src/release/10.0/src/main/java/com/fr/function/ReportCheck.java

    2.2 编译自定义函数

    编译 ReportCheck.java,生成类 ReportCheck.classReportCheck$TpObj.class,由于我们的类定义在包 com.fr.function 下,因此将最终生成的类文件拷贝至%FR_HOME%\webapps\webroot\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),校验出错信息:"成绩太高,超过最高分"

    D2 >= ReportCheck("reportcheck1.cpt","[{name:max,value:90},{name:min,value:0}]",1,1),校验出错信息:"成绩太低,低于最低分"

    校验公式说明:给 reportcheck1 传入两个参数,max 值为 90,min 值为 0,取执行后结果中第 2 列第 1 行和第 2 列第 2 行,即 B1 和 B2 单元格的值,保存,点击填报预览

    3. 预览效果

    成绩输入 100,点击数据校验,提示“成绩太高,超过最高分”


    成绩输入 -10,提示“成绩太低,低于最低分”


    成绩输入 80,校验成功


    4. 已完成模板

    已完成模板,请参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\function\reportcheck1.cpt点击下载模板

    %FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\function\reportcheck2.cpt点击下载模板





    附件列表


    主题: 二次开发
    标签: 暂无标签 编辑/添加标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]