Интеграция с веб-сервисом через бизнес-процесс
Распространённым кейсом использования интеграций является интеграция с веб-сервисом внешней системы (WebAPI). Рассмотрим пример получения курса доллара через Rest.
- Создадим модуль интеграции Получение курса валют с типом интеграции Rest API и типом аутентификации Без аутентификации.
2. Перейдём на вкладку Активити и добавим активити Получение RUB/USD, которое в дальнейшем сможем использовать в процессе.
3. В контекст активити добавим свойство Курс RUB/USD, в которое после выполнения сценария активити запишется полученный курс доллара.
На вкладке Дополнительные выставим точность числа — 6 знаков после запятой.
4. Также в активити добавим свойство URL запроса. В поле Значение по умолчанию напишем адрес Rest веб-сервиса получения курса валют.
5. Вернёмся в активити Получение RUB/USD и на вкладке Общие добавим сценарий GetDollarRate.
Пример кода сценария активити модуля интеграции:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using EleWise.ELMA.Model.Common;
using EleWise.ELMA.Model.Entities;
using EleWise.ELMA.Model.Managers;
using EleWise.ELMA.Model.Types.Settings;
using EleWise.ELMA.IntegrationModules.Activity;
using EleWise.ELMA.IntegrationModules.Models;
using Newtonsoft.Json;
namespace EleWise.ELMA.IntegrationModules.Activity.Scripts
{
/// <summary>
/// Модуль сценариев объекта "Получение RUB/USD"
/// </summary>
partial class rates_ActivityRUBUSDScripts
{
/// <summary>
/// GetDollarRate
/// </summary>
/// <param name="integrationModule">Экземпляр модуля интеграции</param>
/// <param name="activity">Экземпляр активити</param>
/// <param name="authenticationObject">Объект аутентификации</param>
public virtual void GetDollarRate(EleWise.ELMA.IntegrationModules.IGetExchangeRate integrationModule, EleWise.ELMA.IntegrationModules.Activity.Iger_Activity activity, object authenticationObject)
{
var httpClient = new HttpClient();
var response = httpClient.Get(activity.RequestURL);
var result = string.Empty;
using (var streamReader = new StreamReader(response.GetResponseStream()))
{
result = streamReader.ReadToEnd();
}
var deserializedResult = JsonConvert.DeserializeObject<Response>(result);
activity.ExchangeRate = deserializedResult.rates.USD;
}
private class RatesResponse
{
public double USD { get; set; }
}
private class Response
{
public RatesResponse rates { get; set; }
}
}
}
6. Сохраним активити и опубликуем модуль интеграции.
7. Создадим процесс, который будет получать курс и выводить его пользователю следующей задачей. Для этого:
- создадим в контексте процесса переменную Курс RUB/USD типа Дробное число для маппинга и вывода курса;
- на диаграмму процесса вынесем активити интеграции Получение RUB/USD, которое мы создали ранее;
- в поле Тип задания настроек укажем Настройки интеграции и выходные переменные, как показано на рисунке ниже.
8. Для вывода курса пользователю добавим переменную Курс RUB/USD на форму задачи Ознакомиться с USD, следующей за активити. Установим значение Только на чтение.
В системе это будет выглядеть следующим образом:
9. Опубликуем процесс и запустим его.