我有一个使用 ReportLibraries 中的组件动态组装 BIRT ReportDesigns 的环境。这些 ReportLibraries 存储在数据库中,在文件系统的任何地方都找不到。
我想要做的是在会话中打开一个库,给库一个名称和一个 InputStream(来自测试资源的 FileInputStream)
SessionHandle session = de.newSessionHandle(ULocale.ENGLISH);
LibraryHandle library = session.openLibrary("lib01.rptlibrary", is);
然后我创建一个 ReportDesign 并包含库(按名称?)
ReportDesignHandle reportDesign = session.createDesign();
reportDesign.includeLibrary("lib01.rptlibrary", "lib01");
稍后我会在库中搜索一个表格元素并尝试将其复制到设计中:
ElementFactory elementFactory = reportDesign.getElementFactory();
DesignElementHandle deh1 = library.findElement("NewTable");
DesignElementHandle ldeh1 = elementFactory.newElementFrom(deh1, "newTable");
此时我会得到以下异常:
org.eclipse.birt.report.model.api.command.InvalidParentException: The library for the parent element "Table("NewTable")" is not included.
at org.eclipse.birt.report.model.api.ElementFactoryImpl.newElementFrom(ElementFactoryImpl.java:968)
at org.eclipse.birt.report.model.api.ElementFactory.newElementFrom(ElementFactory.java:1)
似乎找到了库,并且 DesignElementHandle 确实指向了我要复制到设计中的组件,但是 ReportDesign 找不到在会话中打开的库。
有没有办法告诉 ReportDesign 包含来自非文件系统资源的库,或者包含来自会话的库,因为它具有相同的名称?
我想不惜一切代价避免将 rptlibrary 文件放在我的 FielSystem 上来组装 ReportDesign。