`

报表开发之自定义函数

阅读更多

对于报表开发,很多情况下,自带的函数就能满足大部分用户的报表制作需求,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;
	}
}

 

 实现步骤

 

 

编写自定义函数

下面以一个简单的自定义函数例子来说明使用自定义函数。我们定义一个函数StringCat,他的作用是把所有的参数以字符串的形式连接起来。

StringCat函数使用规则为StringCat(Para,Para,Para…….);

其中Para为该函数的参数,个数不限。

由概述可知AbstractFunction实现了Function这个接口,因此StringCat可以直接继承AbstractFunction类,完整代码如下:

package com.fr.function;

import com.fr.script.AbstractFunction;

public class StringCat 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;
	}
}

 这里要注意,使用函数StringCat(Para,Para,Para…..)时,根据函数名取得运算该函数的类StringCat,并将参数传入类中的args对象数组中,执行该类的run函数。

而在run函数中即实现了将传入的参数以字符串的形式连接起来。并返回最终形成的字符串。

编译自定义函数

将编译后的StringCat.class放到FineReport的安装目录WEB-INF下面的classes目录下,因为StringCat.java属于包com.fr.function,所以StringCat.class需要放到classes\com\fr\function目录下。

注册自定义函数

生成该函数的类后需要在设计器中进行注册,才可以使用该函数。打开服务器|函数管理器,选择刚刚定义好了StringCat类,如下图

函数名称可以自定义,如这边定义为StringCat;

同时可以添加该函数的使用说明,如上图所示的描述

使用自定义函数

注册好自定义函数后,制作报表时便可直接使用了,使用方法与内置的函数是相同的。

新建报表,定义两个报表参数para1、para2,类型分别为字符串型与整形,默认值分别为空字符串与0

在空白报表的任意单元格里写入公式:=StringCat($para1,$para2)(注意:写入公式的时候在参数名前加$,表明这是使用的参数)

点击分页预览在参数控件中,写入参数值如para1为:FineReport,para2为:123。

 

点击查询可以看到结果

 

说明StringCat公式可以正常使用啦。



0
0
分享到:
评论
1 楼 putaomeizi 2016-08-11  
谁能用 ActiveReports 做个这样的http://www.gcpowertools.com.cn/products/activereports_overview.htm

相关推荐

    java报表API源代码(程序数据集、自定义函数和导出API)

    Java报表API源代码主要涵盖了FineReport工具的程序数据集、自定义函数和导出API的实现,旨在帮助开发者深入了解报表工具的内部工作原理,掌握二次开发技能,以应对各种个性化的业务需求。FineReport是一款强大的Java...

    通过groovy自定义函数实现提取明细表字段至主表字段.rar

    在自定义函数中,我们可以利用Groovy的面向对象特性,定义类和方法来处理明细表和主表的数据交互。 2. **数据访问**:Groovy可以方便地与数据库进行交互,通过JDBC API或者ORM框架(如Hibernate)来查询明细表和主...

    VBA_Excel自定义函数大全

    ### VBA_Excel自定义函数大全 #### 一、引言 在日常工作中,Microsoft Excel 是一款非常重要的工具,尤其对于需要处理大量数据的人来说更是如此。为了提高工作效率,利用VBA(Visual Basic for Applications)编写...

    excel中161个VBA_自定义函数(超级实用)

    ### Excel VBA自定义函数详解 #### 1. 返回Column英文字 此函数用于返回Excel工作表中的列字母,例如A、B、C等。在处理大量数据时,特别是需要引用特定列的数据时,该函数提供了便利性。 #### 2. 查询某一值第num...

    金蝶EAS增加自定义取数公式范例.pdf

    金蝶EAS是一款针对大型企业级应用的全面企业管理软件,其强大的自定义功能为企业提供了灵活的数据处理和报表生成能力。在“金蝶EAS增加自定义取数公式范例”中,我们关注的核心知识点是如何利用EAS BOS v5.9版本及...

    C#完全自定义报表源码

    C#中的Linq和自定义函数可以用来实现这些操作。 3. **报表模型**:这是报表结构的定义,包含了报表的布局、样式、字段等信息。开发人员可能需要创建自定义类或使用XML来定义报表模型。 4. **报表渲染**:根据报表...

    pb 自定义报表源码

    8. **自定义函数库**:为了复用代码,开发者可能创建了自定义函数库,用于处理报表中的通用任务,比如日期处理、字符串操作等。 这个压缩包中的"×Ô¶¨Ò屨±í"和"自定义报表"文件可能就是实现了上述功能的...

    UReport2是一款高性能的Java报表引擎提供完善的基于网页的报表设计器可快速做出各种复杂的中式报表

    总的来说,UReport2作为Java开发中的一个重要工具,以其便捷的网页设计器、高性能的报表引擎和丰富的功能,为企业级报表开发提供了强大支持。对于Java开发者而言,掌握UReport2的使用将有助于提升项目中的报表设计和...

    SAP ALV报表开发指南.pdf

    在ALV报表开发中,需要了解相关的函数,例如REUSE_ALV_GRID_DISPLAY函数、REUSE_ALV_COMMENTARY_WRITE函数、REUSE_ALV_EVENTS_GET函数、REUSE_ALV_FIELDCATALOG_MERGE函数等,这些函数可以帮助开发者更方便地实现...

    Excel-VBA宏编程实例源代码-自定义函数-计算固定资产折旧.zip

    在这个"Excel-VBA宏编程实例源代码-自定义函数-计算固定资产折旧.zip"压缩包中,包含了一个具体的实例,即如何使用VBA编写自定义函数来计算固定资产的折旧值。 固定资产折旧是企业财务会计中的一个重要概念,用于...

    水晶报表开发手册

    《水晶报表开发手册》是一本专注于水晶报表(Crystal Reports)开发的专业指南,它在IT行业中备受推崇,被誉为“最流行的水晶报表开发手册”。水晶报表是Business Objects公司(现为SAP的一部分)开发的一款强大的报告...

    报表开发框架整理

    ### 报表开发框架整理 #### 一、Wabacus框架详解 Wabacus作为一款专为JavaEE设计的报表开发框架,其核心优势在于极大简化了数据展示、编辑及表单处理等常见任务的开发流程。通过面向声明的开发模式,Wabacus能够...

    Excel-VBA宏编程实例源代码-自定义函数-提取商品名称中汉字.zip

    在这个“Excel-VBA宏编程实例源代码-自定义函数-提取商品名称中汉字.zip”压缩包中,包含了一个具体的应用示例,即如何通过VBA宏来编写自定义函数,专门用于从商品名称中提取出汉字部分。这个功能对于处理大量含有中...

    自定义窗口预览报表

    在IT行业中,自定义窗口预览报表是一种常见的需求,特别是在系统开发中,它能提供更加灵活和个性化的数据展示方式,提升用户体验。本模块的核心是利用Visual FoxPro(VFP)进行报表设计与预览,避免使用VFP自带的...

    自定义报表工具.zip

    在功能扩展性上,DevExpress的报表工具支持自定义函数和脚本,开发者可以通过编写C#或VB.NET代码,实现更高级的计算逻辑、数据处理和交互功能。同时,还可以添加自定义控件,增强报表的交互性和用户体验。 至于...

    pb自定义报表生成源码

    3. **计算字段与函数**:自定义报表可能需要一些计算字段,如总计、平均值或百分比,源码中会有对应的计算逻辑。 4. **事件处理**:PB支持事件驱动编程,源码中可能会有对用户交互事件(如点击、双击)的响应函数,...

    EBS 多sheet页Excel动态报表开发过程

    标题中的“EBS多sheet页Excel动态报表开发过程”指的是在企业资源规划系统(Enterprise Business Suite,简称EBS)中创建能够根据数据变化自动更新、包含多个工作表(sheet)的Excel报表的过程。EBS是Oracle公司提供...

    U8编写自定义报表的三种方法

    报表设计器适合快速创建简单的报表,二次开发适合有编程基础且需要高级功能的用户,而接口开发与集成则更适合那些希望充分利用已有工具的企业。在实际操作中,可根据具体需求和资源状况,灵活选择适合自己的方式,以...

    自定义报表样例

    Java作为一门跨平台的编程语言,其丰富的库和框架为开发自定义报表提供了广泛支持。在这种环境中,开发者可以利用Java的灵活性和强大的处理能力来创建复杂的数据分析和可视化工具。描述中提到的"采用Excel的习惯来...

    PB9自定义报表或报打

    3. **表达式和函数**:在报表设计中,可以使用表达式和内置函数对数据进行计算、转换,如求和、平均值、条件判断等,以增强报表的计算能力。 4. **分组和汇总**:对于大量数据,可以进行分组和汇总操作,例如按类别...

Global site tag (gtag.js) - Google Analytics