package com.fr.demo;
import com.fr.report.script.NormalFunction;
public class stringcat extends NormalFunction { public Object run(Object[] args) { String result = \; Object para;
for(int i = 0;i
return result; }
} 说明:
使用函数STRINGCAT(Para,Para,Para…..)时,根据函数名取得运算该函数的类STRINGCAT,并将参数传入类中的args对象数组中,执行该类的run函数。
而在run函数中即实现了将传入的参数以字符串的形式连接起来。并返回最终形成的字符串。
2. 编译自定义函数
将编译后的STRINGCAT.CLASS放到FineReport的安装目录WEB-INF下面的classes目录下,因为STRINGCAT.JAVA属于包com.fr.demo,所以STRINGCAT.CLASS需要放到classes\\com\\fr\\demo目录下。
3. 注册自定义函数
生成该函数的类后需要在设计器中进行注册,才可以使用该函数。打开服务器|函数管理器,选择刚刚定义好了STRINGCAT类,如下图
函数名称可以自定义,如这边定义为Stringcat; 同时可以添加该函数的使用说明,如上图所示的描述 4. 使用自定义函数
注册好自定义函数后,制作报表时便可直接使用了,使用方法与内置的函数是相同的。 4.1 新建报表
4.2 定义两个报表参数para1、para2,类型分别为字符串型与整形,默认值分别为空字符
串与0
在空白报表的任意单元格里写入公式:=Stringcat($para1,$para2)(注意:写入公式的时候在参数名前加$,表明这是使用的参数)
点击预览会弹出填写参数的对话框,写入参数值如下
确定后可以看到结果
说明STRINGCAT公式可以正常使用啦。
SubSection函数之Oracle查询参数个数限制
如有一个参数查询语句:SELECT * FROM Stscore WHERE Stdno IN (${studentno})
实际情况中studenno可能是根据其他条件查询出来的结果列表,也许超过1000个学号,如最终为
SELECT * FROM Stscore WHERE Stdno IN (10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009, 10010, 10011, 10012, 10013, ……,10989, 10990, 10991, 10992, 10993, 10994, 10995, 10996, 10997, 10998, 10999, 11000,11001)
直接执行上述语句,由于studentno参数的个数超过了1000个,数据库端将报ORA-01795的错误,如下图
如何解决该问题呢?此时,如果将studentno参数分割成多段,如以500为单位进行分割,将上述11001个参数值分为3部分,形成3条查询条件,便可避免该问题。
即变为SELECT * FROM Stscore WHERE Stdno IN (10001,10002,…,10500) or Stdno IN (10501,10502,…,11000) or Stdno IN (11001)
FineReport并没有实现该功能的内置函数,对于这种情况,我们可以自定义一个SubSection分组函数
该函数的使用规则为:SubSection(para)
参数para为字符串形式,该函数的作用即将字符串参数以500为单位进行分割,并返回分割后形成的数组。 完整代码如下: package com.fr.demo;
import com.fr.report.script.NormalFunction; import com.fr.report.script.core.FArray;
public class SubSection extends NormalFunction { public Object run(Object[] args) {
//获取第一个对象,即取得传入的参数 Object para = args[0];
String parastr = para.toString(); //由于是复选参数,因此要去掉前后的\和\
if(parastr.startsWith(\ parastr = parastr.substring(1, parastr.length()-1); }
//将字符串转为\分割的数组 String test[] = parastr.split(\ int len = test.length; int loopnum = len/500; if(lenP0!=0){ loopnum +=1; } ;
//返回的值是数组,需要定义成我们内部的类型FArray FArray result = new FArray(); String str = \ int k = 1;
for(int i=0;i for(int j=500*i;j<500*(i+1) && j str += test[j]; } k++; } //每500个形成一组并在每组外部加上\和\ str = \ result.add(str); str = \ k=1; } return result; } } 注:当返回有多个值,并且保存在数组中时,定义返回值的类型必须是FineReport内部的数组类型FArray,才能正确返回结果。 编译自定义函数 将编译后的SubSection.class放到FineReport的安装目录WEB-INF下面的classes目录下,因为SubSection.java属于包com.fr.demo,所以SubSection.class需要放到classes\\com\\fr\\demo目录下。 注册并使用自定义函数 注册好定义的函数后便可进行使用了,注册与使用方法在上一节简单的自定义函数中已经介绍过,在此就不详细描述了。由于实际获得的参数格式不定,可以根据具体情况调整java程序。 如何使用UPCBarCode 条形码自问世以来,为适应多种需要,产生了众多的编码系统。但目前得到国际公认用于商品包装的主要有两种,即UPC和EAN。这两种编码系统属同一类型,每个字符均由数条黑白相间的条纹组成,中间有两条窄条纹向下伸出少许,将条形码分成左右两部分。这两种条形码虽然只能表示0到9,十个数字,但具有高度的查核能力,扫描操作简单可靠。其中UPC条形码是由美国和加拿大共同组织的“统一编码委员会”(Universal Code Council,UCC)选定以IBM公司提出的 Dalta-Distance为基础而通过的。UPC码(Uniform Product Code)作为美、加产品统一的标识符号。因此,我国产品若要销往美国,加拿大,则应使用UPC码,而出口到其他国家和地区则需使用EAN码。 UPC的构成:由11位数字的通用产品代码和1位校验码组成。产品代码的第1位数字为编码系统字符;中间5位数字表示制造商号,后5位数字为产品代码。 FineReport中自带有EAN型编码,但却没有UPC条形码,此时若您希望在报表中使用UPC编码的条形码应该怎么办呢?FineReport可以通过自定义函数引用第三方包来生成UPC编码的条形码并显示出来,如输入数值12345678912,将会得到以下UPC条形码: 实现步骤如下: 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库FineReport报表软件API源代码之程序数据集、自定义函数和导出API(3)在线全文阅读。
相关推荐: