《报表开发之自定义函数x.docx》由会员分享,可在线阅读,更多相关《报表开发之自定义函数x.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、报表开发之自定义函数x报表开发之自定义函数 对于报表开发,许多状况下,自带的函数就能满意大部分用户的报表制作需求,FineReport 也不例外。但是在一些特别领域能须要一些特别的函数,在这种状况下,FineReport 供应了自定义函数机制,可以由用户依据业务须要自己来定义一些函数,但这些函数必需满意函数定义规则。先来了解一下 FineReport 的函数定义规则:Functionname(Para,Para,.),其中Functionname 为函数名,Para 为参数。每一个函数都被定义成一个类,这个类必需要实现 Function 这个接口,在运算的时候首先通过函数名反射取得这个类,然后
2、调用它的 run(Object agrs)方法。下面以 SUM 这个函数为例。SUM 函数原理 函数原理 由程序可以看到,SUM 类用来运算 SUM 函数,他继承了 AbstractFunction 类,而AbstractFunction 实现了 Function 这个接口。当函数运算的时候,先依据函数名取得运算该函数的类,如 SUM(2,4,true)这个函数先依据函数名取得 SUM 这个类,然后调用 SUM 类的 run(Object args)方法,args 中存放的是 SUM 函数的参数,运算的时候可以从 args 中取得参数进行运算。如执行结果为 SUM(2,4,true)=2+4+
3、1=7。SUM 函数所运用代码:函数所运用代码:package com.fr.report.script;import java.lang.reflect.Array;import com.fr.report.script.core.FArray;import com.fr.report.script.core.FunctionHelper;public class SUM extends AbstractFunction public Object run(Object args) double result = 0;for (int i = 0; i < args.length; i
4、+) if (argsi = null) continue;result += parseObject(argsi);return FunctionHelper.parsePrimitiveDouble(result);private double parseObject(Object obj) if (obj instanceof Number) return (Number) obj).doubleValue(); else if (obj instanceof Boolean) return (Boolean) obj).booleanValue() ? 1 : 0; else if (
5、obj instanceof FArray) FArray array = (FArray) obj;double sum = 0;for (int i = 0; i < array.length(); i+) sum += parseObject(array.elementAt(i);return sum; else if (obj != null) try return Double.parseDouble(obj.toString(); catch (NumberFormatException exp) return 0;return 0;实现步骤 编写自定义函数 编写自定义函数
6、下面以一个简洁的自定义函数例子来说明运用自定义函数。我们定义一个函数StringCat,他的作用是把全部的参数以字符串的形式连接起来。StringCat 函数运用规则为 StringCat(Para,Para,Para.); 其中 Para 为该函数的参数,个数不限。由概述可知 AbstractFunction 实现了 Function 这个接口,因此 StringCat 可以干脆继承 AbstractFunction 类,完整代码如下:package com.fr.function; import com.fr.script.AbstractFunction; public class St
7、ringCat extends AbstractFunction public Object run(Object args) String result = ;Object para;for (int i = 0; i < args.length; i+) para = argsi;result += para.toString();return result;这里要留意,运用函数 StringCat(Para,Para,Para.)时,依据函数名取得运算该函数的类 StringCat,并将参数传入类中的 args 对象数组中,执行该类的 run 函数。而在 run 函数中即实现了将传
8、入的参数以字符串的形式连接起来。并返回最终形成的字符串。编译自定义函数 编译自定义函数 将编译后的 StringCat.class 放到 FineReport 的安装书目 WEB-INF 下面的 classes书目下,因为 StringCat.java 属于包 com.fr.function,所以 StringCat.class 须要放到 classescomfrfunction 书目下。注册自定义函数 注册自定义函数 生成该函数的类后须要在设计器中进行注册,才可以运用该函数。打开服务器|函数管理器,选择刚刚定义好了 StringCat 类,如下图 函数名称可以自定义,如这边定义为 StringCat; 同时可以添加该函数的运用说明,如上图所示的描述 运用自定义函数 运用自定义函数 注册好自定义函数后,制作报表时便可干脆运用了,运用方法与内置的函数是相同的。新建报表,定义两个报表参数 para1、para2,类型分别为字符串型与整形,默认值分别为空字符串与 0在空白报表的随意单元格里写入公式:=StringCat($para1,$para2)(留意:写入公式的时候在参数名前加$,表明这是运用的参数)点击分页预览在参数控件中,写入参数值如 para1 为:FineReport,para2 为:123。点击查询可以看到结果 说明 StringCat 公式可以正常运用啦。