历史版本12 :程序网络报表中获取参数值 返回文档
编辑时间:
内容长度:图片数:目录数:
修改原因:
1.描述编辑
我们定义的程序网络报表也可以包含参数,Web浏览器访问网络报表时,如何给它传递参数值呢?一般处理是访问网络报表的路径后跟上参数值,当报表参数有几十个甚至更多时,就会以列表、数组等方式传递给程序,如http://localhost:8075/webroot/decision/view/report?viewlet=com.fr.demo.URLParameterDemo&地区=华北
然后在程序中获得该请求中的参数'地区'的值,赋值给报表参数'地区',展示对应的报表。
我们以读取Parameter.cpt模板,转为带参程序网络报表,然后访问时传递参数为例。
1. 实现原理编辑
1.1 创建程序网络报表
新建类URLParameterDemo,继承com.fr.web.Reportlet抽象类,读取Parameter.cpt模板保存为WorkBook对象,最终返回该WorkBook。
提取Request中保存的参数并传值
1.2 提取Request中的参数
1)获取外部传来的参数
String countryValue = reportletRequest.getParameter("地区").toString();
2)提取报表参数组,由于原模板只有一个参数地区,因此直接取index为0的参数,并将外部传入的值赋给该参数
Parameter[] ps = wbTpl.getParameters();
ps[0].setValue(countryValue);
2. 实现步骤编辑
2.1 完整代码如下:
// 程序网络报表中获取request中的值
package com.fr.demo;
import java.util.Map;
import com.fr.config.activator.BaseDBActivator;
import com.fr.config.activator.ConfigurationActivator;
import com.fr.data.impl.config.activator.RestrictionActivator;
import com.fr.main.TemplateWorkBook;
import com.fr.module.Module;
import com.fr.module.tool.ActivatorToolBox;
import com.fr.report.ReportActivator;
import com.fr.report.module.ReportBaseActivator;
import com.fr.store.StateServerActivator;
import com.fr.web.core.Reportlet;
import com.fr.web.request.ReportletRequest;
import com.fr.io.TemplateWorkBookIO;
import com.fr.base.Parameter;
import com.fr.workspace.simple.SimpleWork;
@SuppressWarnings("unused")
public class URLParameterDemo extends Reportlet {
public TemplateWorkBook createReport(ReportletRequest reportletRequest) {
// 获取外部传来的参数
TemplateWorkBook wbTpl = null;
String countryValue = reportletRequest.getParameter("地区").toString();
try {
wbTpl = TemplateWorkBookIO.readTemplateWorkBook(
"//doc//Primary//Parameter//Parameter.cpt");
// 提取报表参数组,由于原模板只有country一个参数,因此直接取index为0的参数,并将外部传入的值赋给该参数
Parameter[] ps = wbTpl.getParameters();
ps[0].setValue(countryValue);
// 原模板定义有参数界面,参数已经从外部获得,去掉参数页面
// 如果想要参数面板,把下面wbTpl.getReportParameterAttr().setParameterUI(null); 这句去掉就行
wbTpl.getReportParameterAttr().setParameterUI(null);
} catch (Exception e) {
e.printStackTrace();
return null;
}
return wbTpl;
}
@Override
public void setParameterMap(Map arg0) {
// TODO Auto-generated method stub
}
@Override
public void setTplPath(String arg0) {
// TODO Auto-generated method stub
}
}
2.2 发布并预览
编译源文件,将生成的URLParameterDemo.class类放至应用%FR_HOME%\WebReport\WEB-INF\classes\com\fr\demo下,启动服务器,在浏览器中访问该网络报表,并传递参数值,路径如下http://localhost:8075/webroot/decision/view/report?viewlet=com.fr.demo.URLParameterDemo&地区=华北
便可以看到结果: