需实现的接口方法说明如下:
下面将以"如何隐藏报表字段"的例子来演示如何用java开发一个修改报表样式的例子。
1、打开服务器部署文件smartbi.war,解压后将smartbi.war\WEB-INF\lib\目录下的 smartbi-FreeQuery.jar、 smartbi-Common.jar包加入到插件包项目的classpath中去。
2、撰写报表过滤器类FilterFieldsAndData.java,实现接口ISDKHTMLGeneratorEx。
package bof.ext.sample9_10; import java.util.List; import smartbi.freequery.client.simplereport.ClientReportService; import smartbi.freequery.client.simplereport.ClientReportView; import smartbi.freequery.extension.ISDKGridData; import smartbi.freequery.extension.ISDKHTMLGeneratorEx; import smartbi.freequery.querydata.CellData; import smartbi.freequery.report.ReportField; import smartbi.freequery.report.SimpleReportBO; public class FilterFieldsAndData implements ISDKHTMLGeneratorEx { public void doHtmlGeneratorBeforeExtend(ClientReportView view, ISDKGridData gridData) { SimpleReportBO simpleReportBO = ClientReportService.getInstance().getReportObject(view.getClientId()); List<ReportField> allFields = simpleReportBO.getAllFields(); int colIndex = -1; for (int i = 0; i < allFields.size(); i++) { ReportField field = allFields.get(i); String alias = field.getAlias(); if (alias.equals("产品名称")) { // 当字段名为销售额时,将其从字段列表中剔除 simpleReportBO.removeReportFieldById(field.getId()); colIndex = i; } } if (colIndex < 0) { return; } List<ReportField> fieldList = view.getReportBean().getFields(); fieldList.remove(colIndex); view.getReportBean().setFields(fieldList); List<String> headers = gridData.getStringHeaders(); headers.remove(colIndex); for (List<CellData> cellData : gridData.getData()) {// 将隐藏字段对应的数据也剔除 cellData.remove(colIndex); } } public boolean accept(String dataSourceId, String bizViewId, String reportId, String reportName) { if (reportName.equalsIgnoreCase("报表数据过滤器分析")) return true; else return false; } } |
3、修改Smartbi服务器配置文件smartbi-config.xml,在<freequery></ freequery >节点间加入以下代码:
<htmlGenerator-extend-chain> <extend>dxx.FilterFieldsAndData</extend> </htmlGenerator-extend-chain> |
4、重启Smartbi服务,刷新这张报表就会执行以上代码,效果如图: