◆ 实例请参考API实例 / 自定义类 / 自定义函数
接口类介绍:
l Function
类说明:
com.raqsoft.report.model.expression.Function是各功能函数的基类,它有抽象的calculate ()
方法需要用户实现。在润乾报表内置的功能函数中,典型的有获得系统当前时间的now()、将对象转换成字符型、转换过程中可以进行格式化的string()等。继承本类的函数的特点是运算过程不依赖于数据集。
主要方法:
语 法: public abstract java.lang.Object calculate(Context ctx)
参数说明: Context ctx-报表运行时的上下文
功能说明: 系统在运算报表时,将会自动调用calculate()来计算表达式,并返回计算结果。
示 例:
public Object calculate(Context context) {
// 这是调用用户的方法,你也可以调用你自己的方法
//return generateUUID();
//直接返回字符串nortan
return "nortan";
}
l DSFunction
类说明:
com.raqsoft.report.model.expression.DSFunction是各数据集操作函数的基类,它由Function继承而来,主要完成对数据集的操作。润乾报表的内置函数典型的有:对从当前数据组中选取符合条件记录的datasetName.select( <select_exp>[, desc_exp, filter_exp, sort_exp] )函数、根据分组表达式,从数据集中选出一组组集的datasetName.group( <selectExp>, <filterExp> )函数等。它的特点是运算过程中,必须依赖于数据集。
主要方法:
语 法: public abstract java.lang.Object calculate()
功能说明: 与Function类的calculate()同
语 法: public void setDS(DataSet ds)
功能说明: 设置所操作的数据集对象
示 例:
DataSet ds = getDataSet();//getDataSet方法具体实现略,取得数据集
//设置数据集,并取得数据集操作对象Group
this.setDs( ds );
Group group = this.ds.getCurrentGroup();
l 其它重要类
在自定义函数中,常常需要输入一定的参数进行运算,如在=count2(B2{})中,B2{}是一个参数,它表达由B2单元格扩展出来的集合。参数实际上就是一个表达式,表达式在程序中用类com.raqsoft.report.model.expression.Expression来表示。它有一个重要的方法:
语 法: public java.lang.Object calculate(Context ctx)
功能说明: 运算参数表达式。
参数说明: ctx - 运算报表时的上下文环境变量
Returns: 运算结果
在自定义函数的例子中我们看到了Expression的计算结果还要通过Variant2的静态方法getValue()来获取实际的值,因为每个表达式Expression和Node计算后都是一个结构,可能是单元格ICell,可能是数据组Group,可能是数据行Row,还有很多种可能,Variant2.getValue()的意思就是取Expression计算后存储于特定结构中的值。