Show/Hide Toolbars

Руководство администратора

Если веб-сервис работает с данными в XML-формате, в смарт-действии Отправить HTTP запрос нужно использовать параметр Тело POST запроса. При этом необходимо передавать в хедере ключ Content-Type.

Для примера рассмотрим работу с он-лайн калькулятором http://www.dneonline.com/calculator.asmx и выполним простейшее действие — сложение двух чисел 2+3. Результат запишем в ДП "Число".

Смарт-пакет состоит из двух действий — отправка HTTP-запроса и обработка полученного результата.

1.Отправка HTTP-запроса.

В соответствии с API веб-сервиса, тело POST-запроса должно быть таким:

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
  <Add xmlns="http://tempuri.org/">
    <intA>2</intA>
    <intB>3</intB>
  </Add>
</soap12:Body>
</soap12:Envelope>

Кликните мышью для просмотра изображения в полном размере

Смарт-действие для отправки http-запроса.

2.Результат смарт-действия — это JSON типовой структуры. В нашем примере в атрибуте ResponseContent возвращается XML-выражение, в котором результат записан в теге AddResult:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
    <AddResponse xmlns="http://tempuri.org/">
        <AddResult>5</AddResult>
    </AddResponse>
  </soap:Body>
</soap:Envelope>

Для обработки этого результата в смарт-выражении сначала из JSON получаем атрибут ResponseContent с XML-выражением, а затем из XML-выражения получаем значение AddResult (в XML-выражении символы '<' и '>' заменяются на '&lt;' и '&gt;', поэтому для разбора XML необходимо заменить их обратно).

DECLARE @xml_text xml;
DECLARE @text varchar(max);
 
set @text = (select top 1 JSON_VALUE (@ActionResult10670, '$.HttpResponse.ResponseContent') for xml path(''));
set @xml_text = replace(replace(@text, '&lt;', '<'),'&gt;','>');
 
;WITH XMLNAMESPACES ('http://www.w3.org/2003/05/soap-envelope' AS SOAP, 'http://tempuri.org/' AS NS)
SELECT n.value('.', 'VARCHAR(MAX)')
FROM @xml_text.nodes('/SOAP:Envelope/SOAP:Body/NS:AddResponse/NS:AddResult') N ( n );

Кликните мышью для просмотра изображения в полном размере

Смарт-действие для обработки результатов http-запроса.

Полезные ссылки