birt(3)_自定义定义显示列

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wh_xia_jun/article/details/97374794

小厂,用的开源birt做报表,不太符合用户对报表的操作习惯。

用户对报表希望:

  1. 自定义显示、隐藏列;
  2. 自定义报表列的显示顺序;
  3. 自定义报表列宽度;
  4. 按用户选择的列对表格数据排序
  5. 冻结表头

自定义定义显示列等

解决这类问题,有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者关联起来,我厂做了一个报表服务,关联报表及参数间关系:

 绑定了参数,还需要指定参数在页面上布局的位置:

设置表头背景图片宽度等的位置:

 (设置的位置示意图)

上一节 拖动列宽 

猜你喜欢

转载自blog.csdn.net/wh_xia_jun/article/details/97374794