Создание и публикация серверного расширения

Серверное расширение представляет собой библиотеку DLL, разработанную на платформе .NET.

Ссылка на пример на GitHub: TemplateServerExtension.

Перечень необходимых инструментов

Пример рассчитан на версию Web-клиента 6.1 или выше. * Microsoft Visual Studio 2022. * Docsvision WebClient SDK (запрашивается через портал ТП).

Описание файлов проекта

  • В корне репозитория расположено решение для Visual Studio (Samples.sln) и ключ для подписания сборок примеров (StrongNameKey.snk). Рекомендуется использовать Visual Studio 2022.

  • Assemblies — сборки, необходимые для использования примеров

  • ServerExtension.cs — входная точка расширение, в которой регистрируются сервисы и прочие сущности.

  • Sign.snk — файл подписи сборки. Для установки сборки должны быть подписаны. Рекомендуется сгенерировать новый файл подписи в настройках проекта.

  • Resource.resx, Resource.ru.resx — локализации, используемые в расширении.

  • Feature1 — папка, содержащая реализацию некоторой функциональности.

  • Feature1/Feature1Controller.cs — класс, регистрирующий конечные точки Web API.

  • Feature1/IFeature1Service.cs и Feature1/Feature1Service.cs — интерфейс и реализация сервиса, реализующего логику обработки запроса.

  • Feature1/Models — классы моделей, используемых в сервисе и контроллере.

Сборка и установка

Чтобы создать серверное расширение:
  1. Убедитесь, что установлен Docsvision WebClient SDK.

    В этом случае в переменной окружения DocsvisionWebClientSDK содержится путь к его папке, например, C:\Program Files (x86)\Docsvision\WebClient\SDK.

  2. Установите шаблон серверного расширения и создайте на его основе новый проект с названием LearnDocvisionServerExtension.

  3. Обновите в проекте ссылки на зависимости.

    После крупного обновления версии Docsvision, необходимо повторно скомпилировать расширение с новыми версиями компонентов. В остальных случаях такой необходимости нет.

    Это необходимо, чтобы версии подключаемых компонентов соответствовали версиям компонентов, используемых сервером Web-клиента, для которого разрабатывается расширение.

  4. Реализуйте в проекте функции серверного расширения.

    Примеры кода серверных расширений приведены в следующих пунктах раздела, а также в репозитории "ДоксВижн".

  5. Настройте ядро серверного расширения.

    Ядром серверного расширения называется файл ServerExtension.cs в проекте расширения. Ядро является производным от WebClientExtension классом, содержащим ссылки на реализуемые функции расширения.

    public class ServerExtension : WebClientExtension
    {
        public ServerExtension(IServiceProvider serviceProvider)
            : base()
        {
        }
    
        public override string ExtensionName (1)
        {
            get { return Assembly.GetAssembly(typeof(ServerExtension)).GetName().Name; }
        }
    
        public override Version ExtensionVersion (2)
        {
            get { return new Version(FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion); }
        }
    
        public override void InitializeServiceCollection(IServiceCollection services) (3)
        {
    (4)
            services.AddSingleton<IFeature1Service, Feature1Service>();
        }
    
        protected override List<ResourceManager> GetLayoutExtensionResourceManagers()
        {
            return new List<ResourceManager>
            {
    
            };
        }
    (5)
    
    }
    1 Название расширения.
    2 Версия расширения.
    3 Метод регистрации добавляемых расширением сервисов, преобразователей, конвертеров и т.п. в IoC контейнере.
    4 Примеры регистрации.
    5 Далее идут функции, возвращающие реализованные функции серверного расширения.

    Описание изменений, которые необходимо выполнить в ядре расширения, приведено в описании примеров расширений, добавляющих обработчики событий и локализованные ресурсы.

    В серверном расширении Web-клиента используется IoC контейнер, реализованный с использованием библиотеки Autofac. Описание данной библиотеки и её возможностей см. на сайте autofac.org.

  6. Скомпилируйте проект.

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

  7. Скопируйте safeprojectnamesafeprojectname.dll и safeprojectnamesafeprojectname.dll.pdb из папки bin  WebClient  Bin в Каталог-установки-Web-клиента  Site  bin.

    Расширения можно устанавливать в папки Site  Extensions и Site  bin. В ходе разработки расширения можно удобнее устанавливать в папку Site  bin, т.к. это избавляет от необходимости перезапускать dvwebclient при установке сборок.

    В ресурсной поставке рекомендуется устанавливать сборки в папку Site  Extensions, чтобы проще было видеть, какие расширения установлены в Web-клиенте. Однако этот способ требует перезапуска dvwebclient при установке или обновлении сборки.

  8. Перезапустите dvwebclient.

Проверка работы

  1. Откройте Web-клиент.

  2. Откройте диалог "О программе" и убедитесь, что расширение присутствует в списке подключенных расширений.

  3. Откройте произвольный документ и в консоли браузера выполните:

    $ await layoutManager.cardLayout.getService("requestManager").post("api/Feature1/Action1", JSON.stringify({ documentId: layoutManager.cardLayout.getService("cardId") }));
  4. Обновите документ, убедиться, что в названии добавился знак.