动态修改报表组中的报表项
需求:润乾报表提供了报表组的方式发布报表,适用于有业务联系的多个报表发布在同一个页面中。有些客户提出这样的需求,报表组的报表项想根据参数的不同来动态改变,比如某个参数值为1的时候,报表组显示报表A和报表B,当参数为2的时候显示报表A和报表C。
分析:润乾报表提供了丰富的API接口,上面说的需求可以通过API来实现。API中提供了SubReportConfig类,此类中提供了修改报表源的方法。
实现:通过API修改报表组中的报表项,然后用bean方式发布报表组,jsp代码如下
<%
request.setCharacterEncoding( “GBK” );
String report = request.getParameter( “rpg” );
String flag = request.getParameter(“flag”); //用来判断显示哪张报表源的参数
Context ctx = new Context();
ReportGroup group = ReportUtils2.readReportGroup( report, ctx );
if(flag.equals(“2″) || flag == “2″){
try {
group = ReportUtils2.readReportGroup(report, ctx);
ReportGroupItem item1 = group.getItem(1); //取报表组中的第二个报表项
item1.setTitle( “报表C” ); //设置第二个报表项的标题
SubReportMetaData rmd = group.getReportMetaData();
SubReportConfig cfg = rmd.getSubReportConfig(1); //取第二个报表项的配置
cfg.setURL(“c.raq”); //设置第二个报表项对应的报表源
catch (Exception e) {
e.printStackTrace();
}
}
String rptName = “RPT_”+Double.toString(Math.random());
request.setAttribute(rptName,group); //把ReportGroup对象在request中保存
%>
<!– 发布报表组 –>
<table align=left height=”100%” width=”30%”>
<tr height=”100%”><td>
<report:group
srcType=”bean”
beanName=”<%=rptName%>”
needSaveAsExcel=”no”
needPrint=”yes”
/>
</td></tr>
</table>
</body>
</html>
当参数flag值为1时,报表组发布页面如下
当参数flag的值为2时,报表组发布页面如下:
通过上面的方法就可以实现根据参数值不同动态的修改报表组的报表项。