帆软报表自动推送方案小结(基于ETL工具)

帆软报表6.5版本中带有定时email推送功能,但是由于业务系统数据导入时间通常是不定的,对于那些查询最新数据的报表,往往会定时发送出一封空报表Email。经过与帆软的联系,获取了帆软相关的API(导出excel、word、pdf等),使得基于ETL工具+帆软报表的推送方案成为可能。

 

经过测试,已经在ETL平台(Sagent Automation软件)上部署成功。推送邮件可以带附件,或者是一个报表链接地址。对于日/周报,该方式比较适合。主要思路是,用java写一个报表导出推送小工具,然后在数据导入完成后,通过ETL进行调度。

1、Sagent ETL负责调度,在数据导入完毕(如TA数据)后触发

 

2、推送工具负责生成文件并推送(如email),它被Sagent调用。

     运行依赖于fr-server-6.5.jar、fr-third-6.5.jar两个jar文件,以及datasource.xml数据库连接定义文件。如果报表平台运行在另一台服务器上(目录FineReport6.5/WebReport/WEB-INF/),则需要在Sagent机器上映射一个网络硬盘。

     可以自己用java写一个小工具,实现各种个性化的报表定制、推送服务功能。

附录:帆软导出excel文件API

package cn.jsfund.report; import java.io.File; import java.io.FileOutputStream; import com.fr.base.FRContext; import com.fr.base.dav.LocalEnv; import com.fr.report.WorkBook; import com.fr.report.core.ReportHelper; import com.fr.report.io.ExcelExporter; import com.fr.report.io.PDFExporter; import com.fr.report.io.TemplateExporter; import com.fr.report.io.TemplateImporter; import com.fr.report.io.TextExporter; import com.fr.report.io.WordExporter; /** * 演示如何导入导出模板 * * @author edgar duan * @version 6.5 */ public class FRTest { /** * @param args */ public static void main(String[] args) { // 报表运行环境路径, WEB-INF目录所放的位置,主要是为了访问WEB-INF/resources/datasource.xml数据库链接定义文件 String envPath = "d:/tmp/WEB-INF"; // 设置当前报表运行环境, 报表预览时需要一个运行环境, 没有WEB-INF目录时, 路径设置为null FRContext.setCurrentEnv(new LocalEnv(envPath)); try { // 读取模板 //File cptFile = new File("D://tmp//fundinfo.cpt"); //File cptFile = new File("//10.0.27.100//各部门共享文件//信息技术部//luocm//fundinfo.cpt"); File cptFile = new File("z://luocm//fundinfo.cpt"); // 映射网络文件夹 TemplateImporter templateImporter = new TemplateImporter(); WorkBook workBook = (WorkBook) templateImporter.generate(cptFile); // 传递报表参数 java.util.Map parameterMap = new java.util.HashMap(); parameterMap.put("in_fundtype", "99"); // 基金类型 parameterMap.put("in_enddate", "2001-09-01"); // 成立日期 // 生成XLS ReportHelper.clearFormulaResult(workBook); FileOutputStream outputStream = new FileOutputStream(new File( "d://tmp//fundinfo.xls")); ExcelExporter excelExporter = new ExcelExporter(); excelExporter.export(outputStream, workBook.execute(parameterMap)); } catch (Exception e) { e.printStackTrace(); } } }

你可能感兴趣的:(报表开发)