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

Свойства узла процесса интеграции вида «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(Поток)
Писатель.ЗаписатьНачалоМассива()
пока Результат.Следующий()
Писатель.ЗаписатьНачалоОбъекта()
пер Текущий = Результат.КакСоответствие()
для Поле из Текущий
Писатель.ЗаписатьИмяСвойства(Поле.Ключ)
Писатель.Записать(Поле.Значение.ВСтроку())
;
Писатель.ЗаписатьКонецОбъекта()
;
Писатель.ЗаписатьКонецМассива()
возврат Сообщение.УстановитьТелоИзПотока(Поток.ОткрытьПотокЧтения())
;