小厂,用的开源birt做报表,不太符合用户对报表的操作习惯。
用户对报表希望:
- 自定义显示、隐藏列;
- 自定义报表列的显示顺序;
- 自定义报表列宽度;
- 按用户选择的列对表格数据排序
- 冻结表头
自定义定义显示列等
解决这类问题,有3种思路,
第一种,是全动态的,根据设置动态生成报表文件。
第二种:在beforefactory等函数当中,动态修改相关对象及其属性
第三种:设置相关函数,绑定在特定的元素上。
我们先采取第2种思路实现。
实现列的排序的做法:关键是通过birt设计句柄,获得明细区单元格及头部区单元格,把特定的单元格移动到指定位置,为简单起见,采取全部列重排方式实现。
importPackage(Packages.net.sf.json);
importPackage(Packages.java.io );
importPackage(Packages.org.eclipse.birt.chart.model.data.impl);
importPackage(Packages.org.eclipse.birt.chart.model.component.impl);
importPackage(Packages.org.eclipse.birt.chart.model.type.impl);
importPackage(Packages.org.eclipse.birt.chart.model.attribute);
importPackage(Packages.org.eclipse.birt.chart.model.attribute.impl);
importPackage(Packages.org.eclipse.birt.report.model.api.elements.table);
//******获取表名
var table1= reportContext.getDesignHandle().findElement("table1");
/************排序明细***************/
var details=table1.getDetail();
var detail1=details.getContents().get(0);
//获取明细行的所有单元格
var dcells=detail1.getCells();
//通过前端参数 列出所有明细单元格--获取的是初始位置
var dcell1=dcells.get(position1);//position1 是原来的位置
decell1.moveTo(pos2); //把cell1 挪动到pos2指定位置
......
显示、隐藏列,通过报表设计元素获取表格的列对象,代码直接操作列对象的属性即可。
var table1= reportContext.getDesignHandle().findElement("table1");
var cols=table1.getColumns();
cols.get(pos1).setProperty("display", "none");
设置报表的宽度:
var dynamicHeight=20+"in"; //don't forget the unit
reportContext.getDesignHandle().findMasterPage("Simple MasterPage").setProperty("width", dynamicHeight);
reportContext.getDesignHandle().findMasterPage("Simple MasterPage").pageType="custom";
按特定列对报表数据排序,需要在dataset脚本的beforeOpen中,动态拼接sql
this.queryText ="select * from ("+this.queryText+") order by "+col+" "+sort;
fina_income_detail11.rptdesign文件中,beforefactory方法详细代码如下:
//******引入json包
importPackage(Packages.net.sf.json);
importPackage(Packages.java.io );
importPackage(Packages.org.eclipse.birt.chart.model.data.impl);
importPackage(Packages.org.eclipse.birt.chart.model.component.impl);
importPackage(Packages.org.eclipse.birt.chart.model.type.impl);
importPackage(Packages.org.eclipse.birt.chart.model.attribute);
importPackage(Packages.org.eclipse.birt.chart.model.attribute.impl);
importPackage(Packages.org.eclipse.birt.report.model.api.elements.table);
//******获取、转换 前端 传参
var colopt=params["colopt"].value;
if(colopt!=null&&colopt!=""&&colopt!="null"){
var colArr= JSONArray.fromObject(colopt);
//colArr.getJSONObject(0) 存放的是列的id
var id1=colArr.getJSONObject(0).get("i")[0];
var id2=colArr.getJSONObject(0).get("i")[1];
var id3=colArr.getJSONObject(0).get("i")[2];
var id4=colArr.getJSONObject(0).get("i")[3];
var id5=colArr.getJSONObject(0).get("i")[4];
var id6=colArr.getJSONObject(0).get("i")[5];
var id7=colArr.getJSONObject(0).get("i")[6];
var id8=colArr.getJSONObject(0).get("i")[7];
var id9=colArr.getJSONObject(0).get("i")[8];
var id10=colArr.getJSONObject(0).get("i")[9];
var id11=colArr.getJSONObject(0).get("i")[10];
var id12=colArr.getJSONObject(0).get("i")[11];
var id13=colArr.getJSONObject(0).get("i")[12];
var id14=colArr.getJSONObject(0).get("i")[13];
var id15=colArr.getJSONObject(0).get("i")[14];
var id16=colArr.getJSONObject(0).get("i")[15];
var id17=colArr.getJSONObject(0).get("i")[16];
var id18=colArr.getJSONObject(0).get("i")[17];
var id19=colArr.getJSONObject(0).get("i")[18];
var id20=colArr.getJSONObject(0).get("i")[19];
var id21=colArr.getJSONObject(0).get("i")[20];
var id22=colArr.getJSONObject(0).get("i")[21];
var id23=colArr.getJSONObject(0).get("i")[22];
var id24=colArr.getJSONObject(0).get("i")[23];
var id25=colArr.getJSONObject(0).get("i")[24];
var id26=colArr.getJSONObject(0).get("i")[25];
var id27=colArr.getJSONObject(0).get("i")[26];
var id28=colArr.getJSONObject(0).get("i")[27];
var id29=colArr.getJSONObject(0).get("i")[28];
var id30=colArr.getJSONObject(0).get("i")[29];
var id31=colArr.getJSONObject(0).get("i")[30];
var id32=colArr.getJSONObject(0).get("i")[31];
var id33=colArr.getJSONObject(0).get("i")[32];
var id34=colArr.getJSONObject(0).get("i")[33];
var id35=colArr.getJSONObject(0).get("i")[34];
var id36=colArr.getJSONObject(0).get("i")[35];
var id37=colArr.getJSONObject(0).get("i")[36];
var id38=colArr.getJSONObject(0).get("i")[37];
var id39=colArr.getJSONObject(0).get("i")[38];
var id40=colArr.getJSONObject(0).get("i")[39];
var id41=colArr.getJSONObject(0).get("i")[40];
var id42=colArr.getJSONObject(0).get("i")[41];
var id43=colArr.getJSONObject(0).get("i")[42];
var id44=colArr.getJSONObject(0).get("i")[43];
var id45=colArr.getJSONObject(0).get("i")[44];
var id46=colArr.getJSONObject(0).get("i")[45];
//colArr.getJSONObject(1) 存放的是列的位置
var pos1=colArr.getJSONObject(1).get("p")[0];
var pos2=colArr.getJSONObject(1).get("p")[1];
var pos3=colArr.getJSONObject(1).get("p")[2];
var pos4=colArr.getJSONObject(1).get("p")[3];
var pos5=colArr.getJSONObject(1).get("p")[4];
var pos6=colArr.getJSONObject(1).get("p")[5];
var pos7=colArr.getJSONObject(1).get("p")[6];
var pos8=colArr.getJSONObject(1).get("p")[7];
var pos9=colArr.getJSONObject(1).get("p")[8];
var pos10=colArr.getJSONObject(1).get("p")[9];
var pos11=colArr.getJSONObject(1).get("p")[10];
var pos12=colArr.getJSONObject(1).get("p")[11];
var pos13=colArr.getJSONObject(1).get("p")[12];
var pos14=colArr.getJSONObject(1).get("p")[13];
var pos15=colArr.getJSONObject(1).get("p")[14];
var pos16=colArr.getJSONObject(1).get("p")[15];
var pos17=colArr.getJSONObject(1).get("p")[16];
var pos18=colArr.getJSONObject(1).get("p")[17];
var pos19=colArr.getJSONObject(1).get("p")[18];
var pos20=colArr.getJSONObject(1).get("p")[19];
var pos21=colArr.getJSONObject(1).get("p")[20];
var pos22=colArr.getJSONObject(1).get("p")[21];
var pos23=colArr.getJSONObject(1).get("p")[22];
var pos24=colArr.getJSONObject(1).get("p")[23];
var pos25=colArr.getJSONObject(1).get("p")[24];
var pos26=colArr.getJSONObject(1).get("p")[25];
var pos27=colArr.getJSONObject(1).get("p")[26];
var pos28=colArr.getJSONObject(1).get("p")[27];
var pos29=colArr.getJSONObject(1).get("p")[28];
var pos30=colArr.getJSONObject(1).get("p")[29];
var pos31=colArr.getJSONObject(1).get("p")[30];
var pos32=colArr.getJSONObject(1).get("p")[31];
var pos33=colArr.getJSONObject(1).get("p")[32];
var pos34=colArr.getJSONObject(1).get("p")[33];
var pos35=colArr.getJSONObject(1).get("p")[34];
var pos36=colArr.getJSONObject(1).get("p")[35];
var pos37=colArr.getJSONObject(1).get("p")[36];
var pos38=colArr.getJSONObject(1).get("p")[37];
var pos39=colArr.getJSONObject(1).get("p")[38];
var pos40=colArr.getJSONObject(1).get("p")[39];
var pos41=colArr.getJSONObject(1).get("p")[40];
var pos42=colArr.getJSONObject(1).get("p")[41];
var pos43=colArr.getJSONObject(1).get("p")[42];
var pos44=colArr.getJSONObject(1).get("p")[43];
var pos45=colArr.getJSONObject(1).get("p")[44];
var pos46=colArr.getJSONObject(1).get("p")[45];
//colArr.getJSONObject(1) 存放的是这个位置的列是否显示
var show1=colArr.getJSONObject(2).get("s")[0];
var show2=colArr.getJSONObject(2).get("s")[1];
var show3=colArr.getJSONObject(2).get("s")[2];
var show4=colArr.getJSONObject(2).get("s")[3];
var show5=colArr.getJSONObject(2).get("s")[4];
var show6=colArr.getJSONObject(2).get("s")[5];
var show7=colArr.getJSONObject(2).get("s")[6];
var show8=colArr.getJSONObject(2).get("s")[7];
var show9=colArr.getJSONObject(2).get("s")[8];
var show10=colArr.getJSONObject(2).get("s")[9];
var show11=colArr.getJSONObject(2).get("s")[10];
var show12=colArr.getJSONObject(2).get("s")[11];
var show13=colArr.getJSONObject(2).get("s")[12];
var show14=colArr.getJSONObject(2).get("s")[13];
var show15=colArr.getJSONObject(2).get("s")[14];
var show16=colArr.getJSONObject(2).get("s")[15];
var show17=colArr.getJSONObject(2).get("s")[16];
var show18=colArr.getJSONObject(2).get("s")[17];
var show19=colArr.getJSONObject(2).get("s")[18];
var show20=colArr.getJSONObject(2).get("s")[19];
var show21=colArr.getJSONObject(2).get("s")[20];
var show22=colArr.getJSONObject(2).get("s")[21];
var show23=colArr.getJSONObject(2).get("s")[22];
var show24=colArr.getJSONObject(2).get("s")[23];
var show25=colArr.getJSONObject(2).get("s")[24];
var show26=colArr.getJSONObject(2).get("s")[25];
var show27=colArr.getJSONObject(2).get("s")[26];
var show28=colArr.getJSONObject(2).get("s")[27];
var show29=colArr.getJSONObject(2).get("s")[28];
var show30=colArr.getJSONObject(2).get("s")[29];
var show31=colArr.getJSONObject(2).get("s")[30];
var show32=colArr.getJSONObject(2).get("s")[31];
var show33=colArr.getJSONObject(2).get("s")[32];
var show34=colArr.getJSONObject(2).get("s")[33];
var show35=colArr.getJSONObject(2).get("s")[34];
var show36=colArr.getJSONObject(2).get("s")[35];
var show37=colArr.getJSONObject(2).get("s")[36];
var show38=colArr.getJSONObject(2).get("s")[37];
var show39=colArr.getJSONObject(2).get("s")[38];
var show40=colArr.getJSONObject(2).get("s")[39];
var show41=colArr.getJSONObject(2).get("s")[40];
var show42=colArr.getJSONObject(2).get("s")[41];
var show43=colArr.getJSONObject(2).get("s")[42];
var show44=colArr.getJSONObject(2).get("s")[43];
var show45=colArr.getJSONObject(2).get("s")[44];
var show46=colArr.getJSONObject(2).get("s")[45];
//colArr.getJSONObject(3) 存放的是这个位置的列的宽度
var width1= colArr.getJSONObject(3).get("w")[0];
var width2= colArr.getJSONObject(3).get("w")[1];
var width3= colArr.getJSONObject(3).get("w")[2];
var width4= colArr.getJSONObject(3).get("w")[3];
var width5= colArr.getJSONObject(3).get("w")[4];
var width6= colArr.getJSONObject(3).get("w")[5];
var width7= colArr.getJSONObject(3).get("w")[6];
var width8= colArr.getJSONObject(3).get("w")[7];
var width9= colArr.getJSONObject(3).get("w")[8];
var width10= colArr.getJSONObject(3).get("w")[9];
var width11= colArr.getJSONObject(3).get("w")[10];
var width12= colArr.getJSONObject(3).get("w")[11];
var width13= colArr.getJSONObject(3).get("w")[12];
var width14= colArr.getJSONObject(3).get("w")[13];
var width15= colArr.getJSONObject(3).get("w")[14];
var width16= colArr.getJSONObject(3).get("w")[15];
var width17= colArr.getJSONObject(3).get("w")[16];
var width18= colArr.getJSONObject(3).get("w")[17];
var width19= colArr.getJSONObject(3).get("w")[18];
var width20= colArr.getJSONObject(3).get("w")[19];
var width21= colArr.getJSONObject(3).get("w")[20];
var width22= colArr.getJSONObject(3).get("w")[21];
var width23= colArr.getJSONObject(3).get("w")[22];
var width24= colArr.getJSONObject(3).get("w")[23];
var width25= colArr.getJSONObject(3).get("w")[24];
var width26= colArr.getJSONObject(3).get("w")[25];
var width27= colArr.getJSONObject(3).get("w")[26];
var width28= colArr.getJSONObject(3).get("w")[27];
var width29= colArr.getJSONObject(3).get("w")[28];
var width30= colArr.getJSONObject(3).get("w")[29];
var width31= colArr.getJSONObject(3).get("w")[30];
var width32= colArr.getJSONObject(3).get("w")[31];
var width33= colArr.getJSONObject(3).get("w")[32];
var width34= colArr.getJSONObject(3).get("w")[33];
var width35= colArr.getJSONObject(3).get("w")[34];
var width36= colArr.getJSONObject(3).get("w")[35];
var width37= colArr.getJSONObject(3).get("w")[36];
var width38= colArr.getJSONObject(3).get("w")[37];
var width39= colArr.getJSONObject(3).get("w")[38];
var width40= colArr.getJSONObject(3).get("w")[39];
var width41= colArr.getJSONObject(3).get("w")[40];
var width42= colArr.getJSONObject(3).get("w")[41];
var width43= colArr.getJSONObject(3).get("w")[42];
var width44= colArr.getJSONObject(3).get("w")[43];
var width45= colArr.getJSONObject(3).get("w")[44];
var width46= colArr.getJSONObject(3).get("w")[45];
//******获取表名 就是表格的名字
var table1= reportContext.getDesignHandle().findElement("table1");
/************排序明细***************/
//******获取表明细区
var details=table1.getDetail();
//获取明细区的第一行 (此表明细在设计器当中只有一行 )
var detail1=details.getContents().get(0);
//获取明细行的所有单元格
var dcells=detail1.getCells();
//通过前端参数 列出所有明细单元格--获取的是初始位置
var d1=dcells.get(id1);
var d2=dcells.get(id2);
var d3=dcells.get(id3);
var d4=dcells.get(id4);
var d5=dcells.get(id5);
var d6=dcells.get(id6);
var d7=dcells.get(id7);
var d8=dcells.get(id8);
var d9=dcells.get(id9);
var d10=dcells.get(id10);
var d11=dcells.get(id11);
var d12=dcells.get(id12);
var d13=dcells.get(id13);
var d14=dcells.get(id14);
var d15=dcells.get(id15);
var d16=dcells.get(id16);
var d17=dcells.get(id17);
var d18=dcells.get(id18);
var d19=dcells.get(id19);
var d20=dcells.get(id20);
var d21=dcells.get(id21);
var d22=dcells.get(id22);
var d23=dcells.get(id23);
var d24=dcells.get(id24);
var d25=dcells.get(id25);
var d26=dcells.get(id26);
var d27=dcells.get(id27);
var d28=dcells.get(id28);
var d29=dcells.get(id29);
var d30=dcells.get(id30);
var d31=dcells.get(id31);
var d32=dcells.get(id32);
var d33=dcells.get(id33);
var d34=dcells.get(id34);
var d35=dcells.get(id35);
var d36=dcells.get(id36);
var d37=dcells.get(id37);
var d38=dcells.get(id38);
var d39=dcells.get(id39);
var d40=dcells.get(id40);
var d41=dcells.get(id41);
var d42=dcells.get(id42);
var d43=dcells.get(id43);
var d44=dcells.get(id44);
var d45=dcells.get(id45);
var d46=dcells.get(id46);
//在排序前:先获取保存前端的初始排序序列
//排序:初始位置移动到新位置//如果写循环moveTo(),下次moveTo()获取的是上次moveTo()后的序列,而不是初始序列
d1.moveTo(pos1);
d2.moveTo(pos2);
d3.moveTo(pos3);
d4.moveTo(pos4);
d5.moveTo(pos5);
d6.moveTo(pos6);
d7.moveTo(pos7);
d8.moveTo(pos8);
d9.moveTo(pos9);
d10.moveTo(pos10);
d11.moveTo(pos11);
d12.moveTo(pos12);
d13.moveTo(pos13);
d14.moveTo(pos14);
d15.moveTo(pos15);
d16.moveTo(pos16);
d17.moveTo(pos17);
d18.moveTo(pos18);
d19.moveTo(pos19);
d20.moveTo(pos20);
d21.moveTo(pos21);
d22.moveTo(pos22);
d23.moveTo(pos23);
d24.moveTo(pos24);
d25.moveTo(pos25);
d26.moveTo(pos26);
d27.moveTo(pos27);
d28.moveTo(pos28);
d29.moveTo(pos29);
d30.moveTo(pos30);
d31.moveTo(pos31);
d32.moveTo(pos32);
d33.moveTo(pos33);
d34.moveTo(pos34);
d35.moveTo(pos35);
d36.moveTo(pos36);
d37.moveTo(pos37);
d38.moveTo(pos38);
d39.moveTo(pos39);
d40.moveTo(pos40);
d41.moveTo(pos41);
d42.moveTo(pos42);
d43.moveTo(pos43);
d44.moveTo(pos44);
d45.moveTo(pos45);
d46.moveTo(pos46);
/************排序表头***************/
//获取table1的表头区
var heads=table1.getHeader();
//获取table1的表头区的第一行(此表头有2行表头)
var head=heads.getContents().get(0);
//获取表头行的所有单元格
var hcells=head.getCells();
//通过前端参数列出所有单元格 初始位置
var h1=hcells.get(id1);
var h2=hcells.get(id2);
var h3=hcells.get(id3);
var h4=hcells.get(id4);
var h5=hcells.get(id5);
var h6=hcells.get(id6);
var h7=hcells.get(id7);
var h8=hcells.get(id8);
var h9=hcells.get(id9);
var h10=hcells.get(id10);
var h11=hcells.get(id11);
var h12=hcells.get(id12);
var h13=hcells.get(id13);
var h14=hcells.get(id14);
var h15=hcells.get(id15);
var h16=hcells.get(id16);
var h17=hcells.get(id17);
var h18=hcells.get(id18);
var h19=hcells.get(id19);
var h20=hcells.get(id20);
var h21=hcells.get(id21);
var h22=hcells.get(id22);
var h23=hcells.get(id23);
var h24=hcells.get(id24);
var h25=hcells.get(id25);
var h26=hcells.get(id26);
var h27=hcells.get(id27);
var h28=hcells.get(id28);
var h29=hcells.get(id29);
var h30=hcells.get(id30);
var h31=hcells.get(id31);
var h32=hcells.get(id32);
var h33=hcells.get(id33);
var h34=hcells.get(id34);
var h35=hcells.get(id35);
var h36=hcells.get(id36);
var h37=hcells.get(id37);
var h38=hcells.get(id38);
var h39=hcells.get(id39);
var h40=hcells.get(id40);
var h41=hcells.get(id41);
var h42=hcells.get(id42);
var h43=hcells.get(id43);
var h44=hcells.get(id44);
var h45=hcells.get(id45);
var h46=hcells.get(id46);
//排序:初始位置移动到新位置
h1.moveTo(pos1);
h2.moveTo(pos2);
h3.moveTo(pos3);
h4.moveTo(pos4);
h5.moveTo(pos5);
h6.moveTo(pos6);
h7.moveTo(pos7);
h8.moveTo(pos8);
h9.moveTo(pos9);
h10.moveTo(pos10);
h11.moveTo(pos11);
h12.moveTo(pos12);
h13.moveTo(pos13);
h14.moveTo(pos14);
h15.moveTo(pos15);
h16.moveTo(pos16);
h17.moveTo(pos17);
h18.moveTo(pos18);
h19.moveTo(pos19);
h20.moveTo(pos20);
h21.moveTo(pos21);
h22.moveTo(pos22);
h23.moveTo(pos23);
h24.moveTo(pos24);
h25.moveTo(pos25);
h26.moveTo(pos26);
h27.moveTo(pos27);
h28.moveTo(pos28);
h29.moveTo(pos29);
h30.moveTo(pos30);
h31.moveTo(pos31);
h32.moveTo(pos32);
h33.moveTo(pos33);
h34.moveTo(pos34);
h35.moveTo(pos35);
h36.moveTo(pos36);
h37.moveTo(pos37);
h38.moveTo(pos38);
h39.moveTo(pos39);
h40.moveTo(pos40);
h41.moveTo(pos41);
h42.moveTo(pos42);
h43.moveTo(pos43);
h44.moveTo(pos44);
h45.moveTo(pos45);
h46.moveTo(pos46);
/************分组行排序***************/
//获取合计行
var head1=heads.getContents().get(1);
//获取所有单元格:
var hgcells=head1.getCells();
//获取每一个单元格:
var hg1=hgcells.get(id1);
var hg2=hgcells.get(id2);
var hg3=hgcells.get(id3);
var hg4=hgcells.get(id4);
var hg5=hgcells.get(id5);
var hg6=hgcells.get(id6);
var hg7=hgcells.get(id7);
var hg8=hgcells.get(id8);
var hg9=hgcells.get(id9);
var hg10=hgcells.get(id10);
var hg11=hgcells.get(id11);
var hg12=hgcells.get(id12);
var hg13=hgcells.get(id13);
var hg14=hgcells.get(id14);
var hg15=hgcells.get(id15);
var hg16=hgcells.get(id16);
var hg17=hgcells.get(id17);
var hg18=hgcells.get(id18);
var hg19=hgcells.get(id19);
var hg20=hgcells.get(id20);
var hg21=hgcells.get(id21);
var hg22=hgcells.get(id22);
var hg23=hgcells.get(id23);
var hg24=hgcells.get(id24);
var hg25=hgcells.get(id25);
var hg26=hgcells.get(id26);
var hg27=hgcells.get(id27);
var hg28=hgcells.get(id28);
var hg29=hgcells.get(id29);
var hg30=hgcells.get(id30);
var hg31=hgcells.get(id31);
var hg32=hgcells.get(id32);
var hg33=hgcells.get(id33);
var hg34=hgcells.get(id34);
var hg35=hgcells.get(id35);
var hg36=hgcells.get(id36);
var hg37=hgcells.get(id37);
var hg38=hgcells.get(id38);
var hg39=hgcells.get(id39);
var hg40=hgcells.get(id40);
var hg41=hgcells.get(id41);
var hg42=hgcells.get(id42);
var hg43=hgcells.get(id43);
var hg44=hgcells.get(id44);
var hg45=hgcells.get(id45);
var hg46=hgcells.get(id46);
hg1.moveTo(pos1);
hg2.moveTo(pos2);
hg3.moveTo(pos3);
hg4.moveTo(pos4);
hg5.moveTo(pos5);
hg6.moveTo(pos6);
hg7.moveTo(pos7);
hg8.moveTo(pos8);
hg9.moveTo(pos9);
hg10.moveTo(pos10);
hg11.moveTo(pos11);
hg12.moveTo(pos12);
hg13.moveTo(pos13);
hg14.moveTo(pos14);
hg15.moveTo(pos15);
hg16.moveTo(pos16);
hg17.moveTo(pos17);
hg18.moveTo(pos18);
hg19.moveTo(pos19);
hg20.moveTo(pos20);
hg21.moveTo(pos21);
hg22.moveTo(pos22);
hg23.moveTo(pos23);
hg24.moveTo(pos24);
hg25.moveTo(pos25);
hg26.moveTo(pos26);
hg27.moveTo(pos27);
hg28.moveTo(pos28);
hg29.moveTo(pos29);
hg30.moveTo(pos30);
hg31.moveTo(pos31);
hg32.moveTo(pos32);
hg33.moveTo(pos33);
hg34.moveTo(pos34);
hg35.moveTo(pos35);
hg36.moveTo(pos36);
hg37.moveTo(pos37);
hg38.moveTo(pos38);
hg39.moveTo(pos39);
hg40.moveTo(pos40);
hg41.moveTo(pos41);
hg42.moveTo(pos42);
hg43.moveTo(pos43);
hg44.moveTo(pos44);
hg45.moveTo(pos45);
hg46.moveTo(pos46);
/************隐藏列***************/
//获取所有列
var cols=table1.getColumns();
//获取第一列:
//var col1=cols.get(pos1);
//获取pos的位置,设置列的宽度
var unit="mm";
cols.get(pos1).setProperty("width",width1+unit);
cols.get(pos2).setProperty("width",width2+unit);
cols.get(pos3).setProperty("width",width3+unit);
cols.get(pos4).setProperty("width",width4+unit);
cols.get(pos5).setProperty("width",width5+unit);
cols.get(pos6).setProperty("width",width6+unit);
cols.get(pos7).setProperty("width",width7+unit);
cols.get(pos8).setProperty("width",width8+unit);
cols.get(pos9).setProperty("width",width9+unit);
cols.get(pos10).setProperty("width",width10+unit);
cols.get(pos11).setProperty("width",width11+unit);
cols.get(pos12).setProperty("width",width12+unit);
cols.get(pos13).setProperty("width",width13+unit);
cols.get(pos14).setProperty("width",width14+unit);
cols.get(pos15).setProperty("width",width15+unit);
cols.get(pos16).setProperty("width",width16+unit);
cols.get(pos17).setProperty("width",width17+unit);
cols.get(pos18).setProperty("width",width18+unit);
cols.get(pos19).setProperty("width",width19+unit);
cols.get(pos20).setProperty("width",width20+unit);
cols.get(pos21).setProperty("width",width21+unit);
cols.get(pos22).setProperty("width",width22+unit);
cols.get(pos23).setProperty("width",width23+unit);
cols.get(pos24).setProperty("width",width24+unit);
cols.get(pos25).setProperty("width",width25+unit);
cols.get(pos26).setProperty("width",width26+unit);
cols.get(pos27).setProperty("width",width27+unit);
cols.get(pos28).setProperty("width",width28+unit);
cols.get(pos29).setProperty("width",width29+unit);
cols.get(pos30).setProperty("width",width30+unit);
cols.get(pos31).setProperty("width",width31+unit);
cols.get(pos32).setProperty("width",width32+unit);
cols.get(pos33).setProperty("width",width33+unit);
cols.get(pos34).setProperty("width",width34+unit);
cols.get(pos35).setProperty("width",width35+unit);
cols.get(pos36).setProperty("width",width36+unit);
cols.get(pos37).setProperty("width",width37+unit);
cols.get(pos38).setProperty("width",width38+unit);
cols.get(pos39).setProperty("width",width39+unit);
cols.get(pos40).setProperty("width",width40+unit);
cols.get(pos41).setProperty("width",width41+unit);
cols.get(pos42).setProperty("width",width42+unit);
cols.get(pos43).setProperty("width",width43+unit);
cols.get(pos44).setProperty("width",width44+unit);
cols.get(pos45).setProperty("width",width45+unit);
cols.get(pos46).setProperty("width",width46+unit);
//获取pos的位置,判断是否隐藏
if(show1==0){cols.get(pos1).setProperty("display", "none");}
if(show2==0){cols.get(pos2).setProperty("display", "none");}
if(show3==0){cols.get(pos3).setProperty("display", "none");}
if(show4==0){cols.get(pos4).setProperty("display", "none");}
if(show5==0){cols.get(pos5).setProperty("display", "none");}
if(show6==0){cols.get(pos6).setProperty("display", "none");}
if(show7==0){cols.get(pos7).setProperty("display", "none");}
if(show8==0){cols.get(pos8).setProperty("display", "none");}
if(show9==0){cols.get(pos9).setProperty("display", "none");}
if(show10==0){cols.get(pos10).setProperty("display", "none");}
if(show11==0){cols.get(pos11).setProperty("display", "none");}
if(show12==0){cols.get(pos12).setProperty("display", "none");}
if(show13==0){cols.get(pos13).setProperty("display", "none");}
if(show14==0){cols.get(pos14).setProperty("display", "none");}
if(show15==0){cols.get(pos15).setProperty("display", "none");}
if(show16==0){cols.get(pos16).setProperty("display", "none");}
if(show17==0){cols.get(pos17).setProperty("display", "none");}
if(show18==0){cols.get(pos18).setProperty("display", "none");}
if(show19==0){cols.get(pos19).setProperty("display", "none");}
if(show20==0){cols.get(pos20).setProperty("display", "none");}
if(show21==0){cols.get(pos21).setProperty("display", "none");}
if(show22==0){cols.get(pos22).setProperty("display", "none");}
if(show23==0){cols.get(pos23).setProperty("display", "none");}
if(show24==0){cols.get(pos24).setProperty("display", "none");}
if(show25==0){cols.get(pos25).setProperty("display", "none");}
if(show26==0){cols.get(pos26).setProperty("display", "none");}
if(show27==0){cols.get(pos27).setProperty("display", "none");}
if(show28==0){cols.get(pos28).setProperty("display", "none");}
if(show29==0){cols.get(pos29).setProperty("display", "none");}
if(show30==0){cols.get(pos30).setProperty("display", "none");}
if(show31==0){cols.get(pos31).setProperty("display", "none");}
if(show32==0){cols.get(pos32).setProperty("display", "none");}
if(show33==0){cols.get(pos33).setProperty("display", "none");}
if(show34==0){cols.get(pos34).setProperty("display", "none");}
if(show35==0){cols.get(pos35).setProperty("display", "none");}
if(show36==0){cols.get(pos36).setProperty("display", "none");}
if(show37==0){cols.get(pos37).setProperty("display", "none");}
if(show38==0){cols.get(pos38).setProperty("display", "none");}
if(show39==0){cols.get(pos39).setProperty("display", "none");}
if(show40==0){cols.get(pos40).setProperty("display", "none");}
if(show41==0){cols.get(pos41).setProperty("display", "none");}
if(show42==0){cols.get(pos42).setProperty("display", "none");}
if(show43==0){cols.get(pos43).setProperty("display", "none");}
if(show44==0){cols.get(pos44).setProperty("display", "none");}
if(show45==0){cols.get(pos45).setProperty("display", "none");}
if(show46==0){cols.get(pos46).setProperty("display", "none");}
//设置纸张
//获取show有多少个1,即显示多少个列
var pageshow=colArr.getJSONObject(2).get("s");
pageshow=String(pageshow);
pageshow=pageshow.replace(/\[/,"");
pageshow=pageshow.replace(/\]/,"");
pageshow=pageshow.split(",");
/* //按显示的列(每列1.4in)设置总宽度
var total = 0;
for(var i=0 ;i<pageshow.length;i++){
total += Number(pageshow[i]);
}
var vwidth=(total*1.4)+"in";
*/
//按显示的列(每列传参)设置总宽度
var total=0;
for(var j=0 ;j<pageshow.length;j++){
if(Number(pageshow[j])==1){
total +=Number(colArr.getJSONObject(3).get("w")[j])+1;
}
}
var vwidth=(total+18) + unit;
/*out = new PrintWriter( new FileWriter("d:/debuginfo2.txt", true ) );
out.println("*****"+ vwidth);
out.close();
*/
reportContext.getDesignHandle().findMasterPage("Simple MasterPage").setProperty("width",vwidth);
reportContext.getDesignHandle().findMasterPage("Simple MasterPage").pageType="custom";
}
数据库当中必须记录用户设置的列相关参数:
-- Create table
create table COLUMNPARAMETER
(
ID VARCHAR2(32) default sys_guid() not null,
REPORTID VARCHAR2(32) not null,
REPORTURL VARCHAR2(2000),
PARASARR VARCHAR2(4000),
ORDERPARAS VARCHAR2(2000),
CPARASARR CLOB,
DEFAULTCPARASARR CLOB
)
tablespace HBFS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64
minextents 1
maxextents unlimited
);
-- Add comments to the table
comment on table COLUMNPARAMETER
is '报表列参数表';
-- Add comments to the columns
comment on column COLUMNPARAMETER.REPORTID
is '报表id';
comment on column COLUMNPARAMETER.REPORTURL
is '参数链接';
comment on column COLUMNPARAMETER.PARASARR
is '参数数组字符串';
comment on column COLUMNPARAMETER.ORDERPARAS
is '排序参数';
comment on column COLUMNPARAMETER.CPARASARR
is '大参数数组字符串';
comment on column COLUMNPARAMETER.DEFAULTCPARASARR
is '默认大参数数组字符串';
由于我厂参数是配置的:
需要增加几个参数:
columnsManage 指定列的顺序、是否隐藏、列的宽度
关于指定列排序:
我们需要增加二个参数:按哪一列排序、是升序还是降序:
(指定按列排序的表字段)
(指定的列是升序还是降序)
相应的birt报表文件中,dataset对象的beforeopen方法中增加如下代码
if(screen!=""&&screen!=null&&screen!="null"){
if(seach!=""&&seach!=null&&seach!="null"){
this.queryText = "select * from (" + this.queryText +") where "+ seach +" like'%" + screen +"%'" ;
//添加排序参数:
if(col!=null && col!="" &&col!="null"&sort!=null &&sort!="" &&sort!="null"){
this.queryText ="select * from ("+this.queryText+") order by "+col+" "+sort;
}
}
}
这个代码的主要作用是:根据接受的指定的列名、升降序,拼sql,使得执行该sql查询语句后,结果是排序过的。
绑定参数与报表的关系:
参数设置了,报表文件中根据传入的参数进行了处理,还需要把2者关联起来,我厂做了一个报表服务,关联报表及参数间关系:
绑定了参数,还需要指定参数在页面上布局的位置:
设置表头背景图片宽度等的位置:
(设置的位置示意图)