Пример расширения Службы фоновых операций

Демонстрационный вариант расширения Службы фоновых операций, расположенный в репозитории Docsvision на GitHub. Расширение получает ID карточки документа и конвертирует приложенные файлы в формат PDF/A.

Перечень необходимых инструментов:
  • Visual Studio 2017/2019

Сборка

  1. Откройте /Samples.sln.

  2. Соберите проект Others > SampleWorkerExtension.

  3. Соберите проект Samples\Others\SampleWorkerExtension\SampleWorkerExtension.WebClientExtension\SampleWorkerExtension.WebExtension.

  4. Выполните npm i, npm run build.

  5. Соберите пример взаимодействия с сервисом конвертации.

Установка

  1. Отправьте в GAC сборки, полученные в пункте 2 выше.

    gacutil.exe -if DocsVision.SampleWorkerExtension.Manager.dll
    gacutil.exe -if DocsVision.SampleWorkerExtension.ObjectModel.dll
    gacutil.exe -if DocsVision.SampleWorkerExtension.WorkerService.dll
    gacutil.exe -if ru\DocsVision.SampleWorkerExtension.WorkerService.resources.dll
  2. Добавьте сборки DocsVision.SampleWorkerExtension.Role.dll вместе с ресурсами ru\DocsVision.SampleWorkerExtension.Role.resources.dll и конфигурационный файл SampleWorkerExtension.json (находится в проекте SampleWorkerExtension.Role) в папку Консоли управления Docsvision.
    Если папка с расширениями отсутствует, создайте вручную. Например, C:\Program Files (x86)\Docsvision\ManagementConsole\SampleExtensions.

  3. Добавьте сборку DocsVision.SampleWorkerExtension.WorkerExtension.dll в папку WorkerService. Например, C:\Program Files (x86)\Docsvision\WorkerService\5.5\Extensions.

    В сборке DocsVision.SampleWorkerExtension.WorkerExtension.dll реализован класс наследник IRoleTemplateProvider. Если вы будете редактировать файл и переносить этот класс в другую сборку, не забудьте положить уже новую сборку в папку в папку WorkerService, иначе ваше расширение не будет доступно для Службы фоновых операций.

  4. Установите серверное и клиентское расширения для Web-клиента, которые находятся в Others\SampleWorkerExtension\SampleWorkerExtension.WebClientExtension (инструкция внутри проекта).

  5. Установите пример взаимодействия с сервисом конвертации.

  6. Отредактируйте конфигурационный файл Сервиса внешнего API Консоли управления Docsvision по адресу C:\Program Files (x86)\Docsvision\ManagementConsoleExternalAPI\DocsVision.ManagementConsole.ExternalAPI.WindowsService.exe.config.

  7. В секцию Libraries конфигурационного файла добавьте строку, содержащую SampleWorkerExtension.WorkerService следующим образом:

    <Libraries>
      <add Path="DocsVision.BackOffice.ObjectModel, Version=5.5.0.0, Culture=neutral, PublicKeyToken=7148afe997f90519" />
      <add Path="DocsVision.SampleWorkerExtension.WorkerService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4a2caa47aa5b6b29" />
    </Libraries>

Проверка

  1. Откройте Консоль управления Docsvision и создайте новый процесс Службы фоновых операций с типом конфигурации Расширение для WorkerService.

  2. В разметке документа Web-клиента (например, просмотр) создайте кнопку и добавьте для события При щелчке обработчик sendConversionTask.

  3. В Web-клиенте создайте документ и приложите к нему файлы. Сохраните документ и в открывшейся разметке нажмите созданную кнопку. Через некоторое время в секции файлов появятся файлы, конвертированные в формат PDF/A.

Проект "SampleWorkerExtension"

Проект содержит создание сообщения для Службы фоновых операций в серверном расширении SampleWorkerExtension.ServerExtension и расширении Web-клиента SampleWorkerExtension.WebExtension.

Проект-расширение для Web-клиента SampleWorkerExtension.ServerExtension содержит скрипт для создания сообщения для Службы фоновых операций. Проект демонстрирует расширение функционала с помощью добавления новых сервисов, контроллеров. Реализован контроллер SampleWorkerController с методом SendToWorker, который вызывает сервис ISampleWorkerService. В сервисе осуществляется создание сообщения для Службы фоновых операций с переданным идентификатором карточки, откуда был вызван скрипт.

Проект "SampleWorkerExtension.WebClientServerExtension"

Проект содержит клиентские скрипты, в которых при нажатии на кнопку с помощью сервиса requestManager отправляется запрос на сервер. После конвертации файла в .pdf, он отображается в карточке.

Разработка

При разработке собственного расширения необходимо дорабатывать или переписывать класс:

public class SampleEventHandlerService : EventHandlerService, ISampleEventHandlerService

При создании собственных событий будет реализовываться управление обработкой событий:

  public static readonly EventDescription ConvertCardFiles = new EventDescription { Id = new Guid("B2C6F070-C7F1-4F07-914F-94652804DD1C"), AutoSendToSelf = true, Concurrent = false };

        private readonly Dictionary<Guid, EventHandlerInfo> handlersInfo = new Dictionary<Guid, EventHandlerInfo>
        {
            {
                ConvertCardFiles.Id,
                new EventHandlerInfo
                    { EventId = ConvertCardFiles.Id, EventArgsType = typeof(SampleEventArgs), EventHandlerName = nameof(ProcessCardFiles) }
            }
        };

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

private const string SampleComponentTypeName = "SampleWorkerExtension.Manager.SampleApiManager, SampleWorkerExtension.Manager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=4a2caa47aa5b6b29";