Разбивка сообщения на части

В этом разделе приведено описание вариантов реализации разбивки сообщения, содержащего массив элементов.

В Платформу отправляется сообщение, содержащее массив элементов. Платформа разбивает полученное сообщение на отдельные сообщения и отправляет их Системе-получателю.

../_images/segment1.png

Предварительные условия

Созданы следующие элементы:

../_images/segment2.png
../_images/segment3.png

Инициация процесса

Инициатором выступает Система-отправитель в сценарии разбивки сообщения, на которую поступает сообщение соответствующее внешнему типу данных Инициирующее сообщение в сценарии разбивки сообщения для запуска процесса.

Система-отправитель в сценарии разбивки сообщения

  • Тип: Расширенное Rest API

  • Порт для публикации API: любой свободный

    ../_images/segment4.png

Обработчик Инициирующий запрос в сценарии разбивки сообщения

  • Тип: Веб-обработчик

  • Шаблон пути: /СценарийСинхронныйОтветИнициирующийЗапрос

  • Тип метода: Post

    ../_images/segment5.png

На вкладке В Platform добавлена переменная ИнициирующееСообщение с внешним типом Инициирующее сообщение в сценарии разбивки сообщения.

  • параметр Массив: включен

../_images/segment6.png

Входящий процесс трансформации в сценарии разбивки сообщения

Разделение массива поэлементно, на каждый элемент массива зарегистрировано новое сообщение с приведением к типу данных

Для реализации первого варианта сценария созданы следующие элементы:

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

../_images/segment7.png

На вкладке Схема добавлен шаг алгоритма:

../_images/segment8.png

Код алгоритма:

int re = InitMessage.BodyArrayCount();

for(int i = 0; i < re; i++)

{

Message newMessage = new Message();

newMessage.SetBody(InitMessage.CastToDataType<Человек>(i));

SetMessage(newMessage);

Logger.Info($"выбрал - {newMessage}");

Transport.RegisterMessage(newMessage);

}

Описание процесса

  1. Бизнес-процесс Процесс сценария разбивки сообщения 1 вариант со следующими параметрами:


  1. Система-получатель в сценарии разбивки сообщения со следующими параметрами:

    • Тип: Веб-сервисы

    • Протокол: REST

    • Формат: JSON

    • Способ получения сообщений из Платформы: Внешний сервис вызывает методы Platform

    • Порт: должен быть свободным

    ../_images/segment12.png

  1. Создайте запрос в Postman:

  2. Отправьте запрос.

Результат запроса: ответ 200.

В Центре Мониторинга и администрирования в Системе-получателе в сценарии разбивки сообщения на вкладке Очередь будут отображаться два сообщения. Каждое сообщение содержит один элемент массива.

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

../_images/segment14.png
../_images/segment15.png
../_images/segment16.png

Для реализации второго варианта сценария созданы следующие элементы:

  1. Входящий процесс трансформации в сценарии разбивки сообщения вариант 2 со следующими параметрами:

    ../_images/segment17.png

    На вкладке Схема добавлен шаг Алгоритм:

    ../_images/segment18.png

    Код алгоритма:

    foreach(var item in ИнициирующееСообщение)
    
    {
    
    Logger.Verbose($"Регистрация сообщения {item}");
    
    Message message = new Message();
    
    message.SetBody(item);
    
    SetOutMessage(message);
    

    }

  2. Бизнес процесс Процесс сценария разбивки сообщения 2 вариант со следующими параметрами:


  1. Выключите параметр Автостарт для трансформации Входящий процесс трансформации в сценарии разбивки сообщения.

  2. Установите параметр Автостарт для трансформации Входящий процесс трансформации в сценарии разбивки сообщения вариант 2.

  3. Создайте запрос в Postman:

  1. Отправьте запрос.

Результат запроса: ответ 200.

В Центре Мониторинга и администрирования в Системе-получателе в сценарии разбивки сообщения на вкладке Очередь будут отображаться два сообщения. Каждое сообщение содержит один элемент массива.

В результате будет выполнено разделение массива поэлементно, и на каждый элемент массива зарегистрировано новое сообщение без приведения к типу данных.

../_images/segment23.png
../_images/segment24.png
../_images/segment25.png

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

На вкладке Схема добавлен шаг Алгоритм:

../_images/segment18.png

Код алгоритма:

foreach(var item in ИнициирующееСообщение) {

Logger.Verbose($"Регистрация сообщения {item}");

Message message = new Message();

РезультатВСценарииРазбивкиСообщения результат = new
РезультатВСценарииРазбивкиСообщения();

результат.Имя = item.Имя;

результат.Фамилия = item.Фамилия;

//Или заполнить все поля

//результат.InitFromJson(item.ToJson());

message.SetBody(результат);

SetOutMessage(message);

}

  1. Выключите параметр Автостарт для трансформации Входящий процесс трансформации в сценарии разбивки сообщения вариант 2.

  2. Установите параметр Автостарт для трансформации Входящий процесс трансформации в сценарии разбивки сообщения вариант 3.

  3. Создайте запрос в Postman:

  4. Отправьте запрос.

Результат запроса: ответ 200.

В Центре Мониторинга и администрирования в Системе-получателе в сценарии разбивки сообщения на вкладке Очередь будут отображаться два сообщения. Содержимое каждого сообщения соответствует отправленным элементам массива.

../_images/segment27.png
../_images/segment28.png
../_images/segment29.png

Для каждого элемента массива будет зарегистрировано новое сообщение. Исходное сообщение будет также отправлено.

Для реализации второго варианта сценария созданы следующие элементы:

  1. Входящий процесс трансформации в сценарии разбивки сообщения вариант 4 со следующими параметрами:

    ../_images/segment17.png

    На вкладке Схема добавлен шаг Алгоритм:

    ../_images/segment18.png

    Код алгоритма:

    foreach(var item in ИнициирующееСообщение)
    
    {
    
    Logger.Verbose($"Регистрация сообщения {item}");
    
    Message message = new Message();
    
    message.SetBody(item);
    
    SetOutMessage(message);
    

    }

  2. Бизнес процесс Процесс сценария разбивки сообщения 4 вариант со следующими параметрами:

  1. Выключите параметр Автостарт для трансформации Входящий процесс трансформации в сценарии разбивки сообщения вариант 3.

  2. Установите параметр Автостарт для трансформации Входящий процесс трансформации в сценарии разбивки сообщения вариант 4.

  3. Создайте запрос в Postman:

  4. Отправьте запрос.

Результат запроса: ответ 200.

В Центре Мониторинга и администрирования в Системе-получателе в сценарии разбивки сообщения на вкладке Очередь будут отображаться три сообщения. Содержимое каждого сообщения соответствует отправленным элементам массива и его элементам.

../_images/segment34.png
../_images/segment35.png
../_images/segment36.png
../_images/segment37.png