Разработка веб-плагинов
С помощью веб-плагинов создаются:
- Новые типы представлений.
 - Компоненты мнемосхем.
 - Отчётные формы.
 - Веб-страницы для работы с данными.
 
Рассмотрим разработку веб-интерфейса и интерфейса для настройки простого плагина, который будет иметь кодовое обозначение 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. Структура проекта показана на следующем рисунке.
    Содержимое модели страницы 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 в проект как ссылку. Обратите внимание, что значок файла изображает ссылку.
    Создайте класс 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, чтобы открыть веб-страницу, которую предоставляет разработанный плагин.