Как правильно передать параметры в веб-сервис 1С через WSПрокси?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При интеграции систем часто возникает необходимость вызова внешних веб-сервисов (SOAP) из 1С с помощью объектов WSОпределения и WSПрокси. В зависимости от того, как метод веб-сервиса объявлен в его WSDL-схеме, передача параметров может осуществляться простым передаванием обычных переменных 1С либо путем сериализации объектов в формат XDTO.

Рассмотрим подробнее, как передавать как базовые типы данных (строки, числа, даты), так и сложные структуры или таблицы значений.

1. Автоматическое приведение примитивных типов

Если в WSDL-описании операции параметры заданы базовыми типом XML (например, xs:string, xs:int, xs:dateTime, xs:boolean), платформа 1С автоматически выполняет их преобразование из стандартных типов 1С (Строка, Число, Дата, Булево). Дополнительных действий по преобразованию выполнять не нужно.

Важное правило: параметры в динамический метод прокси передаются строго в той последовательности, в которой они описаны в WSDL-схеме веб-сервиса.

Посмотрим на пример вызова метода веб-сервиса, принимающего примитивные параметры:


// Создание определений и прокси-объекта
АдресWSDL = Выборка.АдресВебсервиса + "?wsdl";
Определения = Новый WSОпределения(АдресWSDL);
Прокси = Новый WSПрокси(Определения, "urn:DefaultNamespace", "DBNAMEService", "Domino");

// Передача параметров непосредственно в вызываемый метод сервиса
Ответ = Прокси.SKDTASK(
    Тип, 
    Сотрудник.ФизЛицо.ИдентификационныйКодЛичности, 
    Руководитель.Физлицо.ИдентификационныйКодЛичности, 
    УниверсальноеВремя(ДатаИВремя, Организация.СКД_ЧасовойПояс), 
    Фото, 
    УниверсальноеВремя(ДатаАвтоОтвета, Организация.СКД_ЧасовойПояс)
);

2. Передача сложных типов с использованием СериализатораXDTO

Когда требуется передать составной объект (например, Структура, Массив или ТаблицаЗначений), стандартных типов данных XML недостаточно. В таком случае объект 1С переводится в формат XDTO с помощью объекта СериализаторXDTO.

Разберем по шагам порядок подключения к веб-сервису с аутентификацией и передачей сериализованного объекта:

  1. Подключаемся к веб-сервису, передавая параметры авторизации в WSОпределения и WSПрокси.
  2. Сериализуем объект 1С в объект XDTO с помощью метода СериализаторXDTO.ЗаписатьXDTO().
  3. Передаем полученный объект XDTO в метод прокси-сервиса.

Проанализируем пример кода:


Пользователь = ИмяПользователя;
Пароль = ПарольПользователя;

Попытка
    Определение = Новый WSОпределения(URLВебСервиса, Пользователь, Пароль);
    Прокси = Новый WSПрокси(Определение, URIПространстваИмен, ИмяВебСервиса, ИмяВебСервисаSoap);
    Прокси.Пользователь = Пользователь;
    Прокси.Пароль = Пароль;
Исключение
    ЗаписьЖурналаРегистрации(
        НСтр("ru = 'Веб-Сервис'"), 
        УровеньЖурналаРегистрации.Ошибка,
        ,, 
        ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)
    );
    ВызватьИсключение;
КонецПопытки;

// Сериализация Таблицы Значений или Структуры в XDTO-объект
ТаблицаЗначенийXDTO = СериализаторXDTO.ЗаписатьXDTO(ТаблицаЗадач);

// Вызов метода веб-сервиса
ГотоваяТаблицаXDTO = Прокси.GetPercentTask(ТаблицаЗначенийXDTO);

Также возможен вариант, когда параметры упаковываются в структуру, а элементы структуры отдельно преобразуются в XDTO перед вызовом сервиса:


НаименованиеОтчета = "Отчет по продажам";

ПараметрыОперации = Новый Структура;
ПараметрыОперации.Вставить("ReportName", НаименованиеОтчета);
ПараметрыОперации.Вставить("Params", СериализаторXDTO.ЗаписатьXDTO(СтруктураПараметровОтчета));

// Передача готовых параметров в метод сервиса
ОбъектXDTO = WSПрокси.СформироватьОтчет(ПараметрыОперации.ReportName, ПараметрыОперации.Params);

3. Практические нюансы и рекомендации

При вызове веб-сервисов в 1С стоит учитывать следующие особенности:

← На главную