Запросы в базу данных и к веб-сервису

Два компонента связывают сценарий с внешним миром: «Запрос в базу данных» работает с СУБД, «Запрос к WEB-сервису» — с HTTP-сервисами. Оба разветвляют сценарий на успех и ошибку и возвращают код ошибки в переменную.

Запрос в базу данных

Выполняет действия в базе и передаёт параметры на вход и на выход — параметрами выступают переменные сценария. Обращение идёт по одной из технологий: ADO, OLE, ODBC. Для внешних баз заполняется строка подключения; есть помощник-построитель.

Как параметры связываются с переменными

Параметры в тексте запроса обозначаются маркером, который зависит от технологии:

МаркерГде применяется
@имяОбычные SQL-переменные
:имяOLE, Oracle
?Входные параметры ODBC

Встроенный парсер разберёт параметры и предложит сопоставить им переменные сценария. Входные параметры получат значения из переменных перед выполнением запроса, выходные — занесут свои значения в переменные после.

Совпадение имён работает само Если в возвращаемой выборке название поля совпадает с названием внутренней переменной сценария, значение из выборки попадёт в эту переменную без всякой настройки. Удобно — но и легко получить неожиданную перезапись, если имена переменных совпали случайно.

Свойства

СвойствоОписание
SQL-запросОкно ввода запроса. Здесь же запрос можно проверить и исполнить в базе прямо в момент создания.
ТаймаутОграничение времени выполнения запроса на сервере базы. По умолчанию 30 секунд. См. оговорки ниже.
Код ошибкиПеременная, в которую сохранится код возврата.
ПереходКуда идти после успешной транзакции.
Переход, ошибкаКуда идти при исключительной ситуации; в переменную «Код ошибки» попадёт код исключения из сервера базы.
Когда свойство «Таймаут» не работает Если используется уникальная строка подключения, таймаут может быть задан прямо в ней — параметром Command Time Out.
Значение 0 означает, что таймаут особым образом не устанавливается: применяется значение по умолчанию для созданного подключения — из строки подключения либо из параметров драйвера.
При подключении к Oracle свойство не применяется вовсе.

Вкладка «Подключение»

Здесь выбирается вариант подключения к базе. Вкладка нужна главным образом для нестандартных индивидуальных настроек и для работы с внешними базами. При использовании общего формата ADO, OLE или ODBC, а также при подключении по отдельно выделенным каналам к Oracle, заполняется строка подключения — в ней и задаются индивидуальные настройки: таймаут ожидания ответа, драйвер для конкретной СУБД при работе через ODBC. Все доступные параметры с описаниями показывает помощник формирования строки подключения.

Если внешняя СУБД используется плотно При обилии хранимых процедур, запросов и параметров рекомендуется настроить прилинкованный сервер СУБД в MS SQL Server и работать с внешней базой по правилам T-SQL — вместо того чтобы поддерживать множество прямых подключений из сценариев. Процедура описана в разделе о подключении внешних баз данных.

Запрос к WEB-сервису

Выполняет запросы методами GET, POST, PUT, HEAD, DELETE. На вход может передавать заполненную структуру XML-документа; приём и обработку ответа выполняет по прикреплённой к компоненту структуре XML либо сохраняет ответ строкой. Компонент поддерживает работу в сессиях — сохраняет и использует cookie, — а также HTTPS с подтверждением сертификатов.

Связка с «Парсером» Для детального разбора ответа компонент используют вместе с «Парсером»: ответ сохраняется в строковую переменную, а дальше разбирается другими компонентами сценария. Это гибче, чем разбор по жёсткой структуре XML.

Адрес, прокси и авторизация

СвойствоОписание
URLАдрес веб-сервера.
Прокси-серверНе использовать — прямое подключение. Согласно общим настройкам — режим из общих настроек комплекса. Настроить индивидуально — параметры задаются в самом компоненте.
Адрес и Порт прокси-сервераТолько при индивидуальных настройках.
Авторизация на проксиДа / нет. Только при индивидуальных настройках.
Логин и Пароль для авторизации на проксиТолько если авторизация включена.
Базовая авторизацияНе использовать либо По логину и паролю — авторизация на самом веб-сервере.
Логин и Пароль для базовой авторизацииТолько если базовая авторизация выбрана.
Максимальное число перенаправленийПо умолчанию не задано — это эквивалентно ограничению в 20 перенаправлений, недостижимому в нормальных условиях. Значение 0 полностью игнорирует перенаправления. При каждом перенаправлении cookie накапливаются и передаются дальше.

Запрос

СвойствоОписание
МетодPOST, GET, PUT, HEAD, DELETE. Для всех, кроме GET, становится доступным формирование и отправка контента.
Тип контентаСтрока contenttype для отсылаемого запроса: application/x-www-form-urlencoded, text/xml, text/html, text/plain. Допустимы и другие строки.
Тип запросаXML — тело формируется в специальной форме с подстановкой переменных; Аргумент — тело берётся из указанного строкового аргумента.
ЗапросСоответственно форма структуры запроса либо форма выбора строкового аргумента.
Кодировка запросаUnicode, UTF-8, UTF-7, текущая кодовая страница Windows, Windows-1251, указанная кодовая страница Windows.
Кодовая страница Windows для запросаЧисловой аргумент; доступен при выборе «Указанная кодовая страница Windows».
Дополнительные заголовкиСтроковый многострочный аргумент вида HeaderName1: Value1 — позволяет переопределить стандартные заголовки и добавить свои.
Дополнительные cookieСтроковый аргумент: пары «ключ=значение», разделённые переводом строки, запятой или точкой с запятой.

Режим работы

Это ключевое свойство компонента: оно определяет, ждёт ли сценарий ответа и что случится с запросом, если сценарий завершится раньше.

РежимПоведениеЕсли сценарий прерван по обрыву связи
Ожидание результата Компонент завершается только после ответа сервера, ошибки сокета либо принудительного завершения сценария. Результат анализируется и сохраняется. Запрос обрывается, результат не сохраняется.
Асинхронный запуск Запускает запрос и мгновенно возвращает управление. Ответ не сохраняется и не анализируется. Запрос продолжает выполняться.
Обрыв по таймауту Ждёт ответа не дольше заданного времени, затем обрывает запрос и возвращает управление. Ответ, полученный до таймаута, анализируется и сохраняется. Запрос обрывается.
Выход по таймауту Ждёт заданное время, затем возвращает управление, оставляя запрос работать асинхронно. Ответ до таймаута сохраняется; после — нет, поскольку сценарий может быть уже завершён. Запрос продолжает выполняться.

Свойство «Таймаут, секунды» доступно только для режимов обрыва и выхода по таймауту.

Ответ

СвойствоОписание
Тип ответаXML — разбирать по структуре; TEXT — сохранить строкой для дальнейшего анализа. Недоступно в асинхронном режиме.
Ответ (XML)Форма структуры стандартного ответа и распределения значений по переменным. Поддерживает только строгое соответствие дерева XML. Недоступно в асинхронном режиме.
Ответ в переменнуюПеременная для текста ответа при типе TEXT. Недоступно в асинхронном режиме.
Кодировка ответаUnicode, UTF-8, UTF-7, текущая кодовая страница Windows, Windows-1251, указанная кодовая страница Windows, «Авто (заголовок)», «Авто (метатэги, заголовок)».
Кодовая страница Windows для ответаЧисловой аргумент; доступен при выборе «Указанная кодовая страница Windows».
Заголовки ответа в переменнуюПеременная, в которую сохранятся заголовки ответа.
Код ошибки в переменнуюПеременная для кода возврата. См. таблицу ниже.
ПереходКуда идти после успешной транзакции.
Переход, таймаутКуда идти при выходе по таймауту.
Переход, ошибкаКуда идти, если сервис недоступен или вернул ошибку.

Коды ошибок

Если ответ от веб-сервиса получен, код ошибки совпадает с кодом состояния HTTP. Если ответа не было — возвращаются внутренние коды компонента:

КодЧто произошло
661Истёк таймаут установления подключения (10 секунд) для отправки данных
662Не удалось установить соединение для отправки данных
663Истёк таймаут отправки тела запроса
664Ошибка при завершении отправки тела запроса
1Прочие ошибки; подробности попадают в серверный лог Exception
Различайте коды HTTP и внутренние Код 1 или коды серии 66x означают, что запрос вообще не дошёл до сервиса — проблема в сети, адресе или доступности узла. Любой другой код — это ответ самого сервиса, и разбирать его нужно по правилам HTTP.