自定义函数

实例请参考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()来获取实际的值,因为每个表达式ExpressionNode计算后都是一个结构,可能是单元格ICell,可能是数据组Group,可能是数据行Row,还有很多种可能,Variant2.getValue()的意思就是取Expression计算后存储于特定结构中的值。