Построение отчёта
В этой статье рассмотрен процесс построения отчёта из шаблона с помощью процессора отчётов FastReport Corporate Server.
Приступая к работе
Вам понадобятся следующие инструменты и возможности:
Знания по использованию API key в FastReport Corporate Server.
В этой статье будет пропущена дополнительная информация по аутентификации и авторизации.
Редактор C# кода или текстовый редактор, например Visual Studio Code.
Шаблон отчёта.
Как загрузить шаблон отчёта можно узнать в статье Загрузка нового шаблона.
Активная подписка для FastReport.Cloud.
Доступ в интернет.
Обратите внимание! Это руководство рассчитано, что вы уже знаете, как разработать своё приложение на языке программирования C#.
Обратите внимание! Пункты выше описывают рекомендуемые инструменты.
Инструкция
Вам необходим идентификатор шаблона для его построения, для его получения воспользуйтесь методом <xref:FastReport.Cloud.ITemplatesClient.GetFilesListAsync(System.String,System.Nullable{System.Int32},System.Nullable{System.Int32})>
public async Task<string> GetTemplateId(HttpClient httpClient) { ITemplateFoldersClient templateFoldersClient = new TemplateFoldersClient(httpClient); ITemplatesClient templatesClient = new TemplatesClient(httpClient); FileVM rootFolder = await templateFoldersClient.GetRootFolderAsync(null); IEnumerable<TemplateVM> templates = await templatesClient.GetFilesListAsync(rootFolder.Id, 0, 10); TemplateVM template = templates.First(); return template.Id; }
В этом примере функция запрашивает корневую директорию первой подписки пользователя, затем запрашивает 10 шаблонов и возвращает первый.
Для построения отчёта вам понадобится директория, в которую можно положить отчёт. Запросите корневую директорию отчётов, для этого воспользуйтесь методом <xref:FastReport.Cloud.IReportFoldersClient.GetRootFolder(System.String)>.
public async Task<string> GetReportsRoot(HttpClient httpClient, string subscriptionId = null) { IReportFoldersClient reportFoldersClient = new ReportFoldersClient(httpClient); FileVM result = await reportFoldersClient.GetRootFolderAsync(subscriptionId); return result.Id; }
В этом примере функция запрашивает корневую директорию, идентификатор подписки можно не задавать, в этом случае будет возвращена корневая директория для первой подписки пользователя.
Для построения отчёта воспользуйтесь методом <xref:FastReport.Cloud.ITemplatesClient.PrepareAsync(System.String,FastReport.Cloud.PrepareTemplateTaskVM)>.
public async Task<string> BuildReport(HttpClient httpClient, string folderId, string templateId, string fileName) { ITemplatesClient templatesClient = new TemplatesClient(httpClient); PrepareTemplateTaskVM task = new PrepareTemplateTaskVM() { Name = Path.ChangeExtension(fileName, ".fpx"), ParentFolderId = folderId }; ReportVM result = await templatesClient.PrepareAsync(templateId, task); return result.Id; }
В этом примере функция создаёт задачу на подготовку отчёта.
Обратите внимание! Хотя отчёт ещё не построен, но уже на этом этапе у него присвоен идентификатор, через некоторое время очередь построителя дойдёт до этой задачи и отчёт будет построен.
Для получения информации об отчёте воспользуйтесь методом <xref:FastReport.Cloud.IReportsClient.GetFileAsync(System.String)>.
public async Task<ReportVMStatus> CheckStatus(HttpClient httpClient, string reportId) { IReportsClient reportsClient = new ReportsClient(httpClient); ReportVM result = await reportsClient.GetFileAsync(reportId); return result.Status.GetValueOrDefault(); }
В этом примере функция запрашивает отчёт по его идентификатору и возвращает статус. Необходимо дождаться статуса <xref:FastReport.Cloud.ReportVMStatus.Success>, проверяйте статус каждые несколько секунд.
Для скачивания отчёта воспользуйтесь методом <xref:FastReport.Cloud.IDownloadClient.GetReportAsync(System.String)>.
public async Task<byte[]> DownloadReport(HttpClient httpClient, string reportId) { IDownloadClient downloadClient = new DownloadClient(httpClient); FileResponse file = await downloadClient.GetReportAsync(reportId); using(MemoryStream ms = new MemoryStream()) { file.Stream.CopyTo(ms); return ms.ToArray(); } }
В этом примере функция запрашивает файл и копирует его в память.