Для изменения размера нажмите или перетащите

Формирование отчёта

Генерация отчета осуществляется на сервере и может занимать длительное время. Поэтому задача формирования отчета должна быть разбита на несколько последовательных этапов:

  • асинхронный запуск отчета;

  • периодическая проверка готовности отчета (по таймеру или по запросу пользователя);

  • предоставление пользователю средств скачивания отчета.

Пример серверного сценария (с наименованием startReportCreation) запуска формирования отчета. Сценарий возвращает данные, необходимые для проверки завершения генерации и формирования средств скачивания отчета.

C#
// Для генерации берется стандартный отчет
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 };

Пример клиентского сценария запуска формирования отчета.

JavaScript
this.startReportCreation(
{
    classifierItemId: this.classifierItem ? this.classifierItem.id : 0,
}, 
rs => {
    this.userId = rs.usedId;
    this.archiveId = rs.archiveId;
},
err => {
    console.error(err);    
});

Пример серверного сценария (с наименованием checkReport) проверки завершения формирования отчета.

C#
// Поиск в архиве готового отчета
var checkValue = InnerUser.GetClassInfo().GetCurrentAccountInstance().GetReportArchiveEntry((string)args["archiveId"]);
// В качестве результата возвращается булев признак получения информации из архива
return new { done = checkValue != null };

Пример клиентского сценария проверки готовности отчета.

JavaScript
this.checkReport(
{
    archiveId: this.archiveId,
}, 
rs => {
    if (rs.done) {
        this.buttonDownload.value = 'Скачать отчет';
        this.buttonDownload.scOnInit();
    }
},
err => {
    console.error(err);    
});

Пример клиентского сценария скачивания готового отчета.

JavaScript
// Обращение к функции окружению для скачивания отчета
this._environment.reports.download(
    // Идентификатор текущего пользователя
    this.userId,
    // Идентификатор отчета в архиве
    this.archiveId, 
    // true - сохранить уведомление о готовности отчета, false - удалить уведомление
    false);
См. также