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

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

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

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

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

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

На этой вкладке вносятся основные данные и параметры обработчика:

../../../_images/image116.png
  • Поле Название: введите название обработчика, обязательно для заполнения.

  • Поле Имя: введите имя обработчика, необязательно для заполнения.

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

  • Выпадающее меню Тип: в данном случае выбран вариант Функция 1С.

  • Поле Имя таблицы: введите имя таблицы обработчика.

  • Выпадающее меню Внешний тип данных: выберите тип внешнего типа данных.

В 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

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

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

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

В коде доступна переменная 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/ИмяСвойства.

Примечание

При использовании шаблона /Message/Property/ИмяСвойства в обработчике невозможно задать свойство, которое будет использовано для создания имени файла. Для записи сообщения в файл такое свойство должно присутствовать у сообщения до отправки в исходящий файловый обработчик. Для записи типа данных в файл с использованием исходящего файлового обработчика этот шаблон использовать нельзя, так как имя файла формируется в первую очередь, после чего исполняется код обработчика (свойства, добавляемые в коде обработчика, будут отсутствовать в момент создания имени файла).

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

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

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

../../../_images/image144.png

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

../../../_images/image145.png

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

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

Логирование

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

Logger.Debug(…);

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