Разработка расширения с методами WebApi

Данный раздел содержит пример добавления новых web-методов, реализующих функции взаимодействия с сервером Docsvision (создание и изменение карточек, изменение данных, запуск бизнес-процессов), а также выполнения других задач, для которых необходимы возможности сервера Web-клиента.

Чтобы создать расширение, добавляющее новые методы WebApi, выполните приведенную далее инструкцию.

  1. Создайте проект серверного расширения.

  2. Добавьте в проект класс WebApi контроллера (производный от System.Web.Http.ApiController).

  3. Реализуйте в классе контроллера веб-методы.

    Следующий код демонстрирует пример реализации контроллера с методом, проверяющим существование карточки в Docsvision.

    using DocsVision.BackOffice.ObjectModel;
    using DocsVision.Platform.WebClient.Helpers;
    using System;
    using System.Web.Http;
    
    namespace WebApiServerExtension
    {
        public class CardServiceController : ApiController
        {
            private readonly ICurrentObjectContextProvider currentObjectContextProvider; (1)
    
            public CardServiceController(ICurrentObjectContextProvider currentObjectContextProvider) (2)
            {
                this.currentObjectContextProvider = currentObjectContextProvider;
            }
    
            [HttpGet]
            public bool Exists(Guid cardId) (3)
            {
                var objectContext = currentObjectContextProvider.GetOrCreateCurrentSessionContext().ObjectContext; (4)
    
                try
                {
                    var card = objectContext.GetObject<BaseCard>(cardId); (5)
    
                    return (card != null); (6)
                }
                catch
                {
                    return false;
                }
            }
        }
    }
    1 В конструкторе контроллера получаем ссылку на сервис-провайдер,
    2 Из сервис-провайдера можно получать различные сервисы объектной модели, а также сервис для получения контекста объектов.
    3 Метод, проверяющий существует ли карточка с идентификатором cardId. Если карточка существует, метод возвращает true, иначе — false.
    4 Получаем пользовательский контекст объектов.
    Всегда нужно получать контекст объектов заново. Дополнительная информация в пункте Получение контекста объектов в серверном расширении.
    5 Получаем карточку с указанным идентификатором.
    6 Возвращаем true, если при получении карточки из контекста объектов не было ошибки и полученный объект не null.
  4. Скомпилируйте проект и скопируйте полученную сборку на сервер Web-клиента в папку /lib/docsvision/webclient/Extensions/%Каталог Решения%. Перезапустите dvwebclient.

    Для проверки работоспособности примера, откройте в веб-браузере страницу http://%WebCinstallDir%/DocsvisionWebClient/api/CardService/Exists?cardId=<CardID>. Вместо CardID укажите идентификатор любой существующей карточки. Метод вернет значение true (если карточки не существует — false).

    Пример клиентского расширения, использующего метод Exists, приведён в пункте Разработка расширения с клиентским сервисом.