<< Click to Display Table of Contents >> Интеграция с внешними системами > Настройка интеграции Разработка консольного приложения для интеграции |
В разделе описан общий порядок настройки интеграции с помощью консольного приложения на языке C# с использованием библиотеки Simple.OData.Client. При написании кода можно использовать один из API:
•Basic API – каждый метод вызывается в отдельной строке;
•Fluent API – вызов методов можно объединять в одной строке.
Оба API обеспечивают весь набор операций протокола OData, поэтому выбор зависит от дизайна приложения и предпочтений разработчика.
Порядок разработки приложения рассмотрен на примере.
Ситуация
Предположим, во внешнюю систему нужно передать список всех имеющихся в системе Directum RX приложений-обработчиков (AssociatedApplications) и приложение-обработчик, у которого свойство Идентификатор (Id) равно 2. Для этого нужно отправить GET-запросы к сервису интеграции.
ПРИМЕЧАНИЕ. В разделе рассмотрена ситуация, когда разработка ведется в отдельной локальной системе Directum RX или в тестовом контуре. В этом случае для работы достаточно незашифрованного соединения с помощью протокола HTTP, а для аутентификации в сервисе интеграции используется базовая аутентификация.
Подготовка к разработке
1.Проверьте, что сервис интеграции запущен.
Запустите Диспетчер задач. В списке запущенных процессов должен быть процесс сервиса Sungero.IntegrationService.Host.exe. Если процесса нет в списке, посмотрите записи в лог-файлах сервиса и агента ServiceRunner и исправьте ошибки.
Проверьте состояние контейнера сервиса командой:
docker ps -a
Контейнер с образом integrationservice должен находиться в состоянии Healthy. Если он находится в состоянии Unhealthy, посмотрите записи в лог-файлах сервиса и исправьте ошибки.
2.Получите метаданные OData. Для этого откройте браузер и в адресной строке введите адрес в формате:
{Протокол https или http}://{имя сервера, на котором установлен сервис интеграции}/{имя сервиса интеграции}/odata/$metadata
Пример:
https://DirectumRXServer.com/Integration/odata/$metadata
В результате откроется страница с метаданными в формате XML:
Если страница не открывается, посмотрите записи в лог-файлах сервиса и исправьте ошибки.
Порядок разработки
1.В среде разработки, например Visual Studio, создайте консольное приложение.
2.Чтобы установить библиотеку Simple.OData.Client, используйте меню Управление пакетами NuGet или в консоли управления пакетами введите команду:
Install-Package Simple.OData.Client
3.В редакторе кода импортируйте необходимые пространства имен, в том числе Simple.OData.Client. Это необходимо, чтобы описанные далее примеры кода запустились без ошибок.
4.Чтобы отправить запрос к сервису интеграции, в строке адреса должен быть указан URL запроса – адрес сервиса интеграции. Кроме того, чтобы обмениваться данными с Directum RX, внешняя система должна пройти аутентификацию в сервисе интеграции. Чтобы при переносе в продуктивный контур код было проще дорабатывать, для обязательных данных создайте константы:
•IntegrationServiceUrl – URL сервиса интеграции;
•Login – учетная запись для базовой аутентификации;
•Password – пароль для базовой аутентификации.
После указанных в предыдущем пункте строк добавьте код:
// URL сервиса интеграции.
private const string IntegrationServiceUrl = "http://localhost/Integration/odata/";
// Логин для Basic-аутентификации.
private const string Login = "IntegrationUser";
// Пароль для Basic-аутентификации.
private const string Password = "11111";
5.Для всех запросов настройте добавление URL запроса и обязательных заголовков. Для этого ниже блока констант добавьте код:
// Настройки Simple OData Client: добавление ко всем запросам URL сервиса и
// заголовка с данными аутентификации.
var odataClientSettings = new ODataClientSettings(new Uri(IntegrationServiceUrl));
odataClientSettings.BeforeRequest += (HttpRequestMessage message) =>
{
var authenticationHeaderValue = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Login}:{Password}"));
message.Headers.Add("Authorization", "Basic " + authenticationHeaderValue);
};
var odataClient = new ODataClient(odataClientSettings);
6.Чтобы отправить GET-запрос, который возвращает список всех имеющихся в системе приложений-обработчиков, напишите код с использованием одного из API:
Basic API
// Получить все сущности типа IAssociatedApplication через basic API.
var associatedApplications = await odataClient.FindEntriesAsync("IAssociatedApplications");
foreach (var associatedApplication in associatedApplications)
foreach (var property in associatedApplication)
// В консоль выведутся имена и значения свойств для каждой сущности.
Console.WriteLine($"{property.Key}: {property.Value}");
Fluent API
// Получить все сущности типа IAssociatedApplication через fluent API.
DynamicODataEntry s;
var x = ODataDynamic.Expression;
var associatedApplicationsFluent = await odataClient.For(x.IAssociatedApplications).FindEntriesAsync();
foreach (var associatedApplication in associatedApplicationsFluent)
// В консоль выведутся ИД и имена для каждой сущности.
Console.WriteLine($"ID: {associatedApplication.Id}, Name: {associatedApplication.Name}");
7.Чтобы отправить GET-запрос, который возвращает приложение-обработчик с свойством Id, равным 2, напишите код с использованием одного из API:
Basic API
// Получить единичную сущность типа IAssociatedApplication c ИД = 2 через basic API.
var id = 2;
var myAssociatedApplication = await odataClient.FindEntryAsync($"IAssociatedApplications({id})");
foreach (var property in myAssociatedApplication)
// В консоль выведутся имена и значения свойств для сущности.
Console.WriteLine($"{property.Key}: {property.Value}");
Fluent API
// Получить единичную сущность типа IAssociatedApplication c ИД = 2 через fluent API.
id = 2;
var myAssociatedApplicationFluent = await odataClient.For(x.IAssociatedApplications).Key(id).FindEntryAsync();
// В консоль выведутся ИД и имена для сущности.
Console.WriteLine($"ID: {myAssociatedApplicationFluent.Id}, Name: {myAssociatedApplicationFluent.Name}");
8.Запустите приложение. При необходимости отладьте код.
В результате в появившемся окне отобразится список всех приложений. Последней в списке будет строка «Microsoft Word» – приложение-обработчик, у которого свойство Id равно 2.
Подробнее о работе с библиотекой Simple.OData.Client см. официальную документацию.
Работа с датами
Для работы с датами рекомендуется использовать тип данных DateTimeOffset, так как он хранит информацию о смещении от UTC.
Пример. Получение даты создания документа
var x = ODataDynamic.Expression;
var id = 2;
var electronicDocument = odataClient.For(x.IElectronicDocuments).Key(id).FindEntryAsync().Result;
// Записать в переменную с типом DateTimeOffset дату создания документа.
DateTimeOffset documentCreatedDate = electronicDocument.Created;
Если приложение завершается с ошибкой или не запускается, отладьте его код. Для этого используйте конструкцию try…catch. Например, в следующем примере кода указано слишком большое значение свойства Id. Если такой записи не существует, то при вызове этой функции в появившемся окне будет выведен текст ошибки и ответ от сервиса интеграции:
try
{
var myAssociatedApplication2 = await odataClient.FindEntryAsync("IAssociatedApplications(2134)");
Console.WriteLine(myAssociatedApplication2["Name"]);
}
catch (WebRequestException ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.Response);
}
© Компания Directum, 2024 |