Вход | Регистрация
 

Передать в качестве параметра метода веб сервиса XML

Передать в качестве параметра метода веб сервиса XML
Я
   cmex
 
22.04.19 - 20:12
Доброго дня!
В SoapUI рабочий текст "<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:plug="http://plugins.operday.ERPIntegration.crystals.ru/">;
   <soapenv:Header/>
   <soapenv:Body>
      <plug:getPurchasesByParams>
         <dateOperDay>2019-04-22</dateOperDay>
         <shopNumber>999</shopNumber>
      </plug:getPurchasesByParams>
   </soapenv:Body>
</soapenv:Envelope>"
Как из 1С вызвать метод getPurchasesByParams и передать туда этот xml?

код не работает, не достаточно параметров

СтрокаXML = "
        |<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/""; xmlns:plug=""http://plugins.operday.ERPIntegration.crystals.ru/"">;
        |<soapenv:Header/>
        |<soapenv:Body>
        |    <plug:getPurchasesByParams>
        |    <dateOperDay>2019-04-22</dateOperDay>
        |     <shopNumber>999</shopNumber>
        |  </plug:getPurchasesByParams>
        |    </soapenv:Body>
        |</soapenv:Envelope>";        
        Ответ = Прокси.getPurchasesByParams(СтрокаXML);

Помогите разобраться, куда копать
 
 
   Cyberhawk
 
1 - 22.04.19 - 20:15
Ну либо через ВС-прокси, создаваемое из ВСДЛ-описания (в т.ч. на лету), либо через ХТТП-соединение и его ХТТП-запрос.
Второе надежнее (в плане гарантированного успеха), т.к. 1С не с любым ВСДЛ-описанием умеет.
   cmex
 
2 - 22.04.19 - 20:26
(1) а можно поподробнее? что в моем коде переделать? если через ВС
   cmex
 
3 - 22.04.19 - 21:07
кто нибудь, хеелп
   Cyberhawk
 
4 - 22.04.19 - 21:14
Ну тебе в метод надо не текст ХМЛ передавать, а ХДТО-объект (структуру / соответствие в терминологии 1С), созданный через фабрику ВС-прокси, с нужными полями dateOperDay и shopNumber
   cmex
 
5 - 22.04.19 - 23:33
(4) СвояФабрикаXDTO = Определения.ФабрикаXDTO;
        
        КорневойТип = СвояФабрикаXDTO.Тип(ПрострИмен, "getPurchasesByParams");
        КорневойОбъект = СвояФабрикаXDTO.Создать(КорневойТип);
        
        КорневойОбъект.dateOperDay = элОперационныйДень;
        КорневойОбъект.shopNumber = 93;
        
        ДвоичныеДанные = Прокси.getPurchasesByParams(КорневойОбъект); 

не достаточно параметров
   azernot
 
6 - 22.04.19 - 23:45
Прокси.getPurchasesByParams(КорневойОбъект.dateOperDay, КорневойОбъект.shopNumber)

А если так?
   cmex
 
7 - 22.04.19 - 23:54
(6) момент
   cmex
 
8 - 22.04.19 - 23:58
(6) то же самое - недостаточно фактических параметров. я вот принцип не могу понять, что в качестве параметров в метод можно передавать? там явно надо 5 значений. то есть если я передам всего один и там укажу "фигню" , он тупо не пропустит количество этих параметров, даже не дойдет до проверки "фигни". как будто платформа из Определения видит, что все 5 параметров обязательны для заполнения и дальше сама 1с не пускает
   cmex
 
9 - 23.04.19 - 00:00
добавляю WS ссылку , там у 4х параметров "Возможно пустое" = Истина, но ощущение что на заборе тоже написано, а по факту очень даже обязательное. Если передаю такое Прокси.getPurchasesByParams("2019-04-22", 93 , 0 ,0,0), то ответ приходит, но пустой, но приходит
   cmex
 
10 - 23.04.19 - 00:03
а можно как то создать xdto объект из WS прокси, но при этом удалить оттуда ненужные свойства? может платформу глючит?
 
 Рекламное место пустует
   palsergeich
 
11 - 23.04.19 - 00:13
(10) Можно сохранить схему, из нее убрать ненужные свойства, потом прочитать схему и создать XDTO объект на основании модифицированной схемы.
Там есть еще фишка. если это платформенная интеграция, то в БСП вроде схемы сохраняются в регистре сведений, кше чего то там, и если запись в регистре есть, то он не лезет за самой схемой в источник и может быть невалидная схема на текущий момент хранится.
На сколько я помню в обработке из состава БСП - обновление вспомогательных данных - можно этот регистр почистить
   palsergeich
 
12 - 23.04.19 - 00:14
Платформенная имеется ввиду коробочная интеграция от вендора
   palsergeich
 
13 - 23.04.19 - 00:21
регистр сведений "Кэш программных интерфейсов" вспомнил
   cmex
 
14 - 23.04.19 - 07:24
(11) не совсем понял, какую схему и как сохранить? буду признателен за чуть поподробнее)
   cmex
 
15 - 23.04.19 - 09:36
up
   cmex
 
16 - 23.04.19 - 13:17
коллеги, победил, но убого - через "MSXML2.XMLHTTP". есть еще варианты или мой окультурить как то можно?

Запрос =  "

            |<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/""; xmlns:plug=""http://plugins.operday.ERPIntegration.crystals.ru/"">;
            |<soapenv:Header/>
            |<soapenv:Body>
            |<plug:getPurchasesByParams>
            |<dateOperDay>"+Формат(элОперационныйДень,"ДФ=""yyyy-MM-dd""")+"</dateOperDay>
            |<shopNumber>93</shopNumber>
            |</plug:getPurchasesByParams>
            |</soapenv:Body>
            |</soapenv:Envelope>";    
            MSXML = Новый COMОбъект("MSXML2.XMLHTTP");
            MSXML.open("POST", "http://"; + МестоположениеWSDL + "/SET-ERPIntegration/FiscalInfoExport?wsdl", 0);
            MSXML.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
            MSXML.setRequestHeader("Content-Length", СтрДлина(Запрос));
            MSXML.setRequestHeader("SOAPAction", "getPurchasesByOperDay");
            MSXML.send(Запрос);
            ОтветПолучен = Ложь;
            Для НомерЦикла = 1 по 100 Цикл
                Если MSXML.readyState > 3 Тогда
                    ОтветПолучен = Истина;
                    Прервать;
                КонецЕсли;      
            КонецЦикла;  
            
            Если ОтветПолучен Тогда
                ДвоичныеДанные = Base64Значение(MSXML.responseXML.text);
   cmex
 
17 - 23.04.19 - 17:24
up
   Cyberhawk
 
18 - 23.04.19 - 17:24
Кому охота разбираться в твоих мытарствах?
   cmex
 
19 - 23.04.19 - 17:27
(18) ты только последний вариант про окультурить решил рассмотреть? Как по умному то сделать?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует