报表执行历史
报表扩展组件提供报表执行历史管理的几个功能:
-
存储每个报表的执行历史。系统管理员可以使用报表执行历史查找每个报表的执行频率、每次的执行时间、执行人以及报表运行时发生了什么错误。
-
清除过期的报表执行历史。
报表执行历史默认不启用,可以设置 jmix.reports.history-recording-enabled 应用程序属性为 true
启用。
报表执行历史界面是管理性质的界面,所以没有添加到主菜单。要查看执行记录,切换到报表浏览界面(Reports →Reports 菜单项),然后点击 Execution history(执行历史) 按钮。
如果在 Reports 表格选中了任何报表,则执行历史只会显示这些选中报表相关的记录。如果没选中报表,则显示所有报表的记录。
ExecutionHistoryAction
可以在任何界面通过 ExecutionHistoryAction
打开报表执行历史,该操作关联至一个按钮或者组件的右键菜单。
io.jmix.reportsui.action.list.ExecutionHistoryAction
- 是一个 标准操作,用于展示报表执行历史。需要关联一个 Button
或列表组件(Table
、DataGrid
等)。
下面是 Table
使用声明式操作的示例:
<actions>
<action id="history" type="executionHistory"/> (1)
</actions>
<buttonsPanel id="buttonsPanel"
alwaysVisible="true">
<button id="historyBtn" action="literatureTypesTable.history"/> (2)
</buttonsPanel>
1 | type 属性定义了一个特殊的 executionHistory 操作类型,操作由框架提供。 |
2 | 添加按钮执行报表历史操作。 |
使用编程式方法创建操作,该操作关联一个在 XML 描述中声明的按钮,示例:
@Inject
protected Actions actions;
@Inject
protected Button execHistoryBtn;
@Subscribe
public void onInit(InitEvent event) {
ExecutionHistoryAction action = actions.create(ExecutionHistoryAction.class, "execHistoryReport");
execHistoryBtn.setAction(action);
}
当操作执行时,会打开一个 Execution history(执行历史) 对话框展示与当前界面相关的报表。点击 Execution History(执行历史) 按钮之后,会展示选中报表的执行历史。如果未选中任何报表,则会展示与此界面关联的所有报表的执行历史。
“Cancelled(取消)” 标志表示用户以后台任务的形式启动报表,然后又取消了。
报表执行历史也记录那些从报表编辑器直接运行(点击 Run(运行) 按钮)还没有保存到数据库的报表。
输出文档
该机制提供了将输出文档,即报表结果文件,保存到 文件存储 的功能。该功能会消耗一定的文件存储空间,需要单独配置,并且默认是关闭的。如需开启,可以设置 jmix.reports.save-output-documents-to-history 应用程序属性为 true
:
jmix.reports.save-output-documents-to-history = true
现在,如果在执行历史表选中一项,Download document(下载文档) 按钮可点击。点击即可下载报表结果文件。
如果是使用编程的方式调用 createAndSaveReport()
方法运行报表,则会为同样的结果文件保存另一份拷贝。这两份文件是互相独立存储在文件存储中的。
清理执行历史
可以使用 Quartz 任务调度器周期性地清理报表执行历史。
-
按照 Quartz / 安装 部分的介绍安装 Quartz 组件。
-
创建一个任务类并调用
ReportExecutionHistoryRecorder.cleanupHistory()
:@Component("jmxrpr_ReportHistoryCleaner") public class ReportHistoryCleanJob implements Job { @Autowired private ReportExecutionHistoryRecorder reportExecutionHistoryRecorder; @Override public void execute(JobExecutionContext context) throws JobExecutionException { reportExecutionHistoryRecorder.cleanupHistory(); } }
-
程序启动后,打开 Administration(管理) → Quartz jobs(Quartz 任务) 界面,并为
ReportHistoryCleanJob
类配置一个任务。 -
或者,如需在开发阶段配置任务,可以在主应用程序类中添加下列 bean:
@Bean JobDetail reportHistoryCleanJob() { return JobBuilder.newJob() .ofType(ReportHistoryCleanJob.class) .storeDurably() .withIdentity("reportHistoryClean") .build(); } @Bean Trigger reportHistoryCleanTrigger() { return TriggerBuilder.newTrigger() .forJob(reportHistoryCleanJob()) .startNow() .withSchedule(CronScheduleBuilder.cronSchedule("0 0 1 * * ?")) (1) .build(); }
1 每天凌晨,例如, 0 0 1 * * ?
-
设置报表历史清理的应用程序属性:
-
jmix.reports.history-cleanup-max-days - 默认 730 天。
-
jmix.reports.history-cleanup-max-items-per-report - 默认 1000。
-
当报表执行历史记录被清理后,相关联的报表输出文档也从文件存储中删除了。