В предыдущем посте ми работали с веб сервисом и статической ссылкой, это для программиста, но не всегда удобно для пользователя. В случае изменений в структуре веб сервиса нужно менять конфигурацию. Я предпочитаю работать с динамическими ссылками из внешних обработок, в таком случае при изменении структуры веб сервиса ми просто обновляем внешнюю обработку, не меняя конфигурацию. В прошлом посте мы получали погоду в нашем регионе, давайте теперь поработаем с одним из сервисов Яндекса, а конкретно с Яндекс спеллером: http://api.yandex.ru/speller/ у него как не странно есть нужный нам XML- и SOAP-интерфейс который находиться по ссылке http://speller.yandex.net/services/spellservice?WSDL
Для разбора WSDL мы можем воспользоваться статической WSссылкой (как в предыдущем примере), но плох тот программист, который использует только один инструмент. Да вы будете знать этот инструмент, как говориться, «от и до», но кругозор Ваш будет ограничен. Использование разных инструментов позволяет более широко смотреть на вещи и видеть неочевидные для других решения. Поэтому мы воспользуемся прекрасной программой soapUI http://www.soapui.org/
Это программа, которая позволяет работать с веб сервисами и предоставляет довольно продуманный интерфейс. Нужно заметить, что у меня время от времени тормозит (залипает) мышка при работе с этой программой. Качаем ее с сайта и устанавливаем. Я ею пользуюсь для того чтобы видеть запросы которые посылает программа к веб сервису. Это больше вспомогательный элемент для отладки. В примере, который я наведу ниже, soapUI использовался, чтобы смотреть структуру ответа сервера проверки правописания, и правильного разбора ответа в 1с-ке.
Итак, перейдем непосредсвенно к обработке-примеру. Обработка будет состоять из двух форм: основная форма с полем для ввода проверяемого текста, и форма замены ошибочного слова на правильное.
Практически как проверка правописания в ворде.
Для нетерпеливых ссылка на обработку http://goo.gl/PqAeZ
Логика работы обработки следующая:
Итак, код функции, которая отправляет текст на проверку следующий
функция проверкаТекста(текст) WSОпределение = Новый WSОпределения("http://speller.yandex.net/services/spellservice?WSDL", "", ""); WSПрокси = Новый WSПрокси(WSОпределение, "http://speller.yandex.net/services/spellservice" , "SpellService", "SpellServiceSoap" ); РезультатВебОперации = WSПрокси.checkText(текст); для каждого строки из РезультатВебОперации.error цикл стр0= ВариантыНаписания.Добавить(); стр0.слово= строки.word; стр0.Позиция = строки.pos; для каждого вариантыЗамены из строки.s цикл стр=слова.добавить(); стр.слово=строки.word ; стр.ВариантНаписания= вариантыЗамены; стр.строка = строки.row; стр.Позиция = строки.pos; конеццикла; конеццикла; возврат строка(РезультатВебОперации.error); конецфункции
Основное, отличие первой строке, где мы получаем WSОпределение веб сервиса и передаем это значение при создании WSПрокси. Потом в циклах я разбираю ответ сервера и заполняю соответствующие колонки. Для того чтобы знать что ответил сервер я воспользовался программой soapUI, ссылку на которую приводил выше.