Выбор способа интеграции с bpm'online
Glossary Item Box
Общие сведения
Вpm'online предлагает широкие возможности для интеграции со сторонними программными продуктами. Выбор способа интеграции зависит от потребностей клиента, типа и архитектуры сторонних программных продуктов, компетенции разработчика. Сравнение основных характеристик поддерживаемых способов интеграции с bpm'online приведено в таблице 1.
Табл. 1. — Сравнение основных способов интеграции с bpm'online
DataService | OData | Конфигурационный сервис | Web-to-Object | iframe |
---|---|---|---|---|
Поддерживаемые форматы обмена данными |
||||
XML, JSON, JSV, CSV | XML, JSON | XML, JSON | JSON | Нет |
Решаемые задачи |
||||
CRUD-операции с объектами bpm'online, фильтрация данных и использование встроенных макросов bpm'online |
CRUD-операции с объектами, добавление и удаление связей, получение метаданных, коллекций, полей объектов, сортировка и др. |
Любые требуемые пользовательские задачи, которые можно решить в рамках открытого API bpm’online | Только добавление объектов | Только взаимодействие с пользовательским интерфейсом интегрированного стороннего веб-приложения (веб-страницы) |
Сложность использования |
||||
Высокая | Средняя | Средняя | Средняя | Низкая |
Способы аутентификации |
||||
Forms | Basic, Forms | Anonymous, Forms — в зависимости от реализации сервиса. | Forms | Forms (с помощью bpm'online) |
Наличие вспомогательных клиентских библиотек |
||||
Можно использовать .dll-библиотеки bpm'online только для .NET приложений |
Есть |
Не нужны | Не нужны | Не нужны |
Разработчик |
||||
bpm'online | Microsoft | bpm'online | bpm'online | bpm'online |
Краткое описание, основные преимущества и недостатки каждого из способов представлены ниже.
Интеграция с помощью DataService
Веб-служба DataService — основное связующее звено клиентской и серверной частей bpm'online. Именно с ее помощью выполняется передача данных, введенных пользователем с помощью пользовательского интерфейса, в серверную часть приложения для последующей обработки и сохранения в базу данных. Подробное описание DataService и основные операции, выполняемые этой службой, приведены в статье "Веб-служба DataService".
Основные преимущества и возможности интеграции
- Обмен данными с помощью XML, JSON, JSV, CSV.
- Доступны операции создания, чтения, обновления и удаления объектов bpm'online (CRUD-операции). При этом можно использовать встроенные макросы и фильтровать данные. Сложные запросы можно выполнять пакетно.
- Для доступа необходима авторизация пользователя.
Недостатки
- Высокая сложность построения запросов.
- Необходимость глубоких знаний для разработки.
- Отсутствие вспомогательных библиотек для популярных прикладных и мобильных платформ.
Пример
Пример исходного кода простого приложения для отправки запроса на добавление данных к веб-службе DataService приведен ниже. В нем выполняется формирование запроса для создания нового контакта, для которого заполняются основные колонки. Подробно этот пример рассмотрен в статье "DataService. Создание записи. Пример".
using System; using System.Text; using System.IO; using System.Net; using System.Collections.Generic; using Terrasoft.Nui.ServiceModel.DataContract; using Terrasoft.Core.Entities; using System.Web.Script.Serialization; namespace DataServiceInsertExample { class Program { private const string baseUri = @"http://userapp.bpmonline.com"; private const string authServiceUri = baseUri + @"/ServiceModel/AuthService.svc/Login"; private const string insertQueryUri = baseUri + @"/0/DataService/json/reply/InsertQuery"; private static CookieContainer AuthCookie = new CookieContainer(); private static bool TryLogin(string userName, string userPassword) { bool result = false; // TODO: Реализация аутентификации. return result; } static void Main(string[] args) { if (!TryLogin("User1", "User1")) { return; } // Формирование JSON-объекта для запроса на добавление данных. // Используется контракт данных InsertQuery. var insertQuery = new InsertQuery() { RootSchemaName = "Contact", ColumnValues = new ColumnValues() }; var columnExpressionName = new ColumnExpression { ExpressionType = EntitySchemaQueryExpressionType.Parameter, Parameter = new Parameter { Value = "Иванов Иван Иванович", DataValueType = DataValueType.Text } }; var columnExpressionPhone = new ColumnExpression { ExpressionType = EntitySchemaQueryExpressionType.Parameter, Parameter = new Parameter { Value = "+12 345 678 00 00", DataValueType = DataValueType.Text } }; var columnExpressionJob = new ColumnExpression { ExpressionType = EntitySchemaQueryExpressionType.Parameter, Parameter = new Parameter { Value = "11D68189-CED6-DF11-9B2A-001D60E938C6", DataValueType = DataValueType.Guid } }; insertQuery.ColumnValues.Items = new Dictionary<string, ColumnExpression>(); insertQuery.ColumnValues.Items.Add("Name", columnExpressionName); insertQuery.ColumnValues.Items.Add("Phone", columnExpressionPhone); insertQuery.ColumnValues.Items.Add("Job", columnExpressionJob); var json = new JavaScriptSerializer().Serialize(insertQuery); byte[] jsonArray = Encoding.UTF8.GetBytes(json); // Отправка Http-запроса. var insertRequest = HttpWebRequest.Create(insertQueryUri) as HttpWebRequest; insertRequest.Method = "POST"; insertRequest.ContentType = "application/json"; insertRequest.CookieContainer = AuthCookie; insertRequest.ContentLength = jsonArray.Length; using (var requestStream = insertRequest.GetRequestStream()) { requestStream.Write(jsonArray, 0, jsonArray.Length); } using (var response = (HttpWebResponse)insertRequest.GetResponse()) { using (StreamReader reader = new StreamReader(response.GetResponseStream())) { Console.WriteLine(reader.ReadToEnd()); } } } } }
Интеграция с помощью протокола OData
Протокол Open Data (OData) — это открытый веб–протокол для запроса и обновления данных, базирующийся на архитектурном подходе REST с применением стандартов Atom/XML и JSON. Доступ к данным и объектам bpm'online по протоколу OData может получить любое стороннее приложение, которое поддерживает обмен сообщениями HTTP и может обрабатывать данные XML или JSON. При этом данные доступны в виде ресурсов, адресуемых через URI. Доступ к данным и их изменение осуществляется с помощью стандартных HTTP–команд GET, PUT/MERGE, POST и DELETE. Подробнее возможности протокола OData описываются в статье "Возможности интеграции с bpm'online по протоколу OData".
Основные преимущества и возможности интеграции
- Обмен данными с помощью XML, JSON.
- Множество операций с объектами bpm'online, в том числе CRUD-операции.
- Удобные функции работы со строками, датами и временем.
- Большое количество клиентских библиотек по работе с OData для популярных прикладных и мобильных платформ.
- Для доступа необходима авторизация пользователя.
Подробнее возможности интеграции с помощью протокола перечислены в статье "Возможности интеграции с bpm'online по протоколу OData".
Недостатки
- Сложность построения запросов.
- Необходимость глубоких знаний для разработки.
Пример
Пример исходного кода метода добавления новой записи контакта с помощью OData приведен ниже. Подробно этот пример рассмотрен в статье "Работа с объектами bpm'online по протоколу OData с использованием Http-запросов".
// POST <Адрес приложения bpm'online>/0/ServiceModel/EntityDataService.svc/ContactCollection/ public static void CreateBpmEntityByOdataHttpExample() { // Создание сообщения xml, содержащего данные о создаваемом объекте. var content = new XElement(dsmd + "properties", new XElement(ds + "Name", "Иван Иванов"), new XElement(ds + "Dear", "Иван")); var entry = new XElement(atom + "entry", new XElement(atom + "content", new XAttribute("type", "application/xml"), content)); Console.WriteLine(entry.ToString()); // Создание запроса к сервису, который будет добавлять новый объект в коллекцию контактов. var request = (HttpWebRequest)HttpWebRequest.Create(serverUri + "ContactCollection/"); request.Credentials = new NetworkCredential("BPMUserName", "BPMUserPassword"); request.Method = "POST"; request.Accept = "application/atom+xml"; request.ContentType = "application/atom+xml;type=entry"; // Запись xml-сообщения в поток запроса. using (var writer = XmlWriter.Create(request.GetRequestStream())) { entry.WriteTo(writer); } // Получение ответа от сервиса о результате выполнения операции. using (WebResponse response = request.GetResponse()) { if (((HttpWebResponse)response).StatusCode == HttpStatusCode.Created) { // Обработка результата выполнения операции. } } }
Интеграция с помощью пользовательского конфигурационного веб-сервиса
В bpm'online существует возможность создавать пользовательские веб-сервисы в конфигурации, с помощью которых можно реализовать специфические интеграционные задачи. Конфигурационный веб-сервис представляет собой RESTful-сервис, реализованный на базе технологии WCF. Создание пользовательского конфигурационного веб-сервиса подробно описано в статье "Как создать свой конфигурационный сервис".
Основные преимущества и возможности интеграции
- Обмен данными реализуется разработчиком любым удобным способом.
- Возможность реализации разработчиком любых операций с объектами bpm'online, в том числе CRUD-операций.
- Для доступа пользователя авторизация не обязательна.
Недостатки
- Необходимость разработки абсолютно всей функциональности сервиса.
- Необходимость глубоких знаний для разработки.
Пример
Пример исходного кода конфигурационного сервиса приведен ниже. Сервис добавляет к входящему параметру операции слово "changed!" и отправляет новое значение в HTTP- ответе. Подробно этот пример рассмотрен в статье "Как создать свой конфигурационный сервис".
namespace Terrasoft.Configuration.CustomConfigurationService { using System; using System.ServiceModel; using System.ServiceModel.Web; using System.ServiceModel.Activation; [ServiceContract] [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] public class CustomConfigurationService { [OperationContract] [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)] public string GetTransformValue(string inputParam) { // Изменение значения входящего параметра. var result = inputParam + " changed!"; return result; } } }
Интеграция с помощью механизма Web-To-Object
Web-to-Object — это механизм реализации простых односторонних интеграций с bpm'online. С его помощью можно создавать записи разделов bpm'onlinе (лиды, обращения заказы и т. п.), просто отправив необходимые данные сервису Web-to-Object.
Наиболее распространенные случаи использования сервиса Web-to-Object:
- Интеграция bpm'online с пользовательскими лендингами и веб-формами. Вызов сервиса выполняется из особым образом настроенной пользовательской веб-страницы (лендинга) после отправки данных заполненной формы посетителем.
- Интеграция с внешними системами, в результате работы которых должны создаваться объекты bpm'online.
Подробнее о механизме Web-To-Object можно узнать из статьи "Web-To-Object. Использование лендингов и веб-форм".
Основные преимущества и возможности интеграции
- Передача данных с помощью JSON.
- Простота создания объектов bpm'online.
- Для доступа необходим только адрес к сервису и идентификатор.
- Необходимость только начальных знаний для разработки.
Недостатки
- Передача данных только в bpm'online.
- Ограниченное количество объектов для использования. Необходимость доработки для использования пользовательских объектов.
Пример
Для использования сервиса необходимо отправить POST-запрос по адресу:
[Путь к приложению bpm'online]/0/ServiceModel/GeneratedObjectWebFormService.svc/SaveWebFormObjectData
Тип содержимого запроса — application/json. Кроме необходимых cookies, в содержимое запроса нужно добавить JSON-объект, содержащий данные веб-формы. Пример JSON-объекта, который содержит данные для создания нового контакта:
{ "formData":{ "formId":"d66ebbf6-f588-4130-9f0b-0ba3414dafb8", "formFieldsData":[ {"name":"Name","value":"John Smith"}, {"name":"Email","value":"j.smith@bpmoline.com"}, {"name":"Zip","value":"00000"}, {"name":"MobilePhone","value":"0123456789"}, {"name":"Company","value":"bpmonline"}, {"name":"Industry","value":""}, {"name":"FullJobTitle","value":"Sales Manager"}, {"name":"UseEmail","value":""}, {"name":"City","value":"Boston"}, {"name":"Country","value":"USA"}, {"name":"Commentary","value":""}, {"name":"BpmHref","value":"http://localhost/Landing/"}, {"name":"BpmSessionId","value":"0ca32d6d-5d60-9444-ec34-5591514b27a3"} ] } }
Интеграция сторонних сайтов с помощью iframe
Наиболее простой способ интеграции внешних решений в bpm'online. Используя HTML-элемент iframe, можно внедрить сторонние веб-приложения для отображения в bpm'online. Это позволяет просматривать сторонние веб-ресурсы (веб-страницы, видео и т. п.) непосредственно из bpm'online. Примеры интеграции с помощью iframe можно посмотреть в статьях "Интеграция сторонних сайтов с помощью iframe" и "Пример разработки приложения с пользовательским разделом" (Документация по разработке marketplace).
Основные преимущества и возможности интеграции
- Удобство просмотра сторонних веб-ресурсов из bpm'online.
- Необходимость только начальных знаний для разработки.
Недостатки
- Для передачи данных необходима доработка или использование других способов интеграции.
- Не все сайты разрешают загрузку своих страниц в элемент iframe.
Пример
Пример исходного кода схемы модели представления страницы редактирования bpm'online, в которую внедрен элемент iframe, приведен ниже. На странице, в элементе iframe отображается web-сайт, для которого указан URL в объекте, с которым связана страница. Подробно этот пример рассмотрен в статье "Пример разработки приложения с пользовательским разделом". Другой подход рассмотрен в статье "Интеграция сторонних сайтов с помощью iframe".
define("tsaWebData1Page", [], function() { return { entitySchemaName: "tsaWebData", diff: /**SCHEMA_DIFF*/[ // ... // Контейнер с внедренным HTML-элементом iframe. { "operation": "insert", "name": "IFrameStat", "parentName": "TabData", "propertyName": "items", "values": { "id": "testiframe", "itemType": Terrasoft.ViewItemType.CONTAINER, "selectors": {"wrapEl": "#stat-iframe"}, "layout": { "colSpan": 24, "rowSpan": 1, "column": 0, "row": 0 }, "html": "<iframe id='stat-iframe' class='stat-iframe' width='100%' height='550px'" + "style = 'border: 1px solid silver;'></iframe>", "afterrerender": { "bindTo": "addUrl" } } } ]/**SCHEMA_DIFF*/, methods: { // Обработчик события полной загрузки данных. onEntityInitialized: function() { this.callParent(arguments); this.addUrl(); }, // Метод добавления URL к HTML-элементу iframe. addUrl: function() { var iframe = Ext.get("stat-iframe"); if (!iframe) { window.console.error("Не найдена вкладка с элементом iframe"); return; } var siteName = this.get("tsaName"); if (!siteName) { window.console.error("Не указано имя сайта"); return; } var url = "https://www.similarweb.com/website/" + siteName; this.set("tsaURL", url); iframe.dom.src = url; } } }; });