导入导出报表
Jmix 报表扩展组件提供了直接从 UI 或通过编程方式导出和导入报表定义的功能。
手动操作
从 Reports 视图可以点击 Import 和 Export 按钮手动导入或导出报表。参阅 报表列表视图。
使用 ReportImportExport
Jmix 报表扩展组件提供了 ReportImportExport
API,可用于导入之前从 Jmix 导出的报表 ZIP 文件。
下面我们看一个 Jmix 项目自动部署报表的示例。这些报表之前已经手动导出为 ZIP,并存放在项目的资源目录。
@Component
public class DemoDataInitializer { (1)
@Autowired
private DataManager dataManager;
@Autowired
private Resources resources;
@Autowired
protected ReportImportExport reportImportExport;
private final static String REPORT_LOCATION = "com/company/library/reports/";
@EventListener
@Authenticated
public void onApplicationStarted(ApplicationStartedEvent event) { (2)
importReport();
}
private void importReport(){
InitFlags initFlags = dataManager.load(InitFlags.class) (3)
.id(1)
.lockMode(LockModeType.PESSIMISTIC_WRITE)
.optional()
.orElseGet(() -> {
InitFlags entity = dataManager.create(InitFlags.class);
entity.setId(1);
return entity;
});
if (!Boolean.TRUE.equals(initFlags.getReportsInitialized())) {
importReport("Book Items location.zip");
importReport("Book Record.zip");
importReport("Publication details.zip");
importReport("Publications grouped by types and books.zip");
importReport("Recently added book items.zip");
initFlags.setReportsInitialized(true);
dataManager.save(initFlags);
}
}
private void importReport(String reportFileName) {
String location = REPORT_LOCATION + reportFileName;
log.info("Initializing report from " + location);
try (InputStream stream = resources.getResourceAsStream(location)) {
if (stream != null) {
reportImportExport.importReports(IOUtils.toByteArray(stream)); (4)
} else {
log.info("Not found: " + location);
}
} catch (IOException e) {
log.error("Unable to initialize reports", e);
}
}
}
1 | DemoDataInitializer bean 负责在应用程序启动时触发导入报表。 |
2 | 当 ApplicationStartedEvent 发布时,会自动执行该方法。这里我们可以编写初始化的逻辑。ApplicationStartedEvent 是一个 Spring 事件,会在应用程序完成初始化并可以接收任务时发出。表示 Jmix 程序启动成功。 |
3 | DemoDataInitializer 使用了一个 InitFlags 实体,在初次导入后持久化设置为 true 。该标记使用数据库的悲观锁,以避免群集中的多个服务启动时并发执行。此外,可以在界面中定义不同的条件来创建或更新报表,甚至可以通过手动命令触发 ReportImportExport 。 |
4 | ReportImportExport bean 处理具体的导入操作。 |
本页是否有帮助?
感谢您的反馈