Документация по разработке bpm’online
PDF
Документация по разработке
Как запускать процессы bpm'online через веб-сервис

Glossary Item Box

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

Для запуска бизнес-процессов из сторонних приложений предназначен web-сервис ProcessEngineService.svc. Основные возможности web-сервиса ProcessEngineService.svc описаны в статье "Web-сервис ProcessEngineService.svc".

Описание примера

Из строки навигации браузера или из пользовательского приложения запустить демонстрационные бизнес-процессы создания и считывания контактов bpm'online, используя web-сервис ProcessEngineService.svc.

Последовательность реализации примера

Для реализации примера необходимо:

1. Создать демонстрационные процессы добавления нового контакта и считывания всех контактов.

2. Проверить работоспособность web-сервиса ProcessEngineService.svc из строки навигации Web-браузера.

3. В пользовательском приложении создать класс, в котором реализовать логику работы с веб-сервисом ProcessEngineServise.svc.

1. Создание демонстрационных бизнес-процессов

К СВЕДЕНИЮ

Особенности и лучшие практики создания бизнес-процессов в bpm'online подробно описаны в документации по настройке процессов.

1.1. Создание процесса добавления контакта

Бизнес-процесс добавления нового контакта, кроме сигналов старта и завершения, содержит всего один элемент — [Задание-сценарий] ([ScriptTask]), в котором реализуется логика добавления контакта в систему. Значения свойств бизнес-процесса (рис. 1):

  • [Название] — "Add New External Contact".
  • [Код] ([Code]) — "UsrAddNewExternalContact".

Для остальных свойств используются значения по умолчанию.

Рис. 1. — Свойства бизнес-процесса UsrAddNewExternalContact

Бизнес-процесс содержит два текстовых параметра (рис. 2), через которые в процесс передаются реквизиты контакта:

  • ContactName — содержит имя добавляемого контакта.
  • ContactPhone — содержит телефон добавляемого контакта.

Рис. 2. — Параметры бизнес-процесса

Логика добавления нового контакта в систему реализуется в элементе [Задание-сценарий] ([ScriptTask]). Значения свойств элемента (рис. 3):

  • [Название] — "Add contact".
  • [Код] ([Code]) — "ScriptTaskAddContact".
  • [Для интерпретируемого процесса] ([For interpreted process]) — признак снят.

Рис. 3. — Свойства элемента [Задание-сценарий] ([ScriptTask])

Исходный код, который должен содержать элемент ScriptTaskAddContact:

// Создание экземпляра схемы объекта "Контакт".
var schema = UserConnection.EntitySchemaManager.GetInstanceByName("Contact");
// Создание экземпляра нового объекта.
var entity = schema.CreateEntity(UserConnection);
// Установка значений по умолчанию для колонок объекта.
entity.SetDefColumnValues();
// Установка значения колонки "Name" из параметра процесса.
entity.SetColumnValue("Name", ContactName);
// Установка значения колонки "Phone" из параметра процесса.
entity.SetColumnValue("Phone", ContactPhone);
// Сохранение нового контакта.
entity.Save();
return true;

После внесения изменений бизнес-процесс необходимо сохранить.

Создание процесса чтения контактов

Бизнес-процесс, формирующий список всех контактов, также содержит один элемент [Задание-сценарий] ([ScriptTask]), в котором реализуется необходимая логика. Значения свойств бизнес-процесса (рис. 4):

  • [Название] — "Get All Contacts".
  • [Код] ([Code]) — "UsrGetAllContacts".
  • [Компилировать] ([Force compile]) — признак установлен.

Для остальных свойств используются значения по умолчанию.

Рис. 4. — Свойства бизнес-процесса чтения контактов

Процесс UsrGetAllContacts содержит единственный параметр ContactList, через который процесс будет возвращать список всех контактов системы в виде JSON-объекта. Тип параметра — строка неограниченной длины. Свойства параметра отображены на рис. 5.

Рис. 5. — Свойства параметра

Логика выборки контактов реализована в элементе процесса [Задание-сценарий] ([ScriptTask]). Значения свойств элемента (рис. 6):

  • [Название] — "Get all contacts".
  • [Код] ([Code]) — "ScriptTaskGetAllContacts".
  • [Для интерпретируемого процесса] ([For interpreted process]) — признак снят.

Рис. 6. — Свойства элемента [Задание-сценарий] ([ScriptTask])

Исходный код, который должен содержать элемент ScriptTaskGetAllContacts:

// Создание экземпляра EntitySchemaQuery.
EntitySchemaQuery query = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Contact");
// Признак для обязательного выбора первичной колонки (Id).
query.PrimaryQueryColumn.IsAlwaysSelect = true;
// Добавление в запрос колонок.
query.AddColumn("Name");
query.AddColumn("Phone");
// Получение результирующей коллекции.
var entities = query.GetEntityCollection(UserConnection);
// Формирование списка контактов для сериализации в JSON.
List<object> contacts = new List<object>();
foreach (var item in entities)
{
    var contact = new
    {
        Id = item.GetTypedColumnValue<Guid>("Id"),
        Name = item.GetTypedColumnValue<string>("Name"),
        Phone = item.GetTypedColumnValue<string>("Phone")
    };
    contacts.Add(contact);
}
// Сохранение сериализованной в JSON коллекции контактов в параметр ContactList.
ContactList = JsonConvert.SerializeObject(contacts);
return true;

После внесения изменений бизнес-процесс необходимо сохранить.

2. Запустить выполнение бизнес-процессов из строки навигации Web-браузера

Поскольку вызов метода сервиса возможен с помощью HTTP GET-запроса, то для выполнения запуска бизнес-процесса можно использовать обычный Web-браузер. Общие форматы URL вызова сервиса для бизнес-процессов с параметрами приведены в статье "Web-сервис ProcessEngineService.svc".

Для запуска процесса создания нового контакта необходимо в строку навигации браузера ввести следующий URL:

http[s]://<адрес_приложения_bpm'online>/0/ServiceModel/ProcessEngineService.svc/UsrAddNewExternalContact/Execute?ContactName=John Johanson&ContactPhone=+1 111 111 1111

После перехода по указанному URL, bpm'online будет добавлен новый контакт (рис. 7).

Рис. 7. — Новый контакт

ВАЖНО

Новый контакт будет создан при каждом успешном запросе к сервису. Если выполнить несколько запросов с одинаковыми параметрами, будет создано несколько контактов-дублей.

Для запуска процесса чтения всех контактов необходимо в строку навигации браузера ввести следующий URL:

http[s]://<адрес_приложения_bpm'online>/0/ServiceModel/ProcessEngineService.svc/UsrGetAllContacts/Execute?ResultParameterName=ContactList

После выполнения перехода по указанному URL, в окне браузера будет отображен JSON-объект, содержащий коллекцию контактов (рис. 8).

Рис. 8. — Результат выполнения процесса чтения контактов

3. Запустить выполнение бизнес-процессов из пользовательского приложения

Прежде чем выполнять запросы к сервису ProcessEngineService.svc, необходимо выполнить аутентификацию. Для этого предназначен сервис аутентификации AuthService.svc. Пример выполнения аутентификации из пользовательского консольного приложения приведен в статье "Сервис аутентификации AuthService.svc". Консольное приложение, созданное по приведенному примеру, можно взять за основу для примера, приведенного ниже.

ВАЖНО

Полностью исходный код консольного пользовательского приложения, предназначенного для запуска бизнес-процессов с помощью сервиса ProcessEngineService.svc, доступен на GitHub по ссылке https://github.com/bpmonline-academy/DevelopmentGuide/tree/master/Examples/WorkWithBpmByWebServices.

Для формирования запросов к сервису ProcessEngineService.svc в исходный код класса Program нужно добавить строковое поле, содержащее базовый URL сервиса:

private const string processServiceUri = baseUri + @"/0/ServiceModel/ProcessEngineService.svc/";

Для выполнения запуска бизнес-процесса добавления контакта необходимо в исходный код класса Program добавить следующий метод:

public static void AddContact(string contactName, string contactPhone)
{
    // Формирование URL запроса.
    string requestString = string.Format(processServiceUri +
            "UsrAddNewExternalContact/Execute?ContactName={0}&ContactPhone={1}",
                             contactName, contactPhone);
    // Создание Http-запроса.
    HttpWebRequest request = HttpWebRequest.Create(requestString) as HttpWebRequest;
    request.Method = "GET";
    request.CookieContainer = AuthCookie;
    // Выполнение запроса и анализ Http-ответа.
    using (var response = request.GetResponse())
    {
        // Поскольку сервис вернет пустую строку,
        // то можно вывести свойства http-ответа.
        Console.WriteLine(response.ContentLength);
        Console.WriteLine(response.Headers.Count);
    }
}

Также необходимо добавить метод запуска процесса чтения контактов:

 public static void GetAllContacts()
{
    // Формирование URL запроса.
    string requestString = processServiceUri +
                       "UsrGetAllContacts/Execute?ResultParameterName=ContactList";
    HttpWebRequest request = HttpWebRequest.Create(requestString) as HttpWebRequest;
    request.Method = "GET";
    request.CookieContainer = AuthCookie;
    // Создание Http-запроса.
    using (var response = request.GetResponse())
    {
        // Выполнение запроса и вывод результата.
        using (var reader = new StreamReader(response.GetResponseStream()))
        {
            string responseText = reader.ReadToEnd();
            Console.WriteLine(responseText);
        }
    }
}

Вызов добавленных методов можно осуществить, например, в главном методе программы после успешной аутентификации:

static void Main(string[] args)
{
    if (!TryLogin("Supervisor", "Supervisor"))
    {
        Console.WriteLine("Wrong login or password. Application will be terminated.");
    }
    else
    {
        try
        {
            // Вызов методов запуска бизнес-процессов.
            AddContact("John Johanson", "+1 111 111 1111");
            GetAllContacts();
        }
        catch (Exception)
        {
            // Обработка исключений.
            throw;
        }
    };
    Console.WriteLine("Press ENTER to exit...");
    Console.ReadLine();
}

Результат выполнения программы представлен на рис. 9.

Рис. 9. — Результат выполнения пользовательского приложения

© Terrasoft 2002-2019.

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

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