你的位置:首页 > 软件开发 > Java > 报表开发之自定义函数

报表开发之自定义函数

发布时间:2016-07-21 14:00:08
对于报表开发,很多情况下,自带的函数就能满足大部分用户的报表制作需求,FineReport也不例外。但是在一些特殊领域,可能需要一些特殊的函数,在这种情况下,FineReport提供了自定义函数机制,可以由用户根据业务需要自己来定义一些函数,但这些函数必须满足函数定义规则。先来了 ...

报表开发之自定义函数

对于报表开发,很多情况下,自带的函数就能满足大部分用户的报表制作需求,FineReport也不例外。但是在一些特殊领域,可能需要一些特殊的函数,在这种情况下,FineReport提供了自定义函数机制,可以由用户根据业务需要自己来定义一些函数,但这些函数必须满足函数定义规则。

先来了解一下FineReport的函数定义规则:Functionname(Para,Para,...),其中Functionname为函数名,Para为参数。

每一个函数都被定义成一个类,这个类必须要实现Function这个接口,在运算的时候首先通过函数名反射取得这个类,然后调用它的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+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++) {			if (args[i] == null) {				continue;			}			result += parseObject(args[i]);		}		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 (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;	}}

原标题:报表开发之自定义函数

关键词:函数

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。