birt的IRunAndRenderTask接口提供了
addScriptableJavaObject(java.lang.String jsName, java.lang.Object obj)
方法,利用这个方法,在直接调用birt api操作处理报表的时候,我们可以将任何java对象通过
addScriptableJavaObject("xxx",Object)加进birt去,然后在birt脚本中直接调用xxx.method()进行操作。
我的测试是在一个webwork+spring+hibernate的webapp应用中进行的,进行报表处理的代码参照http://wiki.eclipse.org/index.php/Servlet_Example编写,在代码中,写了一句
task.addScriptableJavaObject("ctx",
WebApplicationContextUtils.getWebApplicationContext(sc));
birt中定义了一个scripts datasource,然后定义一个data set,在dataset的open方法中编写脚本
infoManager=ctx.getBean("infoManager");
infos=infoManager.loadAll();
...