Разработка для DirectumRX. Интеграция с API.

42 1

Однажды у одного из наших клиентов возникла задача интегрировать DirectumRX с одной из своих систем, посредством использования WebAPI. Суть достаточно проста - нужно договорам в DirectumRX в качестве признака проставить сущность из другой системы. Для реализации подобного решения была выбрана реализация встроенными средствами прямого обращения к WebAPI без использования полноценной синхронизации двух систем, поскольку такая синхронизация в данный момент клиенту была попросту не нужна.

Для того, чтобы решить эту задачу нам понадобится:

  • DirectumRX (версии 2.8)
  • Само API
  • Visual Studio

Для начала добавим в карточку договора 2 поля - наименование и ИД документа из внешней системы, а также действие для открытия выбора внешнего договора.

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

Также добавим действие в узле “Действия” для Договоров, и разместим кнопку действия и поля на форме.

Остается только одно - написать обработчик самого действия. Но тут возникает проблема - официальной документацией прямо запрещено использовать большинство классов .Net Framework в прикладном коде DirectumRX, поэтому, для реализации взаимодействия с WebAPI внешней системы было решено создать стороннюю библиотеку, и использовать ее в прикладном коде.

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

  • Для того, чтобы использовать библиотеку - нужно ее добавить в модуль, либо в решение, в пункт “Сторонние библиотеки”. 

  • Каждая добавленная .dll-библиотека отображается со значком  (что означает - можно использовать данную сборку в прикладном коде), либо со значком  (значит данную сборку использовать в прикладном коде нельзя);
  • Для того, чтобы вы могли использовать свою библиотеку в прикладном коде - обязательно подпишите сборку! Сделать это можно в Visual Studio, в Project Settings, в пункте Signing. Подписывайте с помощью .snk-файла, который можно создать в том же окне.

 

Исходный код созданной библиотеки, подписанный экземпляр dll доступен тут - C# - RestClient

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

Создаем обработчик - переходим в действия, выбираем действие, жмем на ссылку “Выполнение” для создания функции обработчика.

Внутри я написал такой код:

public virtual void GetExternalContractscentrvd(Sungero.Domain.Client.ExecuteActionArgs e)
    {
      //Создаем экземпляр клиента, получающий определенный тип сущности, задаем адрес WebAPI для запроса
      var client = new RestClient.AppDomain.Implementations.ServiceEntityClient("http://www.mocky.io/v2/5ca9e6733700002b0b492eee");
      //Получаем список сущностей
      var d = client.Get();
      
      //Создаем диалог
      var dialog = Dialogs.CreateInputDialog("Выберите название");
      //Наша сущность состоит из 2-х полей - наименование и ИД, заберем список наименований для отображения в выборе
      var names = d.Select(l => l.name).ToArray();

      //Добавляем поле выбора (выпадающее меню), заполняем его данными
      var select = dialog.AddSelect("Значение", true).From(names);

      //Если диалог не был принудительно закрыт - берем значение, подставляем имя и ИД в поля карточки договора
      if (dialog.Show() == DialogButtons.Ok)
      {
        _obj.ExternalContractNamecentrvd = select.Value;
        _obj.ExternalContractIdcentrvd = d.Where(l => l.name == select.Value).First().id.ToString();
      }
    }

Остается протестировать - публикуем решение, открываем клиент.
Переходим в карточку договора, нажимаем кнопку “Внешний договор”, выбираем из списка значение, и нажимаем OK.

Все отработало как надо, а значит цель достигнута.

42
Авторизуйтесь, чтобы оценить материал.
8
Александр Гурин

Авторизуйтесь, чтобы написать комментарий