Обработчики

При получении сообщения извне (входящая точка) система запускает механизм установки типа сообщения.

  1. При получении сообщения (до выполнения кода обработчика). 1с коннектор поддерживает получение сообщения со свойствами DataType или SystemDataType:
    • Если параметр DataType заполнен, то тип сообщения устанавливается на основе заполненного.

    • Если параметр SystemDataType заполнен, то тип сообщения устанавливается в OriginalSystemDataType и SystemDataType заполняется из метаданных.

    • Если параметры DataType и SystemDataType пустые, то тип сообщения заполняется из вкладки В Platform Обработчика соответствующим типом.

    • Если параметр DataType или SystemDataType заполнен, то система выполняет сравнение с типом переменной на вкладке В Platform, если тип переменной отличается от типа сообщения, и у переменной установлен флаг Обязательное, система возвращает ошибку и сообщение перемещается в архив.

  2. Инициализация переменных для выполнения кода обработчика.
    • Если коннектор поддерживает использование кода и код заполнен, то переменная создается со вкладки В Platform Обработчика.

    • Если тип определен в пункте 1, и он отличается от типа переменной из вкладки В Platform, то переменная принимает значение null (если установлен параметр разрешить null) или создается пустой объект.

Обработчики 1С

Вкладка Основные

../../_images/image107.png

Для настройки обработчика 1С необходимо выбрать нужный тип из выпадающего списка:

../../_images/image108.png

Далее указать необходимое направление интеграции:

В зависимости от выбранного направления изменится вкладка В Platform/Из Platform.

Обработчики В Platform вызываются на стороне 1С при добавлении/изменении записей. Из

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

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

../../_images/image109.png

Этот параметр отвечает за приоритетность выгрузки объектов из 1С:

../../_images/image110.png

Возможные значения от 0 до 9, где 0 - самое приоритетное.

Обработчики Из Platform выполняются, когда в 1С из Datareon Platform приходит пакет. Данные для выполнения обработчика берутся из тела сообщения.

Вкладка Переменные

Указываются переменные, к которым будет доступ на вкладке Код:

../../_images/image111.png

Вкладка Код

Содержится код 1С, который будет выполняться при вызове обработчика.

С помощью кнопки Сгенерировать можно вызвать мастер генерации текста обработчика. При этом в открывшемся окне нужно будет выбрать адаптер, через который будет запрошена конфигурация 1С, а затем поля метаданных, участвующих в обработке пакета.

../../_images/image112.png

Так же на вкладке (если направление - «ИзПлатформ») есть режим отладки:

../../_images/image113.png

При необходимости режим отладки можно развернуть на весь экран.

Подробнее о коде обработчиков 1С см. в разделе 7.4. API Обработчиков 1С.

Вкладка В Platform

Содержит данные, которые будут передаваться в Платформу при соответствующем направлении интеграции, выбранном на вкладке Основные:

../../_images/image114.png

На этой вкладке определяется тип данных, который будет присвоен сообщению при выполнении данного обработчика.

Вкладка Из Platform

Содержит данные, которые будут передаваться из Платформы при соответствующем направлении интеграции, выбранном на вкладке Основные. На вкладках В Platform и Из Platform определяется с каким типом данных будут обрабатываться сообщения данным обработчиком. Если из Платформы пришло сообщение с типом, указанным на данной вкладке, то этот обработчик будет выбран для этого сообщения, затем выполняется код обработчика, если он есть.

Вкладка Системы

../../_images/image115.png

Указываются системы, к которым будет добавлен обработчик:

Функции 1С

Функции 1С являются еще одним типом обработчиков и используются для выполнения функций в 1С, которые можно использовать в обработчиках 1С. У данного типа нет направления интеграции, т.к. функции вызываются из уже имеющихся обработчиков 1С со своим направлением интеграции.

Вкладка Основные

Здесь заполняется имя функции 1С, которое будет использоваться в дальнейшем вызове в коде обработчика 1С, и выбирается тип обработчика - Функция 1С:

../../_images/image116.png

Вкладка Переменные

На этой вкладке добавляются параметры функции, которые будут доступны при ее вызове.

Вкладка Код

На этой вкладке пишется текст функции на языке 1С. Функцию можно выполнить по расписанию через автозапускаемые задания - триггеры (подробнее см. 5.5.5 Автозапускаемые задания), на этапе выполнения бизнес-процесса в шаге Источник, либо вызвать в коде другого обработчика.

../../_images/image117.png

В этих случаях надо тело сообщения передать в переменную Результат:

../../_images/image118.png
Вкладка Системы
Шаблоны типа Функции 1С прикрепляются к адаптеру системы 1С вместе с обработчиком 1С.

Обработчики СУБД

Вкладка Основные

Для настройки обработчика СУБД необходимо выбрать нужный тип из выпадающего списка:

  • обработчик MSSQL;

  • обработчик Oracle;

  • обработчик PostgreSQL.

../../_images/image119.png

Далее указать необходимое направление интеграции:

../../_images/image120.png

В поле Имя таблицы нужно указать таблицу базы данных, которая будет выступать как

источник, если указано направление В Platform. Если указано направление ИЗ Platform, таблица выступает как приемник.

Вкладка Переменные

Здесь можно создать локальные переменные обработчика. К локальным переменным с одной

стороны есть доступ из бизнес-процессов при отправке объектов во внешнюю систему, с

другой стороны локальные переменные доступны для использования в SQL коде обработчика на вкладке Код. Вызов переменной в SQL коде: @Идентификатор .

../../_images/image121.png
../../_images/image122.png

Вкладка Код

Содержит SQL-код, который будет выполняться при вызове обработчика:

../../_images/image123.png

Писать и проверять код удобно в СУБД на вкладке выполнения запроса:

../../_images/image91.png

Настройка Из Platform и В Platform

Для обработчиков СУБД система предоставляет дополнительный набор операций, предназначенных для использования вместо SQL кода. В направлении Из Platform система предлагает выбрать следующие виды операций:

  • Пользовательский запрос - будет выполняться SQL запрос с вкладки Код.

  • Вставка - добавление объектов в таблицу.

  • Обновление - обновление полей объектов.

  • Удаление - удаление объектов из таблицы.

  • Выборка - получение объектов из таблицы.

../../_images/image124.png

Если задано направление В Platform, то доступны следующие виды операций:

  • Пользовательский запрос.

  • Выборка.

../../_images/image125.png

Для операции Выборка, Вставка, Обновление существует возможность настройки полей, участвующих в операции с помощью инструмента «Маппер». Для настройки нужно в Маппере добавить поля таблицы которые будут участвовать в операции и настроить маппинг полей в переменную с вкладки В Platform или Из Platform в зависимости от направления интеграции. Если в Маппере настроены поля таблицы, то в операции будут участвовать только эти поля таблицы.

Для настройки мапинга нужно нажать на кнопку Маппер:

../../_images/image126.png

Вкладка В Platform

Содержит данные, которые будут передаваться в Платформу при соответствующем направлении интеграции:

../../_images/image114.png

Вкладка Из Platform

Содержит данные, которые будут передаваться из Платформы при соответствующем направлении интеграции:

К данным можно обращаться на вкладке Код, значения передаются в теле сообщения Формат файла сообщения, получаемого процессом для успешного маппинга, должен быть «UTF-8 без BOM» Маппинг в формате json вида:

{
        "MediaTypeId": 4,
        "Name": "example"
}

Вкладка Системы

На вкладке можно выбрать Внешние системы, с которыми будет работать обработчик:

../../_images/image93.png

Веб-обработчики

Веб-обработчик относится к системе, имеющий коннектор тип Расширенное Rest Api.

Внутри обработчика происходит настройка метода:

  • Наименование.

  • Комментарий.

  • Тип (Веб-обработчик).

  • Тип метода (GET, POST, PUT, DELETE).

  • Шаблон пути. В поле Шаблон пути можно использовать параметры:
    • {path} путь к методу со всей иерархией папок;

    • {method} имя метода;

    • {folder} имя текущей папки метода.

  • Таймаут вызова.

  • Параметры запроса.

  • вPlatform (для методов POST, PUT).

  • изPlatform (для методов POST, PUT).

  • Системы (список систем для данного обработчика).

  • Настройка флагов: требуется авторизация авторизация, ожидание ответа.

При парсинге ответа в веб-сервис, если в Ответе настроен Немассив, а в теле сообщения от

БП приходит массив, то проверяется количество элементов в массиве:

../../_images/image127.png
  • если элементов 0, то это интерпретируется как пустое тело,

    выводится значение соответствующего типа данных с пустыми значениями полей;

  • если 1, то интерпретируется 1ый элемент массива как тело

    сообщения, выводится это значение;

  • иначе регистрируется ошибка, что получен массив.

Код обработчика

Код обработчика пишется на языке C#.

В коде обработчика c направлением В Платформу доступна переменная message

RunMessage. В этой переменной содержится, полученное из внешней системы, сообщение.

Содержимое переменной RunMessage можно модифицировать с помощью методов для работы с сообщениями. По окончании работы обработчика, содержимое переменной RunMessage отправляется в Платформу.

RunMessage.SetBody(Object); - установить новое тело сообщения.

Особенности формирования шаблона пути

Имена переменных регистрозависимые, т.е. если регистр переменной и маски в пути совпадает, то в запрос передается значение параметра из swagger веб-сервиса:

../../_images/image128.png

а если регистр не совпадает, то в запросе остается имя параметра в скобках:

../../_images/image129.png

Помимо этого, при формировании шаблона пути можно использовать стандартные маски, такие как {path}, {method} и {folder}. Если в параметрах обработчика будут заданы пользовательские параметры с этими именами, то они считаются приоритетными и подставляются в шаблон пути: иначе эти параметры будут определены автоматически от расположения обработчика в иерархии папок:

../../_images/image130.png

Файловый обработчик

Для файлового коннектора возможно использование обработчиков с направлением интеграции В Platform и Из Platform.

В Platform

Выполнение обработчиков заключается в установке значений переменных обработчика,выполнении кода обработчика (если он есть) и использовании установленных значений переменных. Выполнение обработчиков происходит на входящей точке по таймеру readInterval, настроенному в режиме конфигурации файловой системы:

../../_images/image131.png

Алгоритм выбора и выполнения файлового обработчика

При срабатывании таймера ищутся обработчики, где есть и заполнена переменная fileName.

  • Если такой обработчик есть и значение по умолчанию переменной fileName совпадает с реальным названием файла, то исполняется этот обработчик. Разрешено использование не более одного обработчика (иначе возникает ошибка, сообщение помещается в архив).

  • Если обработчик из п.1 не найден, то ищутся обработчики с заполненным значением переменной fileNamePattern с пустой fileName. Проверяет, соответствует ли заданное в переменной fileNamePattern выражение имени файла. Поддерживаются следующие подстановочные знаки: ** и **?. Escape-символ обратной косой черты \.

  • Если не найден обработчик из п.2, то выбирается обработчик пустыми fileNamePattern и fileName.

  • Если не найден обработчик из п.3, сообщение обрабатывается без обработчика.

  • Если обработчик выбран и вкладка Код заполнена, то выполняется код обработчика.

С помощью обработчиков можно, например, задавать тип данных передаваемым сообщениям.

Например, в зависимости от имени файла или его расширения можно передавать сообщения с различными типами для дальнейшей маршрутизации.

Для этого нужно создать 2 обработчика.

На вкладке Переменные указывается переменная с наименованием fileNamePattern и типом String. В значении переменной указывается .json или .txt:

../../_images/image132.png
../../_images/image133.png

Таким образом для любого файла, имя которого заканчивается на .json или .txt, будет выбран соответствующий обработчик.

Далее в настройках соответствующих обработчиков на вкладке В Platform создается переменная нужного типа. Допустим, что файлам json будет присвоен тип Тест1, а файлам txt будет присвоен тип Тест2. (Эти типы нужно предварительно создать):

../../_images/image134.png
../../_images/image135.png

Далее все обработчики прикрепляются к системе, откуда будут забираться файлы:

../../_images/image136.png

После применения конфигурации отправляем два сообщения с разными расширениями:

../../_images/image137.png

В журнале системы указываем уровень логирования Verbose. И видим записи:

../../_images/image138.png

Для своего файла выбран свой обработчик.

Далее в событиях системы видим 2 события получения и в столбце Тип данных соответственно типы Тест1 и Тест2:

../../_images/image139.png

Если отправить сообщение из системы без обработчика, то оно без ошибок попадет в

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

Код обработчика В Platform

Код файлового обработчика пишется на языке C#.

В коде доступна переменная message RunMessage. В этой переменной содержится,

полученное из внешней системы, сообщение. Содержимое переменной RunMessage можно

модифицировать с помощью методов для работы с сообщениями. По окончании работы обработчика, содержимое переменной RunMessage отправляется в Платформу.

В коде доступны методы:

  • SetBody(Object) - модифицировать тело сообщения;

  • SetMessage(Message message) - установить message как формируемое сообщение;

  • SetCurrentParams(Message message) - в message установить параметры по умолчанию;

  • SetCurrentBody(Message message) - в message установить тело сообщения по умолчанию;

  • System.IO.FileInfo GetFileInfo() - получить информацию о прочитанном файле.

В коде обработчика доступно обращение к объявленным в обработчике переменным. Содержание файла можно получить с помощью системной переменной byte[] Data.

ИЗ Platform

При отправке сообщения Из Platform с помощью файлового коннектора выполняется подбор обработчика на основании типа сообщения. Если такой обработчик не найден, то это не является ошибкой - сообщение передается без обработчика.

Для обработчиков Из Platform доступны параметры fileName, fileNamePattern.

Задать их значения можно на вкладке Переменные, добавив новую переменную с соответствующим именем и типом String, в поле Значение можно указать какое имя будут иметь файлы, приходящие в каталог в случае переменной fileName:

../../_images/image140.png

или по каким правилам формировать имя файла в случае переменной fileNamePattern.

../../_images/image141.png

Перед выполнением кода переменная fileName инициализируется значением из свойства сообщения. Если значение пустое, задается значение по умолчанию (из обработчика). Если значение не задано, fileName считается на основании fileNamePattern из коннектора:

../../_images/image142.png

Так выглядит имя файла, для которого в обработчике не было задано никаких значений - в этом случае имя сформировалось на основе шаблона, указанного в настройках оннектора. Рядом файл, записанный в каталог с настройками обработчика, приведенными выше:

../../_images/image143.png

fileNamePattern для расчета fileName использует системные свойства сообщения:

  • /Message/Id.

  • /Message/CreationTime.

  • /Message/DataType.

  • /Message/Source.

  • /Message/Receivers.

  • /Message/Property/ИмяСвойства.

Код обработчика Из Platform

При выполнении кода разрешено изменение параметра fileName и/или тела сообщения (переменная RunMessage с типом Message - подробнее в разделе 7.3.1 Сообщения и их свойства, отправка и прочее).

На вкладке Код можно также задать значение используемых переменных или добавить что-то к существующему значению:

../../_images/image144.png

Сообщение создалось на основе fileNamePattern, указанного на вкладке Переменные (/Message/CreationTime - время создания), а также имеет добавленные числа в конце, прописанные в коде:

../../_images/image145.png

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

После выполнения кода, если fileName - пустая строка, то будет сгенерирована ошибка.

Логирование

Для вывода информации в лог в контексте кода обработчика доступна работа с Логгером:

Logger.Debug(…);

Без обработчика сообщение запишется в файл с именем, сформированным согласно шаблону, указанному в настройках коннектора. В файле будет такое тело сообщения, каким оно было передано в Платформу из другой системы.

Обработчики веб-клиент и веб-сервер

Веб-клиент и веб-сервер относятся к системе, имеющий коннектор тип Веб-сервисы (протокол либо Rest, либо Soap).

Настройка обработчика тип Веб-клиент

Выбрать в меню -> Интеграция -> Обработчики -> Кнопка +.

Вкладка Основные:

  • поле название;

  • поле имя;

  • список Тип - выбрать тип Веб-клиент;

  • список Направление интеграции - в зависимости от направления

    выбрать из ВPlatform\ИзPlatform;

  • список методов(GET, POST, PUT, DELETE, PATСH)

  • шаблон пути;

  • таймаут вызова;

  • флаг ожидания ответа.

На вкладке Код доступны переменные из вкладки Параметры и ИзPlatform, система позволяет их изменять:

../../_images/image147.png

Код обработчика пишется на языке C#.

В коде обработчика c направлением В Платформу доступна переменная message RunMessage.

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

RunMessage.SetBody(Object); - установить новое тело сообщения

На вкладках вPlatform и изPlatform создаются переменные.

Для выполнения обработчика на системе необходимо присвоить обработчик системе. Для этого нужно на вкладке Системы добавить в список Системы обработчика обработчик из списка Доступные системы путем выбора строчки и нажатием на кнопку >. Обработчик может выполнятся на нескольких системах:

../../_images/image148.png

Настройка обработчика тип Веб-сервер

Выбрать в меню -> Интеграция -> Обработчики -> Кнопка +.

Вкладка Основные:

  • поле название;

  • поле имя;

  • список Тип - выбрать тип «Веб-сервер»;

  • список Направление интеграции ИзВ Platform;

  • таймаут вызова;

  • флажок ожидания ответа.

Для выполнения обработчика на системе необходимо присвоить обработчик системе. Для этого нужно на вкладке Системы добавить в список Системы обработчика обработчик из списка Доступные системы путем выбора строчки и нажатием на кнопку >:

../../_images/image149.png

Обработчики Email

Настройка обработчика

Для создания обработчика типа email:

  1. В ЦН перейдите в раздел Интеграция -> Обработчики.

  2. Нажмите на кнопку +. В рабочей области страницы отобразится интерфейс создания / редактирования нового обраюотчика, содержащий следующие вкладки:

../../_images/image150.png
  1. На вкладке Основная заполните следующие поля:

  • Название: произвольное название системы, обязательно для заполнения.

  • Имя: уникальное имя системы, обязательно для заполнения.

  • Комментарий: описание системы, необязательно для заполнения.

  1. В выпадающем меню Тип выберите тип Email.

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

../../_images/image151.png
  1. На вкладке Переменные выберите или создайте переменные для использования в обработчике, нажав на кнопку +:

../../_images/image152.png
  1. На вкладке Код внесите код обработчика, используя следующую информацию:

  • SetReceiver(«itest@email.ru»); Установка одного получателя.

  • Установка нескольких получателей:
    • var recs = new OwnList<string>();

    • recs.Add(«test1@email.ru»); recs.Add(«test2@email.ru»);

    • SetReceivers(recs);

  • ClearReceivers(); Очистка всех получателей.

  • SetFrom(«test@email.ru»); Установка отправителя сообщения.

  • SetSubject(«Тестовое письмо»); Установка темы сообщения.

  • GetMailMessage(); Получить объект MailMessage.
    • var mes = GetMailMessage();

    • mes.body = «Текст письма»;

Пример кода:

var recs = new OwnList<string>();
recs.Add("Adresat@datareon.ru");
SetReceivers(recs);

SetSubject("Тема сообщения письма");

var mes = GetMailMessage();
        mes.Body = "Test содержание письма";
  1. На вкладке, соответствующей направлению интеграции из Platform, добавьте переменные, используемые в этом направлении.

8. На вкладке Системы добавьте системы, для которых предназначен этот обработчик. При попытке добавить систему с недопустимым типом будет выдано предупреждение об ошибке:

Добавление системы Обработчик [email_test типа Email нельзя использовать для системы типа WebSimple].

  1. После внесения данных нажмите на кнопку Сохранить.

  2. Нажмите на кнопку Применить конфигурацию:

    ../../_images/config_apply1.png

Указанный обработчик появится у выбранной внешней системы на вкладке обработчики.