本帖最后由 加菲喵 于 2015-9-10 16:38 编辑
二次开发 >> 引擎API >> 自定义函数>>自定义函数开发过程
1. 问题描述
FineReport已经提供了大量的自带函数,在正常情况下足够满足用户的报表制作需求,但是在一些特殊领域,可能需要一些特殊的函数,在这种情况下,FineReport提供了自定义函数机制,可以由用户根据业务需要自己来定义一些函数。
FineReport函数定义规则:Functionname(Para,Para,...),其中Functionname为函数名,Para为参数。
在FineReport中,每一个函数都被定义成一个类,这个类必须要实现Function这个接口,在运算的时候首先通过函数名反射取得这个类,然后调用它的run(Object[] agrs)方法。下面以num这个函数为例。
2. 实现步骤
2.1 编写函数代码
- package com.fr.function;
- import com.fr.script.AbstractFunction;
- public class stradd extends AbstractFunction {
- public Object run(Object[] args) {
- String result = "";
- Object para;
- for (int i = 0; i < args.length; i++) {
- para = args[i];
- result += para.toString();
- }
- return result;
- }
- }
复制代码 对于复杂函数,可以在java开发工具(idea,eclipse等)中测试通过后,形成完整java代码
2.2 编译自定义函数
① 通过java开发工具(idea,eclipse等)编译成class 文件,此处不做编译赘述 myeclipse实现java文件编译
将java文件复制到src目录下
根据提示一步步加载引用直至不报错
工程右键 属性 添加jar引用
保存java文件后,工作目录下bin文件夹中会有class文件,即编译成功。
② 通过设计器进行编译(此方式要求本地cmd下javac 编译正常不会报错)
新增一个自定义函数名 stradd
类名 com.fr.function.stradd
然后点击编辑,将编写好的代码复制到编辑框中,注意保持格式与系统提示的一致
确认无误后,点击编译,提示编译成功表示编译已成功,
此路径下将生成stradd.class文件
最后点击保存,退出自定义函数编辑界面。
2.4 使用自定义函数
注册好自定义函数后,制作报表时便可直接使用了,使用方法与内置的函数是相同的。
定义两个报表参数p1、p2、p3,类型为字符串型,默认值分别为“FineReport”“8.0” “[完美版本]”
然后在单元格输入如下公式
=stradd($p1,$p3,$p2)
连接是按参数的顺序进行连接的,如果需要额外的链接符,类似下面的写法
预览效果
|