动态排序.
这个功能恐怕任何一个程序都会要求有的, 现在不少ajax 的table 基本上都有能够点击表头进行排序的功能.使用birt 制作动态排序的报表有几种方式. 有两种已经在IBM 上那篇文章介绍了, 一种方式是在表头上加链接,连接到另一个表,并且传递参数怎么排序的, 一种方式是改变sql 语句, 在where clause 后加sort by . 另外我还有两种动态排序的方式: 一种是通过客户端javascript 排序, 一种是通过BIRT API 在运行时排序. 客户端javascript 排序方式其实已经很普遍了, 不少Ajax 库都具有这种table 插件, 象是jquery 的jsgrid 或是flexigrid 插件,YUI 的table 插件也支持不少排序方式. 这种方式只要导入几个js 文件, 一两行代码就可以了,而且还有不少漂亮的样式. 另一种通过BIRT API 在运行时改变排序行为的方式也只需要几行script 就可以完成: 在table 的onPrepare() 事件加上以下代码:
importPackage (Packages.org.eclipse.birt.report.model.api.simpleapi);
if ( params["paramSortOrder"].value != null ){
var sortCondition = SimpleElementFactory.getInstance().createSortCondition();
switch (params["paramSortOrder"].value){
case “city” :
sortCondition.setKey(”row[\"CITY\"]“);
break;
case “state” :
sortCondition.setKey(”row[\"STATE\"]“);
break;
}
sortCondition.setDirection(”asc”);
this.addSortCondition(sortCondition);
}
里面使用的是table 的 addSortCondition 函数 , 当运行的时候,你可以输入你想要排序的列,报表在运行的时候根据你输入列的名称来排序,这种排序方式对于大数据量可能不适合,它不是在sql 里面加的排序条件,而是取出来之后排序的数据
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0708tomlyn/
差不多的:
importPackage( Packages.org.eclipse.birt.report.engine.api.script.element );
importPackage( Packages.org.eclipse.birt.report.model.api.simpleapi );
var sortCondition = StructureScriptAPIFactory.createSortCondition();
var salenum = params["salenum"].value
var pluno = params["pluno"].value
if(pluno=='0'){
sortCondition.setKey("dataSetRow[\"PLU_NO\"]");
sortCondition.setDirection("asc");
}
else if(pluno=='1'){
sortCondition.setKey("dataSetRow[\"PLU_NO\"]");
sortCondition.setDirection("desc");
}
else if(salenum=='0'){
sortCondition.setKey("dataSetRow[\"SNUM\"]");
sortCondition.setDirection("asc");
}
else if(salenum=='1'){
sortCondition.setKey("dataSetRow[\"SNUM\"]");
sortCondition.setDirection("desc");
}
else{
sortCondition.setKey("dataSetRow[\"SNUM\"]");
sortCondition.setDirection("asc");
}
var sortKey = sortCondition.getStructure();
this.addSortCondition( SimpleElementFactory.getInstance().createSortCondition(
sortKey ));