История исполнения отчетов

Дополнение Reports предоставляет механизм управления историей исполнения отчетов со следующими возможностями:

  1. Сохранение истории исполнения для каждого отчета. В истории администратор может найти информацию, как часто исполняется тот или иной отчет, какая длительность исполнения отчета, каким пользователем и когда был запущен отчет, какие ошибки возникли при исполнении.

  2. Удаление устаревшей истории исполнения отчетов.

По умолчанию механизм сохранения истории не используется, но его можно включить, установив свойство приложения jmix.reports.history-recording-enabled в значение true.

Экран просмотра истории считается административным, поэтому не добавлен в главное меню. Для просмотра истории перейдите в браузер отчетов (пункт меню ReportsReports) и нажмите на кнопку 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 будет отображена история исполнения выбранных отчетов. Если ни один отчет не был выбран, то будет отображена история для всех отчетов, связанных с экраном.

report execution history
Figure 1. Экран истории исполнения

Флаг "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, чтобы регулярно удалять ненужные данные,

  1. Включите дополнение Quartz в свой проект, как описано в разделе Quartz / Установка.

  2. Создайте класс задачи и вызовите ReportExecutionHistoryRecorder.cleanupHistory():

    @Component("jmxrpr_ReportHistoryCleaner")
    public class ReportHistoryCleanJob implements Job {
    
        @Autowired
        private ReportExecutionHistoryRecorder reportExecutionHistoryRecorder;
    
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            reportExecutionHistoryRecorder.cleanupHistory();
        }
    }
  3. В запущенном приложении откройте экран Administration → Quartz jobs и настройте задачу для класса ReportHistoryCleanJob.

  4. Либо, если вы хотите настроить задачу во время разработки, добавьте следующие бины в основной класс приложения:

    @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 * * ?
  5. Настройте конфигурационные параметры:

Когда история исполнения очищается, связанные выходные документы удаляются из хранилища файлов.