为什么80%的码农都做不了架构师?>>>
用BIRT开发报表时,可能会引用其他类型的文件,比如JS文件,库文件等,开发时引入这些资源文件时,在报表源文件中是一个相对路径(开发时这个相对路径具体相对于哪个根目录,需要在BIRT设计器的选项中设置,具体位置在eclipse->window->preferences->report design->resource中设置相对路径的根目录,但是注意这个根路径是全局性的,如果每个报表相对根路径不同,则只能手工修改源文件),因此在BIRT的运行时要想正确处理这个相对路径,需要动态的设置一个这个相对路径的根目录,本文将介绍两种设置方法。
这两种方法都是基于ReportEngine的openReportDesign方法,因此可以针对不同的报表设置不同的相对根路径。
1.IResourceLocator扩展:
IReportEngine的openReportDesign方法可以有一个IResourceLocator类型的参数,可以通过实现该接口的findResource方法来动态设置相对目录根路径,BIRT也内置了该接口的实现ResourceLocatorImplBase,该实现较为复杂,有兴趣的可以研究其源代码,并且初步判断该实现在BIRT4.4版本中有Bug,不建议使用。
2.IModuleOption.RESOURCE_FOLDER_KEY常量:
该方法较为简单,以相对根路径为WEB的根目录为例,样例代码如下:
IReportEngine birtEngine = ...;
Map moduleOptions = new HashMap();
moduleOptions.put(IModuleOption.RESOURCE_FOLDER_KEY,servletContext.getRealPath("/"));
IReportRunnable runnable = birtEngine.openReportDesign(reportFileName,null,moduleOptions);