logo

Интеграция с веб-сервисом через бизнес-процесс

Распространённым кейсом использования интеграций является интеграция с веб-сервисом внешней системы (WebAPI). Рассмотрим пример получения курса доллара через Rest.

  1. Создадим модуль интеграции Получение курса валют с типом интеграции 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. Опубликуем процесс и запустим его.