birt报表小技巧

时间:2022-12-28 00:15:10

Birt设计小技巧

1设置table隔行变色
新建table,选择表格,点script,在onprepare事件里写:count=0;
再选择明细行,在明细行script oncreate方法里写:
count++;
if(count ==0){
style.pageBreakAfter ="Always"; //设置每页显示10
}
if(count%2 !=0){
style.setBackgroundColor("white");
}else{
style.setBackgroundColor("#123456");
}


2dataset里写上
select *
from CLASSICMODELS.CUSTOMERS
where CUSTOMERNUMBER = ?

参数绑定到自建立的参数:no,
dataset beforeopen里设置:
var no ="103";
reportContext.setParameterValue("no",no);
这样就可以设置报表的参数值了。


3birt动态参数的处理
(点击创建好的Data Set,然后点击右侧Data SetScript页面,在beforeOpen里面写入脚本)
本例实现根据用户选择不同的查询条件查询显示报表。
按我的报表业务来演示。
我的报表要查询条件是起始时间,结束时间,站点,有票,没票,55以上,55以下
分别设置报表参数对应这几个查询条件。start,end,station,ticketed,unticketed,up55t,below55t
其中有票,没票,55以上,55以下只能选择一种情况
页面代码我就不写了,大概就是如果选择哪个就设置哪个值为1,
在报表的数据集的script里写上:
var condition = "and 1=1 order by Weight desc"; 
var start = reportContext.getParameterValue("start");
var end = reportContext.getParameterValue("end");
var ticket = reportContext.getParameterValue("ticketed");
var unticket = reportContext.getParameterValue("unticketed");
var up55t = reportContext.getParameterValue("up55t");
var below55t = reportContext.getParameterValue("below55t");
var st = reportContext.getParameterValue("station");
var station = "and DetectionStationNo = '"+ st +"'";

if(st == "all"){
       station = "and 1=1";
}


if(ticket==1){
condition = " and VehClass=1 order by Weight desc";
}
if(unticket==1){
condition = " and VehClass=0 order by Weight desc ";
}
if(up55t==1){
condition = " and Weight>55000  order by OverPercent desc";
}
if(below55t==1){
condition = " and not Weight>=55000 order by Weight desc";
}
然后就是this.queryText =" ... .." + condition;


当然有时候我们可能是一种情况就是选择一类,也可以选择全部,比如上面的站点,可能选择所有站点,那就在页面如果用户选择全部,就个特定值过来,我是指定如果是全部,就不加这个条件,1=1
大概就这些,大家自己试试。

4表格显示行号
在表格明细行的一列,添加数据,然后写上 row.__rownum+1;数据类型选整数。

5birt中打印测试
使用保存到文件的形式,代码如下:

importPackage( Packages.java.io );
out = new PrintWriter( new FileWriter( "c:/test/info.txt", true ) );
out.println( "println "+ 变量);
out.close();

当然这里没有判断创建文件,先建立个文件便是,或者也可以判断文件存在否,不存在创建一下。

6birt中写入Java代码
importPackage( Packages.java.io );
out = new PrintWriter( new FileWriter( "c:/test/info.txt", true ) );
out.println( "println "+ 变量);
out.close();
这样可以在birt里面写入所有想要的Java代码


7脚本里面的注释
//或者

8自定义jar
birt中可以加入自定义的jar
右键点击项目 Properties -> Report Design -> Classpath ->按钮[Add External JARs]
然后加入自己的jar 
birtScript里面引入:
importPackage( Packages.java.io );
例子:我写了一个com.wanmei.birt.test.Birt.java的类,如下
public class Birt{
public String getThreadName(){
return Thread.currentThread().getName() + "-thread";
}
}
birtscript中写入
importPackage( Packages.java.io );
importPackage( Packages.com.wanmei.birt.test );
var birt = Birt();
var threadName = birt.getThreadName();

out = new PrintWriter( new FileWriter('c:/info.txt', true ) );
out.println('threadName: ' + threadName);
out.close();
这样就可以在文件 c:/info.txt中看见打印的内容。