Свойства узла процесса интеграции вида «Sql»
Узел, в котором выполняются запросы к внешней базе данных (далее — БД) с использованием JDBC-драйвера. Узел не является источником или назначением. В этом узле сообщение может быть записано в БД или сформировано из данных, полученных из БД. Для периодического выполнения запроса следует поставить перед этим узлом таймер.
Узел может быть связан с группой участников. Реквизиты участников могут использоваться в среде разработки при формировании строки подключения в описании значений параметров.
Свойства узла
- Имя
- Имя узла, уникальное в рамках процесса интеграции. Используется для обращения к узлу из встроенного языка (УзелСхемы.Имя). Должно начинаться с буквы, за которой следуют буквы, цифры или символы '_' (нижнее подчеркивание). Минимальная длина — 2 символа
- Описание
- Произвольное описание узла для разработчика. Используется при редактировании схемы процесса интеграции. Недоступно из встроенного языка
- ОбновлениеМетрик
- Обработчик, внутри которого можно обновлять метрики, добавленные в проект
разработчиком.
Пример:
// Разработчик добавил в проект метрику «СчетчикВУзле». Тогда обновить метрику в узлах // можно следующим образом: метод ОбновлениеМетрик(Контекст: МойПроцессИнтеграции.КонтекстВызова, Сообщение: МойПроцессИнтеграции.Сообщение) пер СчетчикВУзле = МойПроцессИнтеграции.Метрики["СчетчикВУзле"] СчетчикВУзле.Обновить(Сообщение.УзлыПути.Текущий.Узел.Имя, 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, то доставленные сообщения для данного узла не будут сохраняться в «1С:Шине». Длительность хранения должна быть равна 00:00 (по-умолчанию) либо больше или равна 00:01.
Пример использования
Контекст: Офис периодически осуществляет запрос к базе данных и получает от базы данных ответ. Процесс обмена выглядит следующим образом: из системы «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(Поток)
Писатель.ЗаписатьНачалоМассива()
пока Результат.Следующий()
Писатель.ЗаписатьНачалоОбъекта()
пер Текущий = Результат.КакСоответствие()
для Поле из Текущий
Писатель.ЗаписатьИмяСвойства(Поле.Ключ)
Писатель.Записать(Поле.Значение.ВСтроку())
;
Писатель.ЗаписатьКонецОбъекта()
;
Писатель.ЗаписатьКонецМассива()
возврат Сообщение.УстановитьТелоИзПотока(Поток.ОткрытьПотокЧтения())
;