Однажды у одного из наших клиентов возникла задача интегрировать DirectumRX с одной из своих систем, посредством использования WebAPI. Суть достаточно проста - нужно договорам в DirectumRX в качестве признака проставить сущность из другой системы. Для реализации подобного решения была выбрана реализация встроенными средствами прямого обращения к WebAPI без использования полноценной синхронизации двух систем, поскольку такая синхронизация в данный момент клиенту была попросту не нужна.
Для того, чтобы решить эту задачу нам понадобится:
Для начала добавим в карточку договора 2 поля - наименование и ИД документа из внешней системы, а также действие для открытия выбора внешнего договора.
Сразу запретим редактирование свойств, чтобы изменить поля можно было только через диалог выбора.
Также добавим действие в узле “Действия” для Договоров, и разместим кнопку действия и поля на форме.
Остается только одно - написать обработчик самого действия. Но тут возникает проблема - официальной документацией прямо запрещено использовать большинство классов .Net Framework в прикладном коде DirectumRX, поэтому, для реализации взаимодействия с WebAPI внешней системы было решено создать стороннюю библиотеку, и использовать ее в прикладном коде.
Подробно процесс создания библиотеки описывать не буду, остановлюсь лишь на основных моментах:
Исходный код созданной библиотеки, подписанный экземпляр 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.
Все отработало как надо, а значит цель достигнута.
Авторизуйтесь, чтобы написать комментарий