Creatio development guide
Это документация Creatio версии 7.11.0. Мы рекомендуем использовать новую версию документации.

Выбор способа интеграции с 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 приложений

Есть

http://www.odata.org/libraries

Не нужны Не нужны Не нужны

Разработчик

bpm'online Microsoft bpm'online bpm'online bpm'online

Краткое описание, основные преимущества и недостатки каждого из способов представлены ниже.

Интеграция с помощью DataService

Веб-служба DataService — основное связующее звено клиентской и серверной частей bpm'online. Именно с ее помощью выполняется передача данных, введенных пользователем с помощью пользовательского интерфейса, в серверную часть приложения для последующей обработки и сохранения в базу данных. Подробное описание DataService и основные операции, выполняемые этой службой, приведены в статье "Веб-служба DataService".

Основные преимущества и возможности интеграции

Недостатки

  • Высокая сложность построения запросов.
  • Необходимость глубоких знаний для разработки.
  • Отсутствие вспомогательных библиотек для популярных прикладных и мобильных платформ.

Пример

Пример исходного кода простого приложения для отправки запроса на добавление данных к веб-службе 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;
            }
        }
    };
});

© Terrasoft 2002-2018.

Был ли данный материал полезен?

Как можно улучшить эту статью?