多语言展示
当前在线:921今日阅读:27今日分享:41

erp报表二次开发自定义函数实现表间校验

erp报表二次开发自定义函数实现表间校验
工具/原料

erp报表二次开发:finereport

方法/步骤
1

编译自定义函数编译ReportCheck.java,生成类ReportCheck.class,由于我们的类定义在包com.fr.function下,因此将最终生成的类文件拷贝至WEB-INF\classes\com\fr\function文件夹下,没有这个路径的话可以手动创建。

2

1. 实现原理在java实现的自定义函数中,读取报表,传入参数值并执行,从执行后的报表结果中取某个单元格值的并返回,在填报校验,比较对象是reportcheck1.cpt中的值,如下如

3

D2输入的值不能大于另一模板中的最大值,也不能小于另一模板中的最小值。其中reportcheck1的最大值最小值是通过参数最终计算而来的。该例子仅作为原理介绍,因此比较的对象直接引用参数的值,实际情况中可能是报表通过传入的参数,根据参数取得数据怎么获取另一模板的值呢?可以通过自定义函数ReportCheck获取。ReportCheck函数的使用说明如下:ReportCheck(para1,para2,para3,para4) :获取报表中某一单元格的值

4

参数说明:para1 :报表名称para2 :传递给报表的参数值列表,格式如'[{name:para1name,value:para1value},{name:para2name,value:para2value},......]'para3 :获取单元格开始实例:ReportCheck('reportcheck1.cpt','[{name:max,value:100},{name:min,value:0}]',1,0) :获取报表reportcheck1通过传入参数计算后的B1单元格的值ReportCheck('reportcheck1.cpt','[]',0,0) :若没有参数,则第二个参数值设为'[]'获取报表reportcheck1的A1单元格的值

5

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.maorkbook.ResultWorkBook;  import com.fr.report.cell.CellElement;  import com.fr.report.elementcase.TemplateElementCase;

6

2.3 注册自定义函数启动设计器,点击服务器|函数管理器,增加一自定义函数,选择刚保存的类,如下图

7

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

8

校验公式说明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,点击数据校验,提示“成绩太高,超过最高分”END

推荐信息