Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Нужен рабочий пример "как вызвать из VBA Web сервис"?  (Прочитано 25333 раз)
0 Пользователей и 1 Гость смотрят эту тему.
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« : 27-08-2012 09:41 » 

Задача:  создать в документе  MS Excel  кнопку , которая будет брать из ячеек некоторые параметры подставлять их в запрос к Web-сервису , принимать ответ и раскладывать полученный XML в лист.
Упрощенно задачу можно сформулировать как "запрос курса валюты" , те взять из ячейки идентификатор валюты "USD", "RUR" ...  и дату , результат положить в определенную ячейку листа. Сразу хочу сказать, что  про курс валют это условный пример, реальная задача глубоко специфическая...
Мне нужно разобраться как это делается в принципе , какие либы и какие объекты нужно подцепить и как их использовать.
В лоб гугля почему то  дает отдельно  работу с сервисами и отдельно VBA, так как про web-сервисы я  знают только что они типа есть. Самостоятельно трансформировать набор XML из этих статей  в конкретные конструкции VBA : Подключение к серверу, Вызов сервиса ,Получение результата, Разбор результата пока не получается.
Буду очень признателен за помощь.
Записан

Да да нет нет все остальное от лукавого.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 27-08-2012 13:35 » new

PSD, работа с web-сервисами происходит по протоколу SOAP (обычно поверх HTTP), сам сервис описывается при помощи языка WSDL. Обмен данными производится в формате XML. VBA ни с тем, ни с другим работать не умеет. VBA работает с COM-объектами, которые умеют это делать. Если COM-объект работы с XML широко используется, и примеров в интернете масса, то с COM-объектом клиента для SOAP+WSDL я лично не сталкивался. Наверно, есть что-то. Ищи по перечисленным ключевым аббревиатурам.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
zubr
Гость
« Ответ #2 : 27-08-2012 14:28 » 

Я в VBA не знаток, но вроде с WinAPI VBA умеет работать. Если так, то можно отправлять-принимать запросы-ответы, используя WinInet-функции.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 27-08-2012 15:07 » 

zubr, не, вручную SOAP реализовать - тухлое дело.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 27-08-2012 15:45 » 

хм...
Что-то вы усложняете...
CreateObject("MSXML2.XMLHTTP")

может быть...
ActiveX-компонент WebBrowser

Что понимать под web-сервисом?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 27-08-2012 18:47 » 

Sla, XmlHttp лишь позволит создать работать по HTTP, а надо SOAP.

Проблема в том, что веб-сервисы и DCOM/COM+ в некотором смысле конкуренты как технологии для RPC. Ясен пень, Microsoft не горела желанием делать поддержку первого. Сейчас в .NET, конечно, поддержка есть и полноценная. Но COM - более старая технология, и не уверен, что есть системный объект, осуществляющий такую поддержку. Впрочем, некоторые .NET компоненты опубликованы как COM - можно где-то там поискать.

Интернеты говорят, что есть такой COM-ник в природе. MSSOAP.SoapClient30. Смотреть надо SOAP Toolkit от Microsoft (30 означает версию 3.0 - может другие есть).
« Последнее редактирование: 28-08-2012 07:39 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #6 : 28-08-2012 04:05 » 

Dimka прав
вот с использование специального объекта
а вот и без оного

сам не проверял, но похоже на рабочие примеры
Записан

I Have Nine Lives You Have One Only
THINK!
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 28-08-2012 11:58 » 

Я не могу понять, откуда вы взяли, что нужен SOAP? Или только из слов: web-сервис?
То что web-сервис отдает XML, это ведь не значит, что он поддерживает SOAP в смысле его синтаксиса
Код: (XML)
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 28-08-2012 13:05 » 

Sla, да, только из слова "веб-сервис". О чём спрошено, то и отвечено.

И если некое сетевое приложение отдаёт XML и не понимает SOAP, то это не веб-сервис, а просто сетевое приложение. Может даже веб-приложение.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 28-08-2012 13:27 » 

Dimka, согласен.
А что скажет ТС?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines