Как использовать FastCube .NET в SPA приложении Knockout.js

21.07.2021

Для того чтобы вывести куб данных мы создадим SPA приложение с использованием Knockout.js (библиотека для создания веб-приложений). С помощью этой библиотеки мы сможем использовать TypeScript для фронтенд части нашего приложения, также используем ASP.NET Core MVC для создания бэкэнд части. С его помощью мы сможем использовать отчеты FastCube .NET.

Для работы с Knockout.js вместе с .NET Core нам необходимо иметь предустановленный .NET Core SDK 2.0 или MS Visual Studio. Изначально шаблон приложения с использованием Knockout.js будет не доступен. Необходимо установить его при помощи команды. Переходим в командную строку и вводим команду:

dotnet new — install Microsoft.AspNetCore.SpaTemplates::*

После этого можно создать SPA приложение на основе Knockout.js. В необходимой нам папке открываем командную строку и вводим команду:

dotnet new knockout –o KnockWebReport

После создания приложения переходим в папку с созданным приложением и восстанавливаем нужные пакеты с помощью команды:

npm install

Перед началом работы с нашим веб-приложением, нужно подготовить Nuget пакеты с библиотеками FastCube. Для этого нужно открыть решение FastCube.Core.sln и выполните сборку. В результате вы получите два пакета - FastCube.Web.2020.2.1.nupkg и FastCube.Core.2020.2.1.nupkg. Их нужно поместить в любую локальную папку, которую будем использовать в качестве локального источника пакетов Nuget.

Теперь можно запустить созданный нами проект. Давайте начнем к установку пакетов FastCube. Открываем менеджер пакетов Nuget. В правом верхнем углу окна вы увидите значок шестеренки - он открывает настройки источников пакетов. Нажимаем на него и добавляем новый источник пакетов - папку с нашими пакетами FastCube:

Настройка источников пакетов

Теперь выберем добавленные источники пакетов в списке и установим их:

Установка пакетов

Добавляем папку App_Data в каталог wwwroot.  В нем будут храниться “кубы”:

Каталог wwwroot

Подключим FastCube в файле Startup.cs. Нужно в метод Configure() добавить код:

app.UseFastCube();

Наше приложение содержит контроллер SampleDataController. Давайте добавим в него следующий метод:

 [HttpGet("[action]")]
 public IActionResult ShowCube(string name)
 {
 Cube cube = new Cube();
 Slice slice = new Slice()
 {
 Cube = cube
 };
 FilterManager filterManager = new FilterManager()
 {
 Cube = cube
 };
 WebGrid grid;
 grid = new WebSliceGrid()
 {
 Slice = slice
 };
 ViewBag.WebGrid = grid;
 cube.SourceType = SourceType.File;
 cube.Load(Path.Combine(_env.WebRootPath,(String.Format("App_Data/{0}",name))));
 return View(cube);
 }

Здесь мы используем объекты куба и среза - Cube и Slice. Для отображения данных используется объект WebGrid, который может принимать данные от куба или от среза с помощью соответствующих наследуемых объектов WebCubeGrid и WebSliceGrid.

Для метода ShowCube нам необходимо создать “представление”:

Создаём “представление”

В этом представлении будет содержаться только одна строчка кода:

@await ViewBag.WebReport.Render()

Далее, нам необходимо настроить клиентское приложение. Оно расположено в папке ClientApp:

Настройка клиентского приложения

В нашем случае мы будем использовать домашнюю страницу для вывода куба. Отредактируем код в файле home-page.html:

<div id="app">
 <input type="file" id="FileName" accept=".mdc" data-bind="event: { change: upload($element.files[0]) }" />
</div>
<div data-bind="if: show">
 <iframe id="report" height="1000" width="1000" data-bind="attr: {src: url}"></iframe>
</div>

Мы будем выводить кнопку, которая открывает окно выбора файла. А также, в зависимости от значения логического параметра show, мы выводим фрейм с объектом веб отчета.

Теперь напишем скрипт для этого шаблона в файле home-page.ts:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import * as ko from 'knockout';
 
class HomePageViewModel {
 public show = ko.observable(false);
 public url = ko.observable('');
 
 upload(file: Blob) {
 var files = new FormData();
 files.append("files", file)
 console.log(files);
 if (file != null) {
 fetch('api/SampleData/Upload', {
 method: 'POST',
 body: files
 })
 .then(response => response.text())
 .then(data => {
 this.url("api/SampleData/ShowCube?name=" + data)
 });
 this.show(true);
 }
 }
}
 
export default { viewModel: HomePageViewModel, template: require('./home-page.html') };

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

Запуск веб-куба

Выбираем файл в формате mdc.

Выбор файла

И получаем куб на свою веб-страницу.

Как вы могли заметить, работать с FastCube .NET в Knockout.js очень просто, особенно если вам необходимо вывести куб в веб-приложении.

14 марта 2023

Будущее генерации отчетов с помощью Blazor WebAssembly

Пошаговая инструкция по созданию демо приложения на .NET 6 и 7 прямо в браузере с помощью Blazor WebAssembly в FastReport .NET.
14 февраля 2023

Как настроить веб-сервер Apache2 для FastReport .NET

Запускаем веб-сервер Apache2 в операционной системе Linux для FastReport .NET и .NET 5 с помощью нескольких простых команд.
12 июля 2022

Как отобразить много отчетов на одной странице в Blazor

Работа из кода Blazor-приложения для одновременного отображения различных отчётов с фильтрацией данных по условию пользователя.