Vba excel soap запрос
Дополнительные сведения
В меню Вид выберите код, чтобы отобразить окно кода для Service1.
Вставьте следующий код в верхнюю часть окна кода:
Вставьте следующий код в класс Service1 (непосредственно перед End Class).
Note (Примечание ) Перед выполнением этого кода и password = надежные пароли>. Убедитесь, что у идентификатора пользователя есть соответствующие разрешения на выполнение этой операции для базы данных.
Измените константу Стрконн в коде таким образом, чтобы она была допустимой строкой подключения для базы данных SQL Server Pubs.
Тестирование веб-службы
Проверьте метод Жетидс. Для этого щелкните гиперссылку Жетидс, а затем нажмите кнопку вызвать.
Метод возвращает список идентификаторов авторов, извлекаемых веб-службой из базы данных Pubs. Результаты отображаются в браузере в виде XML.
Закройте окно браузера или окна и вернитесь в Visual Studio.
Еще раз нажмите клавишу F5, чтобы запустить веб-службу.
Проверьте метод Куеридатабасе. Для этого щелкните гиперссылку Куеридатабасе, введите 409-56-7008 для параметра sID и нажмите кнопку вызвать.
Метод возвращает сведения об авторе с ИДЕНТИФИКАТОРом 409-56-7008. Результаты отображаются в браузере в виде XML.
Закройте окно браузера или Windows, чтобы завершить работу веб-службы.
Использование веб-службы из Word
В этом примере используется шаблон изысканного факса, поставляемый с Word. Этот пример не работает без этого шаблона. Чтобы установить шаблон, выполните указанные ниже действия.
Чтобы использовать веб-службу из Word, выполните следующие действия:
Запустите приложение Word. По умолчанию создается пустой документ.
В меню Сервис выберите пункт Макрос, а затем — редактор Visual Basic. В меню Вставка выберите модуль, чтобы вставить пустой модуль кода.
В меню * * Сервис * * щелкните ссылки.
В диалоговом окне " ссылки " выберите пункт Библиотека типов Microsoft SOAPи нажмите кнопку ОК.
Вставьте следующий код в модуль кода:
Note (Примечание ) Измените константу Ссервер, чтобы она ссылалась на сервер, на котором размещается только что созданная веб-служба.
В меню Вставка выберите элемент UserForm, чтобы вставить пустую форму пользователя.
Поместите в форму большие поля со списком и кнопку команды.
В меню Вид выберите код, чтобы перейти в окно кода для формы пользователя.
Замените содержимое окна код следующим кодом:
Закройте редактор VBA, чтобы вернуться к документу.
В меню Сервис выберите пункт Макрос, а затем выберите пункт Макросы. В диалоговом окне Макрос запустите макрос Шовформ для отображения списка идентификаторов. Выберите идентификатор из списка и нажмите кнопку, чтобы создать факсимильный документ с данными этого пользователя.
Использование веб-службы из Excel
В этом примере используется шаблон счета продажи, который поставляется с Excel. Этот пример не работает без этого шаблона. Чтобы установить шаблон, выполните указанные ниже действия.
- Запустите мастер установки Office.
- В мастере нажмите кнопку Добавить или удалить компоненты.
- В разделе устанавливаемые компоненты разверните Microsoft Excel для Windows, затем Шаблоны электронных таблиц, а затем щелкните счет продажи. Выберите запускать с моего компьютера и нажмите кнопку Обновить.
Чтобы использовать веб-службу из Excel, выполните указанные ниже действия.
Запустите Excel. По умолчанию создается пустая книга.
В меню Сервис выберите пункт Макрос, а затем — редактор Visual Basic. В меню Вставка выберите модуль, чтобы вставить пустой модуль кода.
В меню * * Сервис * * щелкните ссылки.
В диалоговом окне " ссылки " выберите пункт Библиотека типов Microsoft SOAPи нажмите кнопку ОК.
Вставьте следующий код в модуль кода:
Note (Примечание ) Измените константу Ссервер, чтобы она ссылалась на сервер, на котором размещается только что созданная веб-служба. Измените значение константы Стемплатепас, указав правильный путь к файлу накладной. Для Office 2000 расположением по умолчанию для этого файла является К:\микрософт Office\Templates\1033\Invoice.xlt. Для Office XP расположением по умолчанию является К:\микрософт Office\Templates\1033\Sales Invoice. xlt.
В меню Вставка выберите элемент UserForm, чтобы вставить пустую форму пользователя.
Поместите в форму большие поля со списком и кнопку команды.
В меню Вид выберите код, чтобы перейти в окно кода для формы пользователя.
Замените содержимое окна код следующим кодом:
Закройте редактор VBA, чтобы вернуться в книгу.
В меню Сервис выберите пункт Макрос, а затем выберите пункт Макросы. В диалоговом окне Макрос запустите макрос Шовформ для отображения списка идентификаторов. Выберите идентификатор из списка и нажмите кнопку команды, чтобы создать счет со сведениями о пользователе.
Ссылки
Для получения дополнительных сведений о веб-службах просмотрите статью в базе знаний Майкрософт:
Recently I have been involved with several integration projects between different EPM products. Initially it was quite challenging because as with any integration project the devil is always in the detail. The great thing with SAP EPM products is that there are web services for major processes and functions that need to be performed.
I needed to invoke a web service for an EPM product but had to do it in SAP BPC NW. Now there is several methods to invoke a web service from BPC NW, but it wouldnt be transportable to the MS product. So the solution was to invoke it from the client machine using VBA because on the client machine it can invoke any web service. Because SAP BPC uses Microsoft Office, you can create custom macros and VBA code to execute specific functions and functionality.
The answer to my particular challenge was to invoke a Web Service using custom VBA code embedded in an BPC Input Schedule and Report. Now there are several tutorials and links out on the internet which give you sample code to invoke a Web Service using VBA, but one of the major reasons for writing this blog is is to show how this approach can be used to solve several challenges and how powerful it can be.
Imagine some of the following scenarios:
- Invoking a FIM job from a click of a button on a report or input schedule.
- Invoking a BPC web service to perform a specific action
- Export data of BPC into another EPM application but simply invoking a web service to create a KPI in SSM
If you are able to get the WSDL of the Web Service, you can build your SOAP message and invoke the web service to perform the desired function. This VBA code is used to call a SOAP Web Service. It is possible to invoke a REST Web Service which BPC 10 uses, I will do this in another blog detailing a scenario in which this code could be used to solve certain business requirements.
VBA Code example : This is a simply Sub Routine in which will invoke a web service using the MSXML2 Object. This object is part of the Microsoft XML 6.0 library which is a pre-requisite for the EPM Add-In and should be installed on all client machines.
Normally I am not a big fan of using custom VB code in BPC Input Schedules and Reports because of the complexity it can introduce and that in allot of occasions you can expect unexpected behavior on different clients. For example: It works on a Windows 7 machine, but doesn’t work on Windows XP, etc. So a word of caution when using this approach is to understand the risks associated with running code on the client and its implications regarding security.
Hoping someone can help with this. I'm trying to test sending a request.xml file using VBA in Excel and can't quite figure out how to do it. I'd like to have the response be sent to the MessageBox before I can go any further.
When I run the script I can tell that it is connecting to the server, but I'm wondering if authentication is failing because I get a generic response basically saying that it successfully connect to the Apache server, but no response data.
When I use wget and send the request.xml file I get a response.xml file with the data I'm looking for. Any help would be greatly appreciated.
Here's my test code:
SOAP/XML Request file from vendor:
Enter to win a Bose Sleepbuds II and more!
Contest ends 2022-05-20 Contests Fill out the form fill, and answer a question in the thread! Contest Details View all contests
8 Replies
tfl
It might be easier to use PowerShell to call the web service, and create a CSV file you can then read into Excel?
Thanks, I'll have to try that. In the meantime, I did get further along with my initial code. In my first post I didn't realize until later that the SOAP Request has to be in the exact format received by vendor for authentication to work. Also, changing "GET" to "PUT" helped as well. I'm a novice to both SOAP/XML and VBA so this has been quite the challenge.
Now I'm able to get the response.xml data, but I'm not sure how to map certain fields to the proper cells in Excel.
Here's the code that worked:
tfl
Dim Resp As New MSXML2.DOMDocument60 in this line it is giving error for me "User defined type not defined" %uFEFF
Also please guide me how I will load the desired "wsdl" file for the individual request
Can you tell me what "//Response/ItemCost" means?
I have a similar SOAP Message, but the field which I return is called YourName>
What necessary changes should I make?
how can I extract the value of the node "User" with the excel function "FILTER.XML"%uFEFF or via VBA?
What is the path to use?
This topic has been locked by an administrator and is no longer open for commenting.
To continue this discussion, please ask a new question.
Is there a software or tool to restrict users from deleting files and folder?
Hi there I have been going through forum regarding restricting people from deleting the files. But dont think i have found any solution yet. I have a windows server, and would like to restrict people from deleting the files. Using NTFS permissions i know .
Network gremlins haunting me
I need some advice chasing down a network gremlin. So I have a 3 unit office where 2 users have no issues but 1 user has issues with VoIP and internet dropping. It’s random at best from what I can tell but none of the other users are affected when packe.
Spiceworks Help Desk recognized as a Top product by Gartner Digital Markets
Gartner Digital Markets has awarded Spiceworks Help Desk in 3 shortlist categories: Top Performer in IT Service Software, Top Performer in IT Management Software, and Established Player in IT Asset Management Software. Spiceworks Help Desk has earned a.
Snap! Conti, Trend Micro modifying Windows registry, career paths, & Who, me?
Your daily dose of tech news, in brief. You need to hear this. US offers $15 million reward for information that helps identify Conti ransomware hackers The US Department of State is offering up to $15 million for information that helps ident.
Secure way of transferring files
Hi all,I have 2 separate networks (separate DCs) that I need to be able to securely transfer files to and from, we currently have a Windows FTP set up to allow us to do this, which everyone has access to everyone's folder (as users need to be able to drop.
Работая в IoT-сфере и плотно взаимодействуя с одним из основных элементов данной концепции технологий – сетевым сервером, столкнулся вот с какой проблемой (задачей): необходимо отправлять много запросов для работы с умными устройствами на сетевой сервер. На сервере был реализован REST API с оболочкой Swagger UI, где из графической оболочки можно было отправлять только разовые запросы. Анализ сторонних клиентов, типа Postman или Insomnia показал, что простого визуального способа поместить в скрипт массив из необходимого перечня идентификаторов устройств (или любых других элементов сервера), для обращения к ним – не нашлось.
Так как большая часть работы с выгрузками и данными была в Excel, то решено было вспомнить навыки, полученные на учебе в университете, и написать скрипт на VBA, который бы мою задачку решал.
получать информацию по устройствам с различными параметрами фильтрации (GET);
применять изменения в конфигурации по устройствам: имя, профиль устройства, сетевые лицензии и пр. (PUT);
отправлять данные для конфигурации и взаимодействия с устройствами (POST).
И сегодня я расскажу вам про то, как с помощью Excel, пары формул и самописных функций на VBA можно реализовать алгоритм, отправляющий любое необходимое количество REST-API запросов с использованием авторизации Bearer Token.
Данная статья будет полезная тем, кто воспользуется данным решением под Windows, но еще больше она будет полезна тем людям, которые хотят использовать данное решение на MacOS (с Excel x64). Как вы уже догадались, ниже будут рассмотрены два варианта реализации под разные системы, так как с MacOS есть нюанс.
Часть 1. Реализация решения под Windows
GET
Начнем с самого простого: GET – запросов. В данном примере необходимо получить ответ (информацию) от сервера по заданному списку устройств.
Для реализации GET – запросов нам дано:
1) Ссылка, в которой указываются параметры запроса.
2) Заголовки запроса + Токен авторизации (Bearer Token)
--header 'Accept: application/json' --header 'Authorization: Bearer
3) Параметр, указываемый в ссылке (в данном примере это идентификаторы устройств – DevEUI):
Имея такие данные на входе, делаем в Excel лист-шаблон, который заполняем в соответствии с тем, что имеем:
столбец А уходит вот значения параметров
столбец F уходит под ссылку-родителя
столбец H уходит под заголовки, где в ячейке H1 единоразово для текущего листа указывается токен:
=СЦЕП("--header 'Accept: application/json' --header 'Authorization: Bearer ";$H$1;"'")
столбец I уходит под URL (ссылки-дети, на основе ссылки-родителя)
столбец J уходит под результат (ответ от сервера)
Далее, нам необходимо реализовать подпрограмму(макрос) отправки GET-запросов. Состоит она из четырех частей:
цикла, который считает количество строк для работы по листу, пробегая по столбцу А с 2 по первую пустую ячейку, чтобы у цикла был конец.
временной задержки, в случае если нужно отправлять запросы не сразу, после получения ответа, а задав время ожидания
таймером, который показывает время выполнения всего макроса после завершения
Привязываем подпрограмму к кнопкам для удобства и выполним скрипт. Получается:
Таким образом, скрипт проходит по столбцу I, забирая из значения каждой ячейки URL, для тех строк, где в столбце А есть значения (которые и подставляются в URL). Для удобства также сделаны кнопки очистки полей и подсветка запросов условным форматированием, в случае успешного ответа на запрос.
PUT
Чуть-чуть усложним задачу и перейдем к PUT-запросам. В данном примере необходимо изменить профиль устройства, чтобы сервер по-другому с ним взаимодействовал.
К исходным данным для GET – запроса добавляется тело запроса с ключем-значением (п4). Итого дано:
1) Ссылка, в которой указываются параметры запроса.
2) Заголовки запроса + Токен авторизации (Bearer Token)
--header 'Content-Type: application/json' --header 'Accept: application/json' --header 'Authorization: Bearer
3) Параметр, указываемый в ссылке (в данном примере это внутренние идентификаторы устройств – hRef):
4) Тело запроса, с ключом и значением:
Немного дополняем новый PUT-лист в Excel по сравнению с GET (остальное без изменений):
новый столбец B теперь отвечает за ключ deviceProfileId (ячейка B1), а все значения ниже за его возможные значения)
Немного поменяем макрос и вынесем его в отдельную подпрограмму:
Привяжем макрос к кнопке и выполним.
Логика абсолютно аналогична GET запросу.
POST
Для POST запросов все аналогично PUT. Только немного меняется код в части типа запроса. В данном примере на устройство отправляется команда-конфигурация с указанием тела посылки (payload_hex) и порта (fport) для конкретного устройства.
Получившаяся таблица выглядит следующим образом:
На этом часть для Windows заканчивается. Здесь все оказалось довольно просто: стандартная библиотека, простенький алгоритм перебора значений в цикле.
Часть 2. Реализация решения под MacOS и Excel 64-bit
Чтобы обойти данное ограничение, был выбран единственный рабочий подход через cUrl, exec и функции. Данное решение точно работает под версией MacOS 10.14 и Excel 16.51. Функция ниже, в том или ином виде, встречается на различных форумах, однако на текущих версиях софта – не работает. В итоге, после небольших правок получили рабочий вариант:
Была отлажена функция вызова ExecShell:
И написаны отдельные функции для работы с различным методами GET / PUT / POST, которые на входе принимают URL и параметры):
В итоге, у меня получилось аналогичное windows по работе и функционалу решение для MacOS c использованием Excel 64-bit.
На просторах интернета я не нашел какого-то сборного и единого описания, только фрагменты кода и подходов, которые в большинстве случаев не работали полностью или частично. Поэтому решил объединить все в рабочее решение и выложить на хабр для истории.
На текущий момент я все еще не встретил иного решения, которое бы позволяло в пару кликов копипастить тысячи идентификаторов и параметров из excel и массово их отправлять на сервер. Надеюсь, кому-то пригодится :)
Если такие сторонние решения есть, а я не в курсе, и все можно было сделать проще, быстрее и изящнее – делитесь опытом в комментариях.
Файл-пример, который можно потыкать, пока жив сервер и "бессрочный" токен:
A blog about developing applications for use with SYSPRO - technical information in full detail. The opinions expressed here do not necessarily reflect those of Syspro or anybody else; the information is given in good faith but is not backed by Syspro or anybody else; use at your own risk; your mileage may vary; not valid in Sector C.
Monday, 21 April 2014
How to access SOAP services from VBA in Excel or similar
To access a SOAP web service (such as a Syspro web service) from Visual Basic for Applications (such as an Excel 2003 macro), you can download Microsoft’s SOAP toolkit and access that from Visual Basic.
If you tailor the example code from Microsoft’s SOAP toolkit to make it easy to call Syspro functions; here’s a code snippet example:
Place the following code in a Class Module in Excel; call the moduleSyspro_Utilities_Web_Service, or change the above code to match whatever you call it.
Place the following code in a Class Module in Excel; call the moduleSyspro_Transaction_Web_Service, or change the above code to match whatever you call it.
In Excel, in the Microsoft Visual Basic for Applications window, you will need to go to Tools / References and add these references, if you not using late binding to the Microsoft SOAP library:
Microsoft’s SOAP libraries have been deprecated, but if you have applications that still want to use SOAP, there are still ways to do that.
Firstly, I found that the Microsoft SOAP libraries still work on Windows XP, Windows 7 (both 32 and 64-bit), but NOT on Windows Server 2008 R2.
They don’t seem to work on Windows Server 2008 R2 because the system can’t find the SOAP DLL’s in the registry, because the system seems to use new, different, or wrong registry keys to locate the SOAP DLL’s:
NOTE for developers
Visual Studio 2010 must be run As Administrator so that you can test the DLL when you run it from Visual Studio as the SoapClient is exposed as a COM Object and needs to be registered when it is built so that it can be found when it is run.
On the client’s machine, it doesn’t matter where you put the DLL on the client’s machine but the DLL must be registered using regasm.
Читайте также: