Використання soapui для роботи з веб-сервісами

1. Простий веб-сервіс

Для початку візьмемо каркасну конфігурацію без веб-сервісів і пройдемо по кроках процес їх створення.

Додамо новий веб-сервіс з ім'ям test1 і створимо в ньому операцію hello з повертається типом string. Імена веб-сервісів і операцій краще завжди ставити на латиниці.

Використання soapui для роботи з веб-сервісами

При натисканні на лупу в поле "Ім'я процедури" буде відкритий модуль веб-сервісу і можна буде реалізувати функцію hello.

2. Публікація веб-сервісу.

Використання soapui для роботи з веб-сервісами

3. Тестування за допомогою SoapUI

Для тестування створимо окремого користувача WsUser, з простим паролем і дамо йому повні права.

Після цього встановлюємо і запускаємо SoapUI. Ця програма дуже зручна для тестування веб-сервісів, вона може отримувати їх опис і робити post-запити до сервісів.

Заходимо в меню File - New SOAP project, задаємо ім'я проекту hellotest а в поле Initial WSDL пропишемо ось таке посилання:

Використання soapui для роботи з веб-сервісами

Soap12Binding відрізняється тим, що працює за новою версією стандарту SOAP 1.2. Відкриємо в test1Soap12Binding елемент Request1 і побачимо ось що:

Використання soapui для роботи з веб-сервісами

Тепер можна нарешті виконати запит до функції hello і подивитися відповідь:

Використання soapui для роботи з веб-сервісами

Відмінно, все запрацювало!

4. Передача простих параметрів в функцію.

Тепер зробимо нову функцію з параметрами, наприклад перевіримо роботу з датами, зробимо функцію getSaleDocNumbersByDate, яка буде приймати дату документа (видаткової накладної) і повертати номера документів за цю дату рядком. Додамо до операції параметр date з типом dateTime:

Використання soapui для роботи з веб-сервісами

Тепер в SoapUI правою кнопкою миші потрібно клікнути на елемент testSoap12Binding і вибрати пункт Update Definition. Після цього в проекті з'явиться функція getSaleDocNumbersByDate і готовий Request до неї. Для заповнення дати потрібно використовувати формат "YYYY-MM-DDThh: mm: ss" (можна подивитися на w3schools і ДУЖЕ рекомендую користуватися цим сайтом для розуміння роботи з xml)

Тоді вийдуть ось такі запит і відповідь:

Використання soapui для роботи з веб-сервісами

5. Пакети XDTO

Якщо необхідно передавати у функції більш складні параметри (наприклад, xml з декількома полями), або отримувати у відповідь складні за структурою xml, то нам не обійтися без пакетів XDTO.

Дуже детально робота з XDTO розглянута в циклі статей XDTO це просто. По суті, пакет визначає структуру і тип полів використовуваних xml-файлів.

Я розгляну приклад передачі і отримання xml-файлу, тип якого визначений в пакеті

  • передача в 1с xml-файлу, що не описаного в пакеті, в форматі base64
  • отримання з 1с документа pdf у форматі base64 і його декодування
  • отримання з 1с xml-файлу з вкладеної структурою елементів і визначення їх кількості

6. Передача в 1с в параметрі xml-файлу, тип якого визначений в пакеті.

Завдання буде така: знайти документ видаткової накладної за заданими у вхідному xml номеру і дати і повернути знайдений документ. Повертати потрібно також у вигляді xml з номером, датою, контрагентом і його кодом і табличній частиною товарів.

Створимо пакет packet1 з простором імен packet1_ns. Для вхідного xml-файлу визначимо тип об'єкта InDocSaleQuery з полем number типу string і полем date типу dateTime. Для вихідного файлу визначимо спочатку тип для одного рядка табличної частини товарів: SaleItem з полями name типу string, price sum, quantity типу decimal. А сам документ SaleDoc буде у нас складеного типу: поля number, date, partnerName і поле SaleItems у якого буде тип SaleItem і максимальну кількість -1. Саме таке поле позначає, що в ньому може бути присутнім масив з декількох елементів. Ось так все це виглядає в конфігураторі:

Використання soapui для роботи з веб-сервісами

Далі у властивостях веб-сервісу потрібно задати використання пакета XDTO packet1_ns. getSaleDoc з типом значення, що повертається SaleDoc і вхідним параметром incomingXML типу InDocSaleQuery.

Спочатку продемонструю код функції, а вже потім поясню що відбувається

Тут два основних аспекти. Перший: так як було поставлено тип вхідного параметра incomingXML і він був описаний цей тип в пакеті, то відразу можливо звертатися до полів цього входить xml. Другий: робота з фабрикою XDTO. З неї було отримано тип для результуючих вихідних параметрів і створено ЗначеніеXDTO цього типу, у якого були заповнені необхідні поля. Також варто зауважити, що в типі SaleDoc слід ввести окреме поле для помилки, але для тестових цілей помилки будуть записані в поле number.

Ось як виглядає результат цього запиту в SoapUI:

Використання soapui для роботи з веб-сервісами

Як видно, все працює, але ще є що поліпшити - наприклад, хотілося б знати скільки елементів SaleItems у нас в документі.

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

У доданому архіві - вивантаження інформаційної бази і проект SoapUI.

Схожі статті