Отчёт из PostgreSQL в приложении .NET 5 под управлением Astra Linux

04.12.2020

Сегодня мы поговорим о российской операционной системе Astra Linux. Эта система получила в последнее время довольно широкое распространение. Разработкой и сопровождением Astra Linux занимается АО «НПО РусБИТех». Существуют разные редакции системы, в том числе и специального назначения. Мы будем рассматривать систему общего назначения Astra Linux Орёл 2.12 в связке с СУБД PostgreSQL 9.6.15 и платформой .NET 5, с помощью которых мы попробуем сделать простое веб-приложение с использованием генератора отчётов FastReport .NET Core. Стоит отметить, что большинство моментов, которые мы будем применять на практике далее, также будут работать и в редакциях Astra Linux специального назначения (Смоленск, Новороссийск, Севастополь и других).

Начнем с установки операционной системы Astra Linux

Скачать ISO образ Astra Linux можно с официального сайта.

Подробно процесс установки и первоначальной настройки рассказывать нет смысла – есть очень подробная документация на сайте производителя. Вся процедура проста и понятна – достаточно следовать инструкциям на экране.

Если вы планируете установить систему для экспериментов в качестве виртуальной машины  Hyper-V (входит в состав Windows Professional и Enterprise), то следует обратить внимание на следующие моменты:

  • Виртуальная машина должна быть первого поколения;
  • Нужно использовать IDE контроллер для жесткого диска и DVD-ROM;
  • Поддерживается legacy сетевой адаптер;
  • При старте инсталляции на первом экране нужно выбрать опцию установки acpi=off;
    После установки системы нужно скачать с помощью браузера пакет поддержки Hyper-V и затем установить его командой в консоли:
    sudo dpkg -i hyperv-daemons_5.3.9-2_amd64_signed.deb
    после этого нужно перезагрузить систему.

Astra Linux Орёл

Для экспериментов нам нужен фреймворк .NET 5

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

wget -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget https://packages.microsoft.com/config/debian/9/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list

После этого нужно обновить репозиторий пакетов и установить .NET 5 следующими командами:

sudo apt-get update
sudo apt-get install -y apt-transport-https
sudo apt-get install -y dotnet-sdk-5.0

Правильность установки .NET 5 можно проверить, выполнив команду запроса версии в консоли (5.0.100 на момент написания статьи):

dotnet --version

Если вы планируете всерьез заниматься разработкой программ на Astra Linux, то вам понадобится редактор Visual Studio Code. Для того, чтобы его установить, нужно скачать пакет с официального сайта. Далее пакет нужно установить (имя файла пакета может отличаться, указано актуальное на момент написания статьи):

sudo dpkg -i code_1.51.1-1605051630_amd64.deb

Для дальнейшей работы нам нужны Git и библиотека libgdiplus, ставим их с помощью команд:

sudo apt install git
sudo apt install libgdiplus

Переходим в домашнюю папку и выполняем команду клонирования репозитория с примером приложения и дампом тестовой базы данных, которые нам понадобятся позже:

git clone https://github.com/fediachov/FastReportSamples

Настало время установить и настроить СУБД PostgreSQL

Вероятно, вы всё уже установили в процессе выбора компонентов операционной системы. Если нет, то выполняем команду в консоли:

sudo apt install postgresql-astra postgresql-contrib

Ждем завершения установки. Убедимся, что установлена нужная нам версия – выполним в консоли команду запуска утилиты psql (важный момент - она должна работать от имени пользователя postgres):

sudo -u postgres psql

Далее вводим команду получения номера версии:

SELECT version();

Проверка номера версии PostgreSQL

Выходим из psql (клавиши Ctrl+D) и переходим к настройке СУБД. Если предполагается доступ к СУБД с других компьютеров (или хостовой системы в случае с Hyper-V), то необходимо добавить нужную подсеть в файл конфигурации /etc/postgresql/9.6/main/pg_hba.conf:

host all all 192.168.1.0/24 md5

Также нужно внести изменения в файл конфигурации /etc/postgresql/9.6/main/postgresql.conf:

# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;

После изменений нужно перезапустить Postgres:

sudo systemctl restart postgresql

Теперь нужно создать тестовую базу данных и пользователя с нужными правами для доступа к ней. Для этого снова запускаем утилиту psql и выполняем в ней следующие команды:

CREATE DATABASE frdemo;
create user fastreport with encrypted password 'fastreport';
grant all privileges on database frdemo to fastreport; 

Выходим из psql и импортируем тестовую базу из дампа примера (дамп находится в папке ~/FastReportSamples/PostgreSQL/database):

cd ~/FastReportSamples/PostgreSQL/database
sudo -u postgres psql frdemo < fr-pg-demo.sql

Чтобы убедиться, что все наши таблицы созданы и доступны, запускаем psql и выполняем там команды (назначение прав, подключение к базе frdemo, вывод списка таблиц, вывод содержимого таблицы):

GRANT ALL ON ALL TABLES IN SCHEMA public TO fastreport;
\c frdemo
\dt
SELECT customerid, companyname, contactname FROM customers;

Вывод таблицы в PostgreSQL

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

Собственно, создание отчёта из PostgreSQL

Для создания и редактирования шаблона отчёта был использован продукт FastReport for DBA – в него уже встроен плагин для доступа к PostgreSQL. Если же вы планируете работать с PostgreSQL из FastReport .NET, то вам предварительно нужно скомпилировать плагин из папки установки FastReport .NET \Extras\Connections\FastReport.Postgres, затем зарегистрировать полученную сборку в настройках дизайнера. Также возможно использование дизайнера FastReport Designer Community Edition из комплекта поставки FastReport Open Source, но следует помнить, что этот дизайнер сильно ограничен по возможностям.

Вся работа с шаблоном отчёта на данном этапе проводилась в операционной системе Windows с подключением к СУБД PostgreSQL, работающей на Astra Linux. Упреждая вопросы, сразу скажу, что можно было бы вести разработку шаблона в графическом интерфейсе Linux, но на данный момент есть единственный продукт способный это делать – FastReport Mono. Настройка и использование фреймворка Mono на Astra Linux выходит за рамки данной статьи. Другой вариант – использование FastReport Online Designer, но он требует приобретения лицензии и не подходит для наших примеров в демонстрационной редакции.

Итак, запускаем дизайнер отчётов FastReport, выбираем создание нового отчёта и переходим к настройке подключения к СУБД PostgreSQL:

Подключение к PostgreSQL из FastReport

Далее выбираем таблицу для экспериментов, в нашем случае это employees:

Выбор таблиц для отчёта из PostgreSQL

Далее переходим к разработке шаблона отчёта. Простые руководства как сделать простой отчёт, можно посмотреть на Youtube канале. В результате мы получили такой результат:

Дизайнер шаблона отчёта FastReport

После создания шаблона отчёта можно его протестировать – вызвать предварительный просмотр:

Просмотр отчёта из PostgreSQL

В нашем случае именно этот шаблон отчёта попал к вам вместе с демонстрационным примером, который вы скачали ранее с GitHub.

Строим отчёт в Astra Linux

Возвращаемся к сборке примера веб-приложения. В качестве прототипа послужил стандартный шаблон MVC приложения, который создается командой:

dotnet new mvc

После создания проекта была добавлена модель /Models/HomeModel.cs:

public class HomeModel
{
 public WebReport WebReport { get; set; }
}

Затем были внесены правки в контроллер /Controllers/HomeController.cs - добавлен следующий код:

public IActionResult Index()
{
 var model = new HomeModel();
 model.WebReport = new WebReport();
 model.WebReport.Report.Load(
 Path.Combine("Reports", "postgres.frx"));
 model.WebReport.DesignerLocale = "ru";
 model.WebReport.Width = "100%";
 model.WebReport.Height = "800";
 // model.WebReport.Mode = WebReportMode.Designer;
 return View(model);
}

В файле Startup.cs в функцию Configure добавлен вызов:

app.UseFastReport();

Затем зарегистрирован плагин для подключения к PostgreSQL:

FastReport.Utils.RegisteredObjects.AddConnection(
 typeof(FastReport.Data.PostgresDataConnection));

Чтобы была возможность обращаться к запущенному приложению с других компьютеров в подсети, в файле Program.cs изменена функция CreateHostBuilder:

1
2
3
4
5
6
7
public static IHostBuilder CreateHostBuilder(string[] args) =>
 Host.CreateDefaultBuilder(args)
 .ConfigureWebHostDefaults(webBuilder =>
 {
 webBuilder.UseStartup<Startup>();
 webBuilder.UseUrls("http://0.0.0.0:8080");
 });

В папке Reports размещен тестовый шаблон отчёта, который был сделан ранее.

В проекте использованы Nuget пакеты FastReport .NET, они будут автоматически скачаны в момент начала сборки. Перечень пакетов хранится в файле core.csproj. Эти пакеты можно заменить на аналогичные по функционалу от продукта FastReport Open Source, если вам будет достаточно его возможностей.

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

cd ~/FastReportSamples/PostgreSQL/dotnet-5
dotnet build
dotnet run

 Запуск .net5 приложения на Astra Linux

Запускаем браузер и открываем адрес http://localhost:8080

Отчёт в Astra Linux

Если у вас есть другой компьютер под рукой (например, хостовый компьютер в случае с Hyper-V), запускаем браузер там и обращаемся к серверу под управлением Astra Linux:

Отчёт на сервере Astra Linux

Открываем отчёт для редактирования в Web

Если внимательно изучить код тестового приложения, то можно заметить закомментированную строку в файле /Controllers/HomeController.cs:

// model.WebReport.Mode = WebReportMode.Designer;

Если убрать этот комментарий, наш отчёт будет открыт в режиме редактирования в FastReport Online Designer. В нашем примере его код должен находиться в папке /wwwroot/WebReportDesigner/. В данный момент там находится заглушка в виде файла index.html. Если у вас возникнет желание попробовать тестовый вариант FastReport Online Designer в этом или любом другом проекте, то вам необходимо написать соответствующий запрос в службу техподдержки компании Fast Reports support@fastreport.ru

FastReport Online Designer Astra Linux

Таким образом, редактирование будет доступно из любого современного браузера на любой платформе (включая планшеты, фаблеты и т.д.)

Нюансы

  • Нужно использовать идентичные шрифты в системе, где ведется разработка шаблонов отчётов и на сервере (или веб-приложении, если используются шрифты приложения) – это позволит избежать проблем с внешним видом веб-отчётов и PDF документов;
  • При работе с Astra Linux в консоли системы виртуализации Hyper-V интерфейс довольно сильно тормозит –  лучше установить VNC или настроить x-server на хостовом компьютере (например Xming);
  • Если есть необходимость запустить тестовое приложение под управлением .NET Core 2.2, то тестовый пример можно найти в папке ~/FastReportSamples/PostgreSQL/dotnet-core-2.2;
  • Есть возможность разработки не только веб-приложений, но и консольных программ - это позволит строить отчёты в PDF (и других форматах) путем вызова таких программ из других приложений;
  • Если вам нужна работа с отчётами в графическом интерфейсе Linux, то следует воспользоваться библиотекой FastReport Mono, так как поддержки интерфейса Linux в .NET 5 пока нет.

Подведем итоги

  • У нас есть возможность разработки полноценного веб-приложения на платформе .NET 5 под управлением операционной системы Astra Linux;
  • FastReport работает в связке с PostgreSQL;
  • Продукты семейства FastReport могут работать в кросс-платформенных решениях и объединять в инфраструктуре разные платформы;
  • Библиотеки Fast Reports имеют варианты поставки в комплекте с исходными кодами, что делает возможной последующую сертификацию.
12 августа 2024

Как собрать и установить плагин Postgres в FastReport .NET

В этой статье описывается подключение к базе посредством плагина FastReport .NET для дизайнера отчетов из Visual Studio через NuGet-сервер.
22 марта 2023

Создание PDF отчета в JetBrains Rider (C#) на «Альт Рабочая станция К» 10

В этой статье мы взглянем на платформу .NET в «Альт Рабочая станция К» 10 и создадим отчет, который можно экспортировать в PDF.
6 сентября 2022

Закончилась эпоха WinForms, началась FastReport.Core.Skia

Новый графический движок SkiaSharp для создания качественных отчётов и корректного экспорта в разные форматы доступен в FastReport .NET.