Bootstrap

帆软开发总结

一、开发版本确认

帆软报表不支持向下兼容,10版本开发8版本打不开,所以开发确认服务器帆软版本很关键

二、帆软与数据库建立连接

服务器---》定义数据连接---》点击绿色加号

mysql数据库:myku:数据库名字

     驱动器:com.mysql.jdbc.Driver

     URL:jdbc:mysql://127.0.0.1:3306/myku?useSSL=false&serverTimezone=UTC

     编码:记得选UTF-8

oracle数据库:ORCL:数据库名字

      可以用sql查询数据库名字:select name from v$database

      驱动器:oracle.jdbc.driver.OracleDriver

      URL:jdbc:oracle:thin:@127.0.0.1:1521:ORCL

      编码:记得选UTF-8

三、建数据源

点击左下角加号---》弹框中填数据源名字,选数据源连接的服务(sql写完记得预览)

注意:开发环境的服务配置名称需要跟服务器一致,否则下次还得改。

四、开发报表

编辑区中间可以拖动左侧数据源列到报表编辑区

a.序号

         序号可以右上角"插入公式"搜seq选中保存

         注意:如果序号被合并了,可以选择对应序号行设置左父格为其他要参考的列(不记表头开始),这样序号会根据其他列             的行数显示。

b.重复数据不合并

          点击对应列,右上角数据设置 "分组"改成"列表"

c.数据字典映射

                 点击数据列,右下角倒数第二选项"数据字典"添加对应的字典;数据列表就能渲染

五、报表的部署

       以帆软8为例:FineReport_8.0\WebReport

       a.拷贝文件

                拷贝帆软8安装目录下的WebReport到部署项目的tomcat的webapps下面

       b.修改帆软配置文件

                FineReport_8.0\WebReport\WEB-INF\resources\datasource.xml

               找到配置的服务,改成服务器的配置

       c.重启tomcat

六、确认报表路径

       a.确认报表路径

点击自己本地的报表预览,得路径http://localhost:8075/WebReport/ReportServer?reportlet=xxx.cpt

将服务器地址跟报表名称改成要调用的即可

七、调用报表

方式一、直接展示:在html页面加iframe

<iframe id="reportFrame" width="100%" height="100%" src="http://1127.0.0.1:8080/WebReport/ReportServer?reportlet=/路径/xxx.cpt"></iframe>

方式二、弹框展示

将帆软服务器路径配置yml中,通过java类返回前端

java类

package com.sdp.web.app.controller.common;

import com.sdp.web.app.springboot.controller.separate.SeparateDataController;
import com.sdp.web.session.UserSession;
import com.sdp.web.util.Log;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

@RequestMapping("/config")
@RestController
public class ConfigController extends SeparateDataController {

	@Value("${fineReport.path}")
	private String reportPath;//帆软报表路径

	public ConfigController() {
		super();
	}
	/**
	 * 获取AppId
	 * @param json
	 * @return
	 */
	@RequestMapping("/getFr")
	public String getConfigData(@RequestBody JSONObject json, HttpServletRequest request) {
		StringBuffer su = request.getRequestURL();
		Log.info("浏览器路径》》》》》》》》》》》"+su);
		if(su.indexOf("https")>=0){
			reportPath.replace("http","https");
			Log.info("全路径》》》》》》》》》》》https");
		};
		Log.info("帆软路径》》》》》》》》》=====》》"+reportPath);
		//String path = String.valueOf(UserSession.getCurAppContext().getAppConfig().getPropertyParams().getProperty("frServer"));
		return toJSONString(200, "success", reportPath);
	}

	private String toJSONString(int code, String ok, String data) {
		HashMap<String, Object> ret = new HashMap();
		ret.put("code", 200);
		ret.put("ok", ok);
		ret.put("data", data);
		return JSONObject.fromObject(ret).toString();
	}
}

前端获取服务器地址,封装参数请求到帆软服务器

// =================================================================================================
// -- CF
//--------------------------------------------------------------------------------------------------
/**
 * @description 常量
 */
var CF = {
  version: '1.0',
  baseDir: null,  //应用服务基础路径
  reportURL: null     //FineReport服务器地址
};
//--------------------------------------------------------------------------------------------------
// =================================================================================================
/**
 * 初始配置
 */
$(function() {
  //获取应用基础路径
  CF.getBaseDir();
  //获取报表服务地址
  CF.getFineReportURL();
});

/**
 * 打开FineReport模板
 * @param rpt
 * @param param
 */
CF.openReport = function (rpt, param) {
  if(CF.reportURL){
    var rpURL = CF.reportURL + '?reportlet=' + rpt + param;
    parent.parent.layer.open({
      title: '报表查看',
      type: 2,
      area: ['95%', '95%'], //设置窗口的大小
      content: rpURL,
      maxmin: true,
      end:function(){
        //$('#ff').form('reset');
        layer.close(index);
      }
    });
  } else {
    layer.alert('请求结果异常,无法获取报表服务地址!', {
      title: '异常提示', icon: 0, closeBtn: 0
    });
  }
};

/**
 * 获取应用基础路径
 * @returns {string}
 */
CF.getBaseDir = function () {
  if (!CF.baseDir){
    var curPath = window.document.location.href; //获取当前网址,如: http://localhost:8080/ems/Pages/Basic/Person.jsp
    var pathName = window.document.location.pathname; //获取主机地址之后的目录,如: /ems/Pages/Basic/Person.jsp
    var pos = curPath.indexOf(pathName);
    var hostPath = curPath.substring(0, pos);  //获取主机地址,如: http://localhost:8080
    var projectName = pathName.substring(0, pathName.substr(1).indexOf('/') + 1);  //获取带"/"的项目名,如:/ems
    var sss = hostPath + projectName + "/";
    CF.baseDir = hostPath + projectName + "/";   //获取项目的basePath   http://localhost:8080/ems/
  }
  return CF.baseDir;
}

/**
 * 获取FineReport服务器地址
 * @returns {string}
 */
CF.getFineReportURL = function(){
  if (!CF.reportURL){
    var _url = CF.baseDir + 'config/getFr';
    var res = $.ajax({
      type: "post",
      url: _url,
      async: false,
      data: "{}",
      dataType: "json",
      contentType: "application/json;charset=UTF-8"
    });
    var vs = jQuery.parseJSON(res.responseText);
    if (vs && vs.code == 200) {
      if (vs.data) {
        CF.reportURL = vs.data;
      } else {
        layer.alert('请求结果异常,状态码:' + vs.code + ',状态信息:无法获取FineReport服务器地址!', {
          title: '异常提示', icon: 0, closeBtn: 0
        });
      }
    }
  }
  return CF.reportURL;
}

页面调用:(参数的三目运算还是有必要的,否则容易出现参数传递出错)

 function exportTable(){
        var param1=$("#param1").val();
        param1=param1?param1:"";

        var param2=$("#param2").val();
        param2=param2?param2:"";

        var param3=$("#param3").val();
        param3=param3?param3:"";

        var param4=$("#param4").textbox("getValue");
        param4=param4?param4:"";
CF.openReport('/路径/XXX.cpt','&param1='+param1+'&param2='+param2);
    }

      

 

 

;