Перейти к основному содержимому

Свойства узла процесса интеграции вида «Sql»

Узел, в котором выполняются запросы к внешней базе данных (далее — БД) с использованием JDBC-драйвера. Узел не является источником или назначением. В этом узле сообщение может быть записано в БД или сформировано из данных, полученных из БД. Для периодического выполнения запроса следует поставить перед этим узлом таймер.

Узел может быть связан с группой участников. Реквизиты участников могут использоваться в среде разработки при формировании строки подключения в описании значений параметров.

совет

Чтобы добавить JDBC-драйверы в сервер «1С:Шины», следует скопировать файлы драйвера в папку lib\chassis\modules сервера «1С:Шины». В комплект поставки уже входят драйверы для «MS SQL» и «PostgreSQL».

дополнительно

Не устанавливайте дополнительные драйверы, драйверы других версий и/или производителей для поддерживаемых СУБД.

Свойства узла

Длительность хранения доставленных сообщений в формате ДД.ЧЧ

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

Длительность задается в формате ДД:ЧЧ (например, 10:02 — 10 дней и 2 часа). Если указать длительность равную 00:00, то доставленные сообщения для данного узла не будут сохраняться в «1С:Шине». Длительность хранения должна быть равна 00:00 (по умолчанию) либо больше или равна 00:01.

ИгнорироватьОшибкиБд

Если значение — Истина, то в случае, когда во время выполнения обработчика ОбработкаСообщения произойдет ошибка при работе с БД, сообщение будет передано в исходящий маршрут (при наличии). При этом у сообщения будет установлено значение параметра DbErrorText.

Имя

Имя узла, уникальное в рамках процесса интеграции. Используется для обращения к узлу из встроенного языка (УзелСхемыИнтеграции.Имя). Должно начинаться с буквы, за которой следуют буквы, цифры или символы '_' (нижнее подчеркивание). Минимальная длина — 2 символа

ОбновлениеМетрик

Обработчик, внутри которого можно обновлять метрики, добавленные в проект разработчиком. Пример:

// Разработчик добавил в проект метрику «СчетчикВУзле». Тогда обновить метрику в узлах
// можно следующим образом:
метод ОбновлениеМетрик(Контекст: МойПроцессИнтеграции.КонтекстВызова, Сообщение: МойПроцессИнтеграции.Сообщение)
пер СчетчикВУзле = МойПроцессИнтеграции.Метрики["СчетчикВУзле"]
СчетчикВУзле.Обновить(Сообщение.УзлыПути.Текущий.Узел.Имя, 1)
;

ОбработкаСообщения

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

Описание

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

ПередПодключением

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

Если обработчик не задан, то строка подключения вычисляется из свойства СтрокаПодключения.

Пример:

метод ПередПодключением(Контекст: ОбменSQL.КонтекстВызова, Сообщение: ОбменSQL.Сообщение, СтрокаПодключения: Строка): Строка
пер Кодировка = Сообщение.ПолучитьПараметрИлиУмолчание("CharSet", "")
если Кодировка == ""
возврат СтрокаПодключения
;
// Cтрока подключения должна иметь вид jdbc:sqlserver://host:port/database[?option1=value[&option2=value[&option3=value]]]
если не СтрокаПодключения.Содержит("?")
возврат СтрокаПодключения + "?CharSet=" + Кодировка
;
если не СтрокаПодключения.Содержит("CharSet=")
возврат СтрокаПодключения + "&CharSet=" + Кодировка
;
пер Урл = СтрокаПодключения.Разделить("?")
пер Опции = Урл[1]
пер ПараметрыПодключения = Опции.Разделить("&")
Опции = "?"
для Параметр из ПараметрыПодключения
если Опции != "?"
Опции = Опции + "&"
;
если Параметр.НачинаетсяС("CharSet=")
Опции = Опции + "CharSet=" + Кодировка
иначе
Опции = Опции + Параметр
;
;
возврат Урл[0] + Опции
;

СтрокаПодключения

Строка подключения к БД. Может использовать параметры процесса и реквизиты участников.

Пример:

jdbc:oracle:thin:myUserName/myPassword@myHost:1521:orcl

Пример использования

Контекст: Офис периодически осуществляет запрос к базе данных и получает от базы данных ответ. Процесс обмена выглядит следующим образом: из системы «1С» в базу данных отправляется JSON с параметрами запроса, после чего в базе данных осуществляется запрос. Из результата запроса формируется другой JSON, который затем поступает обратно в систему «1С».

Задача: Отправить параметры запроса из системы «1С» в интеграционную шину, в базе данных инициировать запрос с полученными параметрами, после чего вернуть результат запроса обратно в систему «1С».

Решение: Для того чтобы отправлять параметры запроса в виде JSON из Офиса в «1С:Шина», добавим на схему узел «Канал1СИсточник» («ИзОфиса»). В этом узле создается очередь, в которую информационная система, входящая в группу участников «Офис», отправляет сообщение с запросом. Чтобы подключиться к базе данных, добавим на схему узел «Sql» («БазаДанных»). Сообщение с параметрами запроса из очереди в узле «ИзОфиса» перемещается в узел «БазаДанных». В этом узле осуществляется запрос к базе данных и обработка полученного ответа. Результат выполнения запроса в виде JSON записывается в тело сообщения. Для этого в обработчике ОбработкаСообщения указывается соответствующий метод. Новый JSON попадает в узел «Канал1СНазначение» («ВОфис»), где снова сохраняется в новую очередь сообщений. Из этой очереди информационная система считывает сообщение с результатом запроса.

Обработка сообщения:

// В параметрах сообщения содержатся параметры запроса к БД. Результаты выполнения запроса в виде JSON записываются в тело сообщения

метод ЗапроситьДанныеИзБазы(Контекст: МойПроцесс.КонтекстВызова, Сообщение: МойПроцесс.Сообщение, Подключение: СоединениеSql): МойПроцесс.Сообщение
пер Скрипт = Подключение.СоздатьЗапросСВыборкой("SELECT field1, field2 FROM Table WHERE field3=&v1 AND field4=&v2")
Скрипт.УстановитьЗначениеПараметра("v1", Сообщение.ПолучитьПараметр("Параметр1"), ТипДанныхSql.Integer)
Скрипт.УстановитьЗначениеПараметра("v2", Момент.Сейчас())
исп Результат = Скрипт.Выполнить()
исп Поток = новый ВременныйПотокЗаписи()
пер Писатель = новый ЗаписьJson(Поток)
Писатель.ЗаписатьНачалоМассива()
пока Результат.Следующий()
Писатель.ЗаписатьНачалоОбъекта()
пер Текущий = Результат.КакСоответствие()
для Поле из Текущий
Писатель.ЗаписатьИмяСвойства(Поле.Ключ)
Писатель.Записать(Поле.Значение.ВСтроку())
;
Писатель.ЗаписатьКонецОбъекта()
;
Писатель.ЗаписатьКонецМассива()
возврат Сообщение.УстановитьТелоИзПотока(Поток.ОткрытьПотокЧтения())
;