История исполнения отчетов
Дополнение Reports предоставляет механизм управления историей исполнения отчетов со следующими возможностями:
-
Сохранение истории исполнения для каждого отчета. В истории администратор может найти информацию, как часто исполняется тот или иной отчет, какая длительность исполнения отчета, каким пользователем и когда был запущен отчет, какие ошибки возникли при исполнении.
-
Удаление устаревшей истории исполнения отчетов.
По умолчанию механизм сохранения истории не используется, но его можно включить, установив свойство приложения jmix.reports.history-recording-enabled в значение true
.
Экран просмотра истории считается административным, поэтому не добавлен в главное меню. Для просмотра истории перейдите в браузер отчетов (пункт меню Reports → Reports) и нажмите на кнопку Execution history.
Если в списке отчетов был выбран какой-либо отчет, то таблица в экране просмотра истории будет отфильтрована по выбранному отчету. Если в списке отчетов ни один отчет не был выбран, то в экране просмотра будет отображена история исполнения всех отчетов системы.
Действие истории исполнения
Вы можете открыть историю выполнения на любом экране, используя 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 становится доступной. При нажатии на кнопку скачивается документ, представляющий собой файл результата отчета.
Отчеты с типом вывода chart, pivot table, и table не имеют результирующих файлов, поэтому история исполнения таких отчетов не сохраняет никаких документов.
Если вы вызываете запуск отчета программно с помощью метода createAndSaveReport()
, он сохраняет другую копию того же выходного документа в хранилище файлов. Эти два файла помещаются в хранилище независимо друг от друга.
Удаление истории
Вы можете использовать Quartz Job Scheduler, чтобы регулярно удалять ненужные данные,
-
Включите дополнение 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 и настройте задачу для класса
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.
-
Когда история исполнения очищается, связанные выходные документы удаляются из хранилища файлов.