历史版本1 :程序网络报表中获取参数值 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:
我们定义的程序网络报表也可以包含参数,Web浏览器访问网络报表时,如何给它传递参数值呢?一般处理是访问网络报表的路径后跟上参数值,当报表参数有几十个甚至更多时,就会以列表、数组等方式传递给程序,如
http://localhost:8075/WebReport/ReportServer?Reportlet=com.fr.demo.URLParameterDemo&地区=华北
然后在程序中获得该请求中的参数'地区'的值,赋值给报表参数'地区',展示对应的报表。
我们以读取Parameter.cpt模板,转为带参程序网络报表,然后访问时传递参数为例。

1. 实现原理编辑

1.1 创建程序网络报表
新建类URLParameterDemo,继承com.fr.web.Reportlet抽象类,读取Parameter.cpt模板保存为WorkBook对象,最终返回该WorkBook。
提取Request中保存的参数并传值
1.2 提取Request中的参数
  • 获取外部传来的参数
HTML/XML代码
String countryValue = reportletRequest.getParameter("地区").toString(); 
  • 提取报表参数组,由于原模板只有一个参数地区,因此直接取index为0的参数,并将外部传入的值赋给该参数
HTML/XML代码
Parameter[] ps = wbTpl.getParameters();       
            ps[0].setValue(countryValue);  

2. 实现步骤编辑

2.1 完整代码如下:
HTML/XML代码
// 程序网络报表中获取request中的值   
package com.fr.demo;    
  
import java.util.Map;  
import java.util.logging.Level;  
  
import com.fr.base.FRContext;      
import com.fr.general.ModuleContext;  
import com.fr.main.TemplateWorkBook;      
import com.fr.report.module.EngineModule;  
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.dav.LocalEnv;  
import com.fr.page.stable.ReportPageAttr;  
      
      
public class URLParameterDemo extends Reportlet {      
    public TemplateWorkBook createReport(ReportletRequest reportletRequest) {     
            
         String envPath="D:\\FineReport_7.1\\WebReport\\WEB-INF";      
         FRContext.setCurrentEnv(new LocalEnv(envPath));      
         ModuleContext.startModule(EngineModule.class.getName());     
        // 获取外部传来的参数      
        TemplateWorkBook wbTpl = null;    
        String countryValue = reportletRequest.getParameter("地区").toString();   
        try {      
            wbTpl = TemplateWorkBookIO.readTemplateWorkBook(      
                    FRContext.getCurrentEnv(), "\\doc\\Primary\\Parameter\\Parameter.cpt");      
            // 提取报表参数组,由于原模板只有country一个参数,因此直接取index为0的参数,并将外部传入的值赋给该参数      
            Parameter[] ps = wbTpl.getParameters();      
            ps[0].setValue(countryValue);      
            // 原模板定义有参数界面,参数已经从外部获得,去掉参数页面      
            // 若您想保留参数界面,则将模板设置为不延迟报表展示,再传入参数后直接根据参数值显示结果,否则还需要再次点击查询按钮      
            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  
          
    }      
        
}  
注:最新的代码链接fine-help
2.2 发布并预览
编译源文件,将生成的URLParameterDemo.class类放至应用WEB-INF\classes\com\fr\demo下,启动服务器,在浏览器中访问该网络报表,并传递参数值,路径如下http://localhost:8075/WebReport/ReportServer?reportlet=com.fr.demo.URLParameterDemo&地区=华北
便可以看到结果