Разработка веб-плагинов

С помощью веб-плагинов создаются:

  • Новые типы представлений.
  • Компоненты мнемосхем.
  • Отчётные формы.
  • Веб-страницы для работы с данными.

Рассмотрим разработку веб-интерфейса и интерфейса для настройки простого плагина, который будет иметь кодовое обозначение PlgAbc. Для разработки сложных плагинов изучите и используйте в качестве примеров исходный код существующих плагинов на GitHub.

Реализация веб-интерфейса

Создайте новый проект на основе шаблона Razor Class Library. Введите наименование проекта PlgAbc, выберите фреймворк .NET 8.0 и поставьте галочку Support pages and views.

Добавьте зависимости на библиотеки ScadaCommon.dll, ScadaCommon.Log.dll и ScadaWebCommon.dll. Актуальные бинарные файлы этих библиотек можно найти в директории установки Rapid SCADA, либо собрать самостоятельно из исходного кода.

По двойному щелчку в Solution Explorer откройте файл проекта PlgAbc.csproj и отредактируйте его свойства, как показано ниже.

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
  <Nullable>disable</Nullable>
  <ImplicitUsings>enable</ImplicitUsings>
  <AddRazorSupportForMvc>true</AddRazorSupportForMvc>
  <RootNamespace>Scada.Web.Plugins.PlgAbc</RootNamespace>
</PropertyGroup>

Создайте класс PluginInfo и скопируйте код, который приведён ниже. Этот класс содержит информацию, описывающую плагин.

namespace Scada.Web.Plugins.PlgAbc
{
    internal class PluginInfo : LibraryInfo
    {
        public override string Code => "PlgAbc";
        public override string Name => "Плагин ABC";
        public override string Descr => "Простой пример плагина";
    }
}

Создайте класс PlgAbcLogic, код которого показан ниже. Этот класс реализует базовую логику работы плагина. Обратите внимание, что пространство имён и имя класса должны содержать код плагина PlgAbc. Изучите исходный код базового класса PluginLogic, чтобы узнать о возможностях, доступных при реализации логики плагина.

using Scada.Data.Entities;
using Scada.Web.Services;
using Scada.Web.TreeView;
using Scada.Web.Users;

namespace Scada.Web.Plugins.PlgAbc
{
    public class PlgAbcLogic : PluginLogic
    {
        public PlgAbcLogic(IWebContext webContext)
            : base(webContext)
        {
            Info = new PluginInfo();
        }

        public override List<MenuItem> GetUserMenuItems(User user, UserRights userRights)
        {
            return
            [
                new() { Text = "ABC", Url = "~/Abc/MyPage", SortOrder = MenuItemSortOrder.First }
            ];
        }
    }
}

Создайте пустую страницу Razor Page с именем MyPage.cshtml, расположенную в области Abc. Структура проекта показана на следующем рисунке.

Структура проекта PlgAbc

Содержимое модели страницы MyPage.cshtml.cs показано ниже. Чтобы лучше понять исходный код страницы, рекомендуется изучить интерфейсы сервисов, которые доступны в веб-приложении через механизм dependency injection.

using Microsoft.AspNetCore.Mvc.RazorPages;
using Scada.Web.Services;

namespace Scada.Web.Plugins.PlgAbc.Areas.Abc.Pages
{
    public class MyPageModel(IWebContext webContext, IUserContext userContext) : PageModel
    {
        public int ChannelCount => webContext.ConfigDatabase.CnlTable.ItemCount;
        public string UserName => userContext.UserEntity.Name;
    }
}

Файл вёрстки страницы MyPage.cshtml имеет следующее содержимое:

@page
@model Scada.Web.Plugins.PlgAbc.Areas.Abc.Pages.MyPageModel
@{
    Layout = "_MainLayout";
    ViewBag.Title = "Моя страница";
}

<h1>Моя страница</h1>
<p>Количество каналов: @Model.ChannelCount</p>
<p>Текущий пользователь: @Model.UserName</p>

Пример веб-интерфейса плагина готов. Выполните сборку проекта и скопируйте PlgAbc.dll в корневую директорию приложения Вебстанция.

Реализация интерфейса для настройки

Создайте новый проект на основе шаблона Class Library. Введите наименование проекта PlgAbc.View, выберите фреймворк .NET 8.0.

Добавьте зависимости на библиотеки ScadaCommon.dll и ScadaWebCommon.Subset.dll.

По двойному щелчку в Solution Explorer откройте файл проекта PlgAbc.View.csproj и отредактируйте его свойства, как показано ниже.

<PropertyGroup>
  <TargetFramework>net8.0</TargetFramework>
  <ImplicitUsings>enable</ImplicitUsings>
  <Nullable>disable</Nullable>
  <RootNamespace>Scada.Web.Plugins.PlgAbc.View</RootNamespace>
</PropertyGroup>

Добавьте ранее созданный файл PluginInfo.cs в проект как ссылку. Обратите внимание, что значок файла изображает ссылку.

Структура проекта PlgAbc.View

Создайте класс PlgAbcView и скопируйте код, который приведён ниже. Этот класс реализует пользовательский интерфейс плагина для приложения Администратор. Обратите внимание, что пространство имён и имя класса должны содержать код плагина PlgAbc. В нашем примере пользовательский интерфейс плагина фактически отсутствует, тем не менее необходима минимальная реализация интерфейса, чтобы плагин можно было использовать в приложении Администратор. Изучите исходный код базового класса PluginView, чтобы узнать о доступных возможностях.

namespace Scada.Web.Plugins.PlgAbc.View
{
    public class PlgAbcView : PluginView
    {
        public PlgAbcView()
        {
            Info = new PluginInfo();
        }
    }
}

Выполните сборку проекта и скопируйте PlgAbc.View.dll в директорию библиотек Администратора ScadaAdmin\Lib

Запуск плагина

Запустите приложение Администратор или перезапустите его, если оно было открыто. Создайте и откройте копию проекта HelloWorld, затем в разделе Вебстанция > Плагины найдите разработанный плагин. Убедитесь, что при выборе плагина его описание корректно отображается. Если при отображении описания плагина возникла ошибка, скорее всего, допущена неточность в пространстве имён или имени класса интерфейса для настройки плагина.

Включите плагин PlgAbc и передайте проект на выполнение. В приложении Вебстанция перейдите на Главное меню > ABC, чтобы открыть веб-страницу, которую предоставляет разработанный плагин.