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

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

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

../_images/segment1.png

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

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

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

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

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

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

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

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

    ../_images/segment4.png

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

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

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

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

    ../_images/segment5.png

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

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

../_images/segment6.png

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

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

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

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

    ../_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);
    
    }
    
  2. Бизнес-процесс Процесс сценария разбивки сообщения со следующими параметрами:

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

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

    • Протокол: REST

    • Формат: JSON

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

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

    ../_images/segment12.png

Демо-пример:

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

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

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

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

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

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

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

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

  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: Разбивка массива поэлементно без отправки исходного сообщения

Для реализации второго варианта сценария создайте Входящий процесс трансформации в сценарии разбивки сообщения вариант 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

Вариант 4: Разбивка массива поэлементно c отправкой исходного сообщения

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

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

  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