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

Выбор способа интеграции с Creatio

Glossary Item Box

Общие сведения

Creatio предлагает широкие возможности для интеграции со сторонними программными продуктами. Выбор способа интеграции зависит от потребностей клиента, типа и архитектуры сторонних программных продуктов, компетенции разработчика. Сравнение основных характеристик поддерживаемых способов интеграции с Creatio приведено в таблице 1.

Табл. 1. — Сравнение основных способов интеграции с Creatio

DataService OData ProcessEngineService Пользовательский конфигурационный сервис

Поддерживаемые форматы обмена данными

XML, JSON, JSV, CSV XML, JSON XML, JSON XML, JSON

Решаемые задачи

CRUD-операции с объектами Creatio, фильтрация данных и использование встроенных макросов Creatio

CRUD-операции с объектами, добавление и удаление связей, получение метаданных, коллекций, полей объектов, сортировка и др.

Запуск бизнес-процессов, передача и получение параметров запускаемого бизнес-процесса, запуск отдельных элементов бизнес-процеса Любые требуемые пользовательские задачи, которые можно решить в рамках открытого API Creatio

Сложность использования

Высокая Средняя Низкая Средняя

Способы аутентификации

Forms Forms Forms Anonymous, Forms — в зависимости от реализации сервиса.

Наличие вспомогательных клиентских библиотек

Можно использовать .dll-библиотеки Creatio только для .NET приложений

Есть

http://www.odata.org/libraries

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

Разработчик

Creatio Microsoft Creatio Creatio

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

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

Веб-служба DataService — основное связующее звено клиентской и серверной частей Creatio. Именно с ее помощью выполняется передача данных, введенных пользователем с помощью пользовательского интерфейса, в серверную часть приложения для последующей обработки и сохранения в базу данных. Подробное описание 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.сreatio.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. Доступ к данным и объектам Creatio по протоколу OData может получить любое стороннее приложение, которое поддерживает обмен сообщениями HTTP и может обрабатывать данные XML или JSON. При этом данные доступны в виде ресурсов, адресуемых через URI. Доступ к данным и их изменение осуществляется с помощью стандартных HTTP–команд GET, PUT/PATCH, POST и DELETE.

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

  • Обмен данными с помощью XML, JSON.
  • Множество операций с объектами Creatio, в том числе CRUD-операции.
  • Удобные функции работы со строками, датами и временем.
  • Большое количество клиентских библиотек по работе с OData для популярных прикладных и мобильных платформ.
  • Для доступа необходима авторизация пользователя.

Недостатки

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

Пример

Пример запроса для добавления новой записи контакта с помощью OData приведен ниже. Подробно примеры работы с OData рассмотрены в разделе "Интеграция по протоколу OData".

POST /0/odata/Contact HTTP/1.1
Host: mycreatio.com
Accept: application/json
Content-Type: application/json; charset=utf-8
ForceUseSession: true
BPMCSRF: OpK/NuJJ1w/SQxmPvwNvfO
Content-Type: application/json

{
    // Добавить в поле Name значение New User.
    "Name": "New User",
    // Добавить в поле JobTitle значение Customer manager.
    "JobTitle": "Customer manager"
}

Интеграция с помощью сервиса запуска бизнес-процессов ProcessEngineService

Одной из задач интеграции внешнего приложения с Creatio является запуск бизнес-процессов. С этой целью в сервисной модели Creatio реализован web-сервис ProcessEngineService.svc, позволяющий запускать бизнес-процессы извне.

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

  • Запуск созданных в Creatio бизнес-процессов из внешних приложений.
  • Обмен данными между Creatio и внешними приложениями.
  • Для доступа необходима авторизация пользователя.

Подробнее возможности интеграции с помощью протокола перечислены в статье "Веб-сервис ProcessEngineService.svc".

Недостатки

  • Умение работать с бизнес-процессами в Creatio.
  • Неудобный формат передачи данных в приложение.

Пример интеграционного решения приведен в статье "Как запускать процессы Creatio через веб-сервис".

Интеграция с помощью пользовательского конфигурационного веб-сервиса

В Creatio существует возможность создавать пользовательские веб-сервисы в конфигурации, с помощью которых можно реализовать специфические интеграционные задачи. Конфигурационный веб-сервис представляет собой RESTful-сервис, реализованный на базе технологии WCF. Создание пользовательского конфигурационного веб-сервиса подробно описано в статье "Создание пользовательского конфигурационного сервиса".

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

  • Обмен данными реализуется разработчиком любым удобным способом.
  • Возможность реализации разработчиком любых операций с объектами Creatio, в том числе 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;
        }
    }
}

© Terrasoft 2002-2020.

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

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