自定义函数插件开发
前言
通常在用到FineReport的自定义函数的时候,我们可以通过编译class之后通过函数管理器添加自定义函数,但是这样做有三个缺点:
1. 维护麻烦,每次更新函数,都需要找到class文件所在的目录之后用新的class文件替换掉;
2. 自定义函数缺少该函数的使用说明,不知道的人无法正确的使用该函数,提高了沟通成本;
3. 传播不方便,在一台机器上使用的自定义函数,如果在另外一台机器上也要使用,需要找到需要拷贝的class文件和functions.xml文件;
为了解决这三个缺点,在FineReport V8.0中提供了函数定义的接口,可以通过插件来添加自定义函数。
开发过程
关键接口和xml属性
com.fr.stable.fun.FunctionDefineProvider
接口属性:
| 配置属性名 | 描述 |
|---|---|
| class | 自定义函数类名 |
| name | 函数名 |
| description | 函数使用描述 |
使用方式
<FunctionDefineProvider class="com.fr.plugin.function.MyFunction" name="my" description="函数的描述"/>
plugin.xml内容HTML/XML代码
<?xml version="1.0" encoding="UTF-8" standalone="no"?><plugin>
<id>com.fr.plugin.function.collection</id>
<name><![CDATA[自定义函数集合]]></name>
<active>yes</active>
<version>1.1</version>
<env-version>8.0</env-version>
<jartime>2015-09-10</jartime>
<vendor>author</vendor>
<description><![CDATA[自定义函数插件]]></description>
<change-notes><![CDATA[无]]></change-notes>
<extra-core>
<FunctionDefineProvider class="com.fr.plugin.function.MyFunction" name="my" description="拼接两个参数。调用方式:=my(C4, C5)"/>
<FunctionDefineProvider class="com.fr.plugin.function.YourFunction" name="you" description="我的函数"/> </extra-core> </plugin>
实现内容(拼接两个字符串)
import com.fr.general.GeneralUtils;
import com.fr.script.AbstractFunction;
import com.fr.stable.ArrayUtils;
import com.fr.stable.Primitive;
public class MyFunction extends AbstractFunction {
@Override
public Object run(Object[] args) {
if (ArrayUtils.getLength(args) < 2) {
return Primitive.ERROR_VALUE;
}
return GeneralUtils.objectToString(args[0]) + GeneralUtils.objectToString(args[1]);
}
}
插件打包和安装
在插件工程目录下执行,详细如何打包插件可查看ANT打包
ant -f build.xml jar
后,会获取到插件安装包,通过设计器安装该插件后,可以在公式编辑器中的“插件函数”项下看到插件函数了
附件列表
主题: 二次开发

