Найти тему

Работа с Web-сервисами на примерах

Оглавление

Краткое описание

Web-сервисы – это объект метаданных, в модуле которого можно описать методы доступные для использования сторонними программами (после публикации на веб-сервере). Для доступа к web сервису используется протокол SOAP. Для описания структуры передаваемых данных используются XDTO-пакеты. Более подробно про XDTO можно почитать в статье – Работа с XML через механизм XDTO с примерами.

В данной статье рассмотрен пример создания веб-сервиса “Данные сотрудника”, который по табельному номеру возвращает ФИО сотрудника и таблицу с данными по рабочему времени состоящую из дата и отработанных часов.

Файлы материала

Расширения с примерами доступны для скачивания по ссылке.

В коде расширения необходимо изменить логин ,пароль и адрес публикации (http://192.168.21.0/zup31) на подходящие для подключения к вашей базе с web сервисом.

Подготовка

Для работы необходимо установить любой веб-сервер (Apache, IIS) для дальнейшей публикации на нем web-сервиса. Если веб-сервис находится в расширении, то необходимо в публикации установить флаг “Публиковать Web-сервисы расширений по умолчанию”.

-2

Для отладки в файл публикации default.vrd необходимо добавить строчку со следующим содержанием

XHTML

<debug enable="true" protocol="tcp" url="tcp://localhost"/>

И перезапустить веб-сервер, после этого будет срабатывать точка остановы.

Пример реализации Web-сервиса в базе 1С ЗУП

-3

Создадим XDTO-пакет с именем “АВ_ДанныеСотрудника”, что бы описать структуру передаваемых данных (аналогичный XDTO-пакет был создан в статье Работа с XML через механизм XDTO с примерами).

В данном пакете создадим “тип объекта” ДанныеПоРабочемуВремени со свойствами:

Дата - тип string из пространства имен http://www.w3.org/2001/XMLSchema

РабочееВремя - тип int из пространства имен http://www.w3.org/2001/XMLSchema

И “тип объекта” Сотрудник со свойствами:

ФИО - тип string из пространства имен http://www.w3.org/2001/XMLSchema

ТабельныйНомер - тип string из пространства имен http://www.w3.org/2001/XMLSchema

ДанныеПо РабочемуВремени - тип ДанныеПоРабочемуВремени из пространства имен https://www.myblog-1c.ru

  1. После этого создадим одноименный веб-сервис “АВ_ДанныеПоСотруднику“. Установим пакет XDTO, пространство имен и имя для публикации.
-4

2. В нем создадим единственный метод “Получить” и свяжем с одноименной функцией.

-5

3. Добавим один входной параметр “НомерДокумента“, который не может быть пустым.

-6

4. Опишем функцию к которая будет формировать данные по сотруднику и возвращать их в стороннюю программу.

Функция Получить(НомерДокумента)

СотрудникСсылка = Справочники.Сотрудники.НайтиПоКоду(НомерДокумента);

Если НЕ ЗначениеЗаполнено(СотрудникСсылка) Тогда

Возврат Неопределено;

КонецЕсли;

// получить тип объектов XDTO

ДанныеПоРабочемуВремениТип = ФабрикаXDTO.Тип("https://www.myblog-1c.ru", "ДанныеПоРабочемуВремени");

СотрудникТип = ФабрикаXDTO.Тип("https://www.myblog-1c.ru", "Сотрудник");

// созадть объект XDTO "сотрудник" и заполнить свойства

Сотрудник = ФабрикаXDTO.Создать(СотрудникТип);

Сотрудник.ФИО = СотрудникСсылка.Наименование;

Сотрудник.ТабельныйНомер = СотрудникСсылка.Код;

// созадть объект XDTO "данных по времени 1" и заполнить свойства

ДанныеПоРабочемуВремени = ФабрикаXDTO.Создать(ДанныеПоРабочемуВремениТип);

ДанныеПоРабочемуВремени.Дата = Дата(2023,3,1);

ДанныеПоРабочемуВремени.ВремяПоТабелю = 5;

// добавить строку к сотруднику

Сотрудник.ДанныеПоРабочемуВремени.Добавить(ДанныеПоРабочемуВремени);

// созадть объект XDTO "данных по времени 2" и заполнить свойства

ДанныеПоРабочемуВремени = ФабрикаXDTO.Создать(ДанныеПоРабочемуВремениТип);

ДанныеПоРабочемуВремени.Дата = Дата(2023,3,2);

ДанныеПоРабочемуВремени.ВремяПоТабелю = 8;

// добавить строку к сотруднику

Сотрудник.ДанныеПоРабочемуВремени.Добавить(ДанныеПоРабочемуВремени);

Возврат Сотрудник;

КонецФункции

После публикации веб сервис будет доступен для клиентских приложений.

Пример обращения к Web-сервису на стороне клиента

Перед обращения к веб сервису необходимо создать Прокси подключение, данную операцию можно сделать двумя способами:

1. С использованием статической WS ссылки (Более быстрое подключение к источнику, но необходимо создать объект в дереве метаданных)

-7

В момент создания WS-ссылки будут прочитаны данные по структуре XDTO и протоколу SOAP из Web-сервиса в базе источнике.

2. С использованием динамической WS ссылки (Более медленный, учитывает изменения веб-сервиса и XDTO-пакета в источнике “на лету”)

Пример кода получения данных из другой конфигурации, адрес публикации (http://192.168.21.0/zup31) и Логин / Пароль для входа в базу необходимо заменить на свои.

Процедура ПолучитьДанныеСотрудникаНаСервере(Знач ТабельныйНомер)

Логин = "Администратор";

Пароль = "";

//ТабельныйНомер = "0000-00001";

//// Пример создания "Прокси" с использованием статической WS ссылки

//Прокси = WSСсылки.АВ_ДанныеСотрудника.СоздатьWSПрокси("https://www.myblog-1c.ru", "АВ_ДанныеСотрудника", "АВ_ДанныеСотрудникаSoap");

//Прокси.Пользователь = Логин;

//Прокси.Пароль = Пароль;

// Создание "Прокси" с использованием динамической WS ссылки

Определение = Новый WSОпределения("http://192.168.21.0/zup31/ws/worker.1cws?wsdl", Логин, Пароль);

Прокси = Новый WSПрокси(Определение, "https://www.myblog-1c.ru", "АВ_ДанныеСотрудника", "АВ_ДанныеСотрудникаSoap");

Прокси.Пользователь = Логин;

Прокси.Пароль = Пароль;

// вызов метода web-сервиса

ДанныеПоСотруднику = Прокси.Получить(ТабельныйНомер);

// обработка результата

Если ДанныеПоСотруднику = Неопределено Тогда

Возврат;

КонецЕсли;

Сообщить("По сотруднику "+ДанныеПоСотруднику.ФИО+" получено рабочее время");

Для Каждого СтрокаВремя Из ДанныеПоСотруднику.ДанныеПоРабочемуВремени Цикл

Сообщить(" - "+Формат(СтрокаВремя.Дата, "ДФ=dd.MM.yyyy")+" - "+Строка(СтрокаВремя.ВремяПоТабелю)+" ч.");

КонецЦикла;

КонецПроцедуры