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

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

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

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

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

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

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

Пример:
jdbc:oracle:thin:myUserName/myPassword@myHost:1521:orcl
ИгнорироватьОшибкиБд
Если значение — Истина, то в случае, когда во время выполнения обработчика ОбработкаСообщения произойдет ошибка при работе с БД, сообщение будет передано в исходящий маршрут (при наличии). При этом у сообщения будет установлено значение параметра DbErrorText.
ПередПодключением

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

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

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

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

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

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

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

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

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

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

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

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

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