![]() | Формирование отчёта |
Генерация отчета осуществляется на сервере и может занимать длительное время. Поэтому задача формирования отчета должна быть разбита на несколько последовательных этапов:
асинхронный запуск отчета;
периодическая проверка готовности отчета (по таймеру или по запросу пользователя);
предоставление пользователю средств скачивания отчета.
Пример серверного сценария (с наименованием startReportCreation) запуска формирования отчета. Сценарий возвращает данные, необходимые для проверки завершения генерации и формирования средств скачивания отчета.
// Для генерации берется стандартный отчет var report = ExcelReportCS.Single(x => x.AttributeTemplateName == "Даты поверки приборов учета.xlsx"); // Единственный параметр отчета - элемент классификатора, относительно которого идет поиск коллекции ТУ var classifierItem = CustomClassifierNode.Find((int)args["classifierItemId"]); var creationData = report.CreateReportAsync(new [] { new ReportParameterData { Id = "ClassifierItems", DataType = SimpleTypesData.TypeLinkToObject, Value = new [] { new VariantValueData { AsInstanceLink = classifierItem } }, } }, ReportFormatData.ExcelPdf); return new { usedId = InnerUser.GetClassInfo().GetCurrentAccountInstance().IntRefName, archiveId = creationData.ArchiveEntryId };
Пример клиентского сценария запуска формирования отчета.
this.startReportCreation( { classifierItemId: this.classifierItem ? this.classifierItem.id : 0, }, rs => { this.userId = rs.usedId; this.archiveId = rs.archiveId; }, err => { console.error(err); });
Пример серверного сценария (с наименованием checkReport) проверки завершения формирования отчета.
// Поиск в архиве готового отчета var checkValue = InnerUser.GetClassInfo().GetCurrentAccountInstance().GetReportArchiveEntry((string)args["archiveId"]); // В качестве результата возвращается булев признак получения информации из архива return new { done = checkValue != null };
Пример клиентского сценария проверки готовности отчета.
this.checkReport( { archiveId: this.archiveId, }, rs => { if (rs.done) { this.buttonDownload.value = 'Скачать отчет'; this.buttonDownload.scOnInit(); } }, err => { console.error(err); });
Пример клиентского сценария скачивания готового отчета.
// Обращение к функции окружению для скачивания отчета this._environment.reports.download( // Идентификатор текущего пользователя this.userId, // Идентификатор отчета в архиве this.archiveId, // true - сохранить уведомление о готовности отчета, false - удалить уведомление false);