История выполнения отчетов
Дополнение Reports предоставляет механизм управления историей выполнения отчетов со следующими возможностями:
-
Сохранение истории выполнения для каждого отчета. Системный администратор может использовать историю выполнения отчетов, чтобы узнать, как часто выполняется отчет, сколько времени обработки тратится на отчет, каким пользователем и когда был запущен отчет, какие ошибки произошли во время выполнения.
-
Очистка устаревшей истории выполнения отчетов.
История выполнения отчетов отключена по умолчанию и может быть включена путем установки свойства приложения jmix.reports.history-recording-enabled в значение true.
Экран истории выполнения считается административным и не добавлен в главное меню. Чтобы просмотреть историю выполнения, перейдите в экран списка отчетов (пункт меню Reports → Reports), выберите какой-либо отчет и нажмите кнопку Execution history.
Действие истории выполнения
Вы можете открыть историю выполнения в любом экране, используя ShowExecutionReportHistoryAction и связанную с ним кнопку или пункт контекстного меню компонента.
io.jmix.reportsflowui.action.ShowExecutionReportHistoryAction - стандартное действие для отображения истории выполнения отчетов. Оно должно быть определено для Button или компонента списка (DataGrid, TreeDataGrid).
Ниже приведен пример использования декларативного действия для DataGrid:
<hbox id="buttonsPanel" classNames="buttons-panel">
<!-- ... -->
<button id="historyBtn" action="literatureTypesDataGrid.showHistory"/> (1)
</hbox>
<dataGrid id="literatureTypesDataGrid"
width="100%"
minHeight="20em"
dataContainer="literatureTypesDc">
<actions>
<!-- ... -->
<action id="showHistory" type="report_showExecutionReportHistory"/> (2)
</actions>
</dataGrid>
| 1 | Добавляет кнопку с действием истории отчетов. |
| 2 | Атрибут type определяет конкретный тип действия report_showExecutionReportHistory, предоставляемый фреймворком. |
Пример программного создания действия вместе с кнопкой, объявленной в XML-дескрипторе экрана:
@ViewComponent
private JmixButton historyBtn;
@Autowired
private Actions actions;
@Subscribe
public void onInit(final InitEvent event) {
ShowExecutionReportHistoryAction<LiteratureType> action =
actions.create(ShowExecutionReportHistoryAction.ID);
historyBtn.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 станет доступной. Нажмите кнопку, чтобы загрузить документ, который является файлом результата отчета.
Отчеты с типом вывода table не имеют файлов результатов, поэтому история выполнения таких отчетов не сохраняет никаких выходных документов.
Если вы запускаете отчет программно с помощью метода createAndSaveReport(), он сохраняет другую копию того же результирующего документа в файловое хранилище. Эти два файла помещаются в файловое хранилище независимо.
Очистка истории
Вы можете использовать Планировщик заданий Quartz для периодической очистки истории выполнения отчетов.
-
Включите дополнение Quartz в ваш проект, как описано в разделе Quartz / Установка.
-
Создайте класс задачи и вызовите
ReportExecutionHistoryRecorder.cleanupHistory():@Component("ReportHistoryCleaner") public class ReportHistoryCleanJob implements Job { @Autowired private ReportExecutionHistoryRecorder reportExecutionHistoryRecorder; @Override public void execute(JobExecutionContext context) throws JobExecutionException { reportExecutionHistoryRecorder.cleanupHistory(); } } -
В работающем приложении откройте экран Quartz → Quartz jobs и настройте задачу для класса
ReportHistoryCleanJob. -
Альтернативно, если вы хотите настроить задачу во время разработки, добавьте следующие бины в главный класс приложения:
@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.
-
При очистке истории выполнения отчетов связанный выходной документ также удаляется из файлового хранилища.