BIRT 使用ml动态数据源总结

上传人:z**** 文档编号:110334756 上传时间:2022-06-18 格式:DOC 页数:14 大小:164.50KB
收藏 版权申诉 举报 下载
BIRT 使用ml动态数据源总结_第1页
第1页 / 共14页
BIRT 使用ml动态数据源总结_第2页
第2页 / 共14页
BIRT 使用ml动态数据源总结_第3页
第3页 / 共14页
资源描述:

《BIRT 使用ml动态数据源总结》由会员分享,可在线阅读,更多相关《BIRT 使用ml动态数据源总结(14页珍藏版)》请在装配图网上搜索。

1、BIRT使用xml动态数据源总结博客分类:Java&EclipseXML 数据结构 EclipseWebworkMySQL因为系统需要,添加报表功能,瞄上了 birt,学习之,入门教程看了一大堆, 还好,多种数据源支持,对于sql还没精通,看着一大堆sql还有点犯难,所以, xml数据源成了我的首选,仔细研究之下,发现原来birt提供的初级功能原来 很少,报表经常需要替换数据源来显示其不同的内容,而传统的设置 xml 数据 源只是事前指定好xml文件,或url,google 了一下,基本没有发现可用 的例 子,郁闷之,自己琢磨了一周几乎,更郁闷的是其实问题早有了答案,就载在 acegi 的权限

2、控制之上一直未看到胜利的曙光下面把自己动态修改 xml 数据源的 成功发上来我用的是webwork,其他用户请酌情修改相应参数 这个是用来view报表的action需要传入的参数是 reban.reportName = 报表文件的文件名rbean.xmlDa taUrl =扌艮表 xml dat asource url,可以是 st ream,或 xxx.xml 之类的,输入浏览器能显示 xml 即可BirtReportViewer.javaJava代码_占t1. package com.morepower.controller.birt;2.2. import java.io.ByteArr

3、ayInputStream;3. import java.io.ByteArrayOutputStream;4. import java.io.InputStream;6.5. import javax.servlet.ServletContext;6. import javax.servlet.http.HttpServletRequest;9.12.import org.eclipse.birt.report r;engine.api.IHTMLRenderOption;engine.api.IRenderOption;engine.api.IReportEngine; engine.ap

4、i.IReportRunnable; engine.api.IRunAndRenderTask; model.api.DataSourceHandle;model.api.ElementFactory;model.api.OdaDataSetHandle;21.import org.eclipse.birt.report.model.api.OdaDataSourceHandle;22.import org.eclipse.birt.report.model.api.ReportDesignHandle;23.import org.eclipse.birt.report.model.api.T

5、ableHandle;24.import org.eclipse.birt.report.model.api.activity.SemanticExcep tion;25.26.27.import com.morepower.controller.AbstractAction;28.import com.morepower.util.BirtEngine;29.import com.morepower.view.BirtReporterBean;30.import com.opensymphony.webwork.ServletActionContext;31.import com.opens

6、ymphony.webwork.interceptor.ServletRequestAware 32.33.public class BirtReportViewer extends AbstractAction implements34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.ServletRequestAware /*/private static final long serialVersionUID = 1L; private static String REPORT_DIR = birt-reportors; pri

7、vate static String REPORT_IMAGE_DIR = images; private IReportEngine birtReportEngine = null; private HttpServletRequest request;private BirtReporterBean rbean;private InputStream reportStream;private static String DATASOURCE_NAME = DataSource; private static String DATASET_NAME = DataSet;private sta

8、tic String QueryText = ;public InputStream getReportStream() return this.reportStream;53. Override54. publicString execute() throws Exception 55. /get report name and launch the engine56. /resp.setContentType(text/html);57. /resp.setContentType( application/pdf);58. /resp.setHeader (Content-Disposit

9、ion,inline; filename=test.pdf);59. String reportName = rbean.getReportName();60.ext();61.62.ServletContext sc = ServletActionContext.getServletContbirtReportEngine = BirtEngine.getBirtEngine(sc);IReportRunnable design = birtReportEngine.openReportDesign(sc63.R)64.65.66.getRealPath(java.io.File.separ

10、ator + REPORT_DI+ java.io.File.separator + reportName);ReportDesignHandle report = (ReportDesignHandle) design67.68.69.70.71.72.73.74.75.76.getDesignHandle();/ 只是动态更换数据源即可,不需改变报表的其他结构/ 暂时不支持动态创建表格/ create task to run and render report buildReport(report);IRunAndRenderTask task = birtReportEngine .cr

11、eateRunAndRenderTask(design);task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY,77.78.BirtReportViewer.class.getClassLoader();I O79.80.81./ set output optionsHTMLRenderOption options = new HTMLRenderOption(); options.setImageHandler(new HTMLServerImageHandler();82. options.setImageD

12、irectory(sc.getRealPath(java.io.File.s eparator83.84.85.+ REPORT_IMAGE_DIR);options.setBaseImageURL(request.getContextPath()+ java.io.File.separator + REPORT_IMAGE_DIR);86.HTML);87.options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_ options.setOption(IRenderOption.HTML_PAGINATION, Boolean.TRUE);

13、88.options.setOption(IHTMLRenderOption.MASTER_PAGE_CONTENT, new Boolean(89.90.91.true);/ options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF);92. options.setOption(HTMLRenderOption.HTML_ENABLE_METADATA , Boolean.FALSE);93.);94.95.96.97.98.99.但这样100.101.ByteArrayOutputStream bout = new ByteArr

14、ayOutputStream(/String renderstr = bout.toString(utf-8); options.setOutputStream(bout);task.setRenderOption(options);/*另外一种方案,直接在 action 中构造 inputStream 对像,* 可能导致你的报表 viewer 与具体业务类耦合!* task.getAppContext().put(org.eclipse.datatools.enablement.oda.xml.Constants.APPCONTEXT_INPUTSTREAM,102. reportStrea

15、m);103. task.getAppContext().put(org.eclipse.datatools.ena blement.oda.xml.Constants.APPCONTEXT_CLOSEINPUTSTREAM,104.105.106.107.108.109.110. teArray();111.112.113.114.115.116.117.118.Boolean.TRUE);*/ run reporttask.run();task.close();reportStream = new ByteArrayInputStream(bout.toByreturn SUCCESS;/

16、* 清除原有的数据源*/protected void clearDataSource(ReportDesignHandle designHandle) 119.ce120.121./DataSourceHandle dsh = designHandle.findDataSour (DATASOURCE_NAME);/dsh.drop();int count = designHandle.getDataSources().getCount();122.123.124.125.126.try for catch(int i = 0; i count; i+) designHandle.getDat

17、aSources().drop(i); (SemanticException e) 127.log.error(e);128.e.printStackTrace();129.130.131.132./*133.* 清除原有的数据集134.*/135.protected void clearDataSet(ReportDesignHandle designHandle)136.getQueryText(designHandle);137.int count = designHandle.getDataSets().getCount();138.try 139.for (int i = 0; i

18、count; i+)140.designHandle.getDataSets().drop(i);141. catch (SemanticException e) 142.log.error(e);143.e.printStackTrace();144.145.146.147./*148.*149.*/150.protected void getQueryText(ReportDesignHandle designHandle)151.QueryText = (String) designHandle.getDataSets().get(0).getProperty(152. queryTex

19、t);153. 154.155.ndle)156.157.protected void buildReport(ReportDesignHandle designHa try ElementFactory designFactory = designHandle.getElementFactory();158.buildDataSource(designFactory, designHandle);159. buildDataSet(designFactory, designHandle);160. TableHandle table = (TableHandle) designHandle.

20、getBody().get(0);161. table.setDataSet(designHandle.findDataSet(DATASET_NAME);catch (SemanticException e) log.error(e); e.printStackTrace();162.163.164.165.166.167.168.169.protected void buildDataSource(ElementFactory designFa170.ctory,ReportDesignHandle designHandle) throws Semant171.icException 17

21、2.clearDataSource(designHandle);173.OdaDataSourceHandle dsHandle = designFactory.newOdaDataSource(174.175.DATASOURCE_NAME, org.eclipse.birt.report.data.oda.xml );176. /*dsHandle.setProperty(odaDriverClass,177. com.mysql.jdbc.Driver);178.lhost/stat );179. dsHandle.setProperty( odaUser, root );180. ds

22、Handle.setProperty( odaPassword, );*/181. dsHandle.setProperty(FILELIST, rbean.getXmlDataUrl();182. designHandle.getDataSources().add(dsHandle);183. 184.185.protected void buildDataSet(ElementFactory designFactory,186. ReportDesignHandle designHandle) throws Semant icException 187.188. clearDataSet(

23、designHandle);189. OdaDataSetHandle dsHandle = designFactory.newOdaDataSet( DATASET_NAME,190.tDataSet );191. /* OdaDataSetHandle dsHandle = designFactory.newOdaDataSet(DATASET_NAME,*/192. org.eclipse.birt.report.data.oda.xml.data Set);193. dsHandle.setPrivateDriverProperty(XML_FILE, rbea n.getXmlDat

24、aUrl();194.dsHandle.setPrivateDriverProperty(MAX_ROW, -1)7195.196.197.198.199.200.201.202.203.204.205.206.207.208.209.210.211.212.213.214.215.216.217.218.219.220.221.222.223.224.225.dsHandle.setQueryText(QueryText);dsHandle.setDataSource(DATASOURCE_NAME);designHandle.getDataSets().add(dsHandle);Over

25、ridepublic void setServletRequest(HttpServletRequest arg0)request = arg0;Overridepublic void destory() BirtEngine.destroyBirtEngine();public BirtReporterBean getRbean() return rbean;public void setRbean(BirtReporterBean rbean) this.rbean = rbean;Overridepublic void initilize() try log.info( 报表系统初始化中

26、);BirtEngine.initBirtConfig();REPORT_DIR = BirtEngine.getBirtReportorPropertreport_dir);226.227._dir);228.229.230.231.REPORT_IMAGE_DIR = BirtEngine.getBirtReportorProperty(report_imageDATASOURCE_NAME = DataSource;DATASET_NAME = DataSet; catch (Exception e) e.printStackTrace();log.error(e);232.233.23

27、4.235.236.BirtEngine.javaJava代码直茜门1. package com.morepower.util;2. import java.io.InputStream;3. import java.io.IOException;4. import java.util.Properties;5. import java.util.logging.Level;6.6. import mons.logging.Log;7. import mons.logging.LogFactory;8. import org.eclipse.birt.report.engine.api.Eng

28、ineConfig;10.import org.eclipse.birt.report.engine.api.IReportEngine;11.import javax.servlet.*;12.import org.eclipse.birt.core.framework.PlatformServletContext;13.import org.eclipse.birt.core.framework.IPlatformContext;14.import org.eclipse.birt.core.framework.Platform;15.import org.eclipse.birt.cor

29、e.exception.BirtException;16.import org.eclipse.birt.report.engine.api.IReportEngineFactory;17.18. public class BirtEngine 19. private static IReportEngine birtEngine = null;20. private static Properties configProps = new Properties();21. private final static String configFile = BirtConfig.proper ti

30、es;22. protected final static Log log = LogFactory.getLog(BirtEngi ne.class);23. public static synchronized void initBirtConfig() 24.24. loadEngineProps();25. 28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.public static synchronized IReportEngine getB

31、irtEngine(Serv letContext sc) if (birtEngine = null) EngineConfig config = new EngineConfig(); if (configProps != null) String logLevel = configProps.getProperty(logL evel);Level level = Level.OFF;if (SEVERE.equalsIgnoreCase(logLevel) level = Level.SEVERE; else if (WARNING.equalsIgnoreCase(logLevel)

32、 ) level = Level.WARNING; else if (INFO.equalsIgnoreCase(logLevel) level = Level.INFO; else if (CONFIG.equalsIgnoreCase(logLevel) level = Level.CONFIG; else if (FINE.equalsIgnoreCase(logLevel) level = Level.FINE; else if (FINER.equalsIgnoreCase(logLevel) level = Level.FINER; else if (FINEST.equalsIg

33、noreCase(logLevel) level = Level.FINEST; else if (OFF.equalsIgnoreCase(logLevel) level = Level.OFF;config.setLogConfig(configProps.getProperty(lo gDirectory),level); /sc.getRealPath()+java.io.File.separator+configPr ops.getProperty(engine_home)config.setEngineHome();IPlatformContext context = new Pl

34、atformServletConte xt(sc);log.info(context.getPlatform();config.setPlatformContext(context);60.61.try 62.Platform.startup(config);63. catch (BirtException e) 64.e.printStackTrace();65.66.67.IReportEngineFactory factory = (IReportEngineFactory) Platform68.createFactoryObject(IReportEngineFactory.EXTE

35、NSION_REPORT_ENGINE_FACTORY);69.birtEngine = factory.createReportEngine(config);70.71.72.return birtEngine;73.74.75.public static synchronized void destroyBirtEngine() 76.if (birtEngine = null) 77.return;78.79.birtEngine.shutdown();80.Platform.shutdown();81.birtEngine = null;82.83.84.public Object c

36、lone() throws CloneNotSupportedException 85.throw new CloneNotSupportedException();86.87.88.private static void loadEngineProps() 89.try 90./ Config File must be in classpath91.ClassLoader cl = Thread.currentThread().getContextClassLoader();92.InputStream in = cl.getResourceAsStream(configFile)93.7c

37、onfigProps.load(in);94.in.close();95.96. catch (IOException e) 97.e.printStackTrace();98.99.100. 101. public static String getBirtReportorProperty(String key)102. return configProps.getProperty(key);103. 104.105. robin 写道使用方法在浏览器中输入 urlhttp:/localhost:8800/stat/birtviewer.action?rbean.reportName=index .rptdesign&rbean.xmlDataUrl=http:/localhost:8800/stat/armrptxml.acti on?reporter.id=008a81b61c30d47e011c4f446718001b对报表熟悉的人应该知道这个方法

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!