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


1С:Предприятие ::

Метки: 

Помогите разобраться с web-сервисом. Как передать структуру (массив) как параметр ?

Я
   Румата
 
14.12.17 - 11:57
Начал разбираться с Веб - сервисами.
WSDL-файл, который является описанием web-сервиса, в конфигурацию загрузил. Его предоставил наш контрагент, с которым мы налаживаем обмен информацией.

Приинициализировать объект-посредник (типа WSПрокси).
НашСервис =WSСсылки.Портал.СоздатьWSПрокси("XXX","XXXX","ХХХХ");

Отладил, все нормально, подключается...

Теперь хочу обратится к методу Веб-сервиса. Читаю документацию, а там в качестве параметра метода передается состовной параметры, т.е. параметр, который в моем случае состоит из трех параметров.

Как этот составной параметр передать веб-сервису ? Подскажите пожалуйста, кто уже сталкивался ...
 
  Рекламное место пустует
   Mankubus
 
1 - 14.12.17 - 12:02
(0)
СоставнойПараметр = НашСервис.ФабрикаXDTO.Создать(НашСервис.ФабрикаXDTO.Тип("ПространствоИмен","ИмяТипа"));
СоставнойПараметр.Поле1 = ЗначениеПоля1;
СоставнойПараметр.Поле2 = ЗначениеПоля2;
СоставнойПараметр.Поле3 = ЗначениеПоля3;
   asady
 
2 - 14.12.17 - 12:04
(0) как правило это json объект
можно тупо сгенерить json строку и отправить
   VS-1976
 
3 - 14.12.17 - 12:06
(0) Загони web-сервис в WS-ссылки. Далее посмотри его XTDO ( для данной процедуры ). И загоняй в его структуру данные.
   Fragster
 
4 - 14.12.17 - 12:06
(2) что за бред?
   Остап Сулейманович
 
5 - 14.12.17 - 12:10
(4) Примерно так :
1. Сделать метод веб-сервиса с единственным входным параметром типа строка.
2. На вызывающей стороне все укладывать в строку (в строку с разделителями, в ХМЛ, в Джейсон) и скармливать ее методу веб-сервиса.
3. На стороне сервиса парсить строку и получать все три параметра.
   Fram
 
6 - 14.12.17 - 12:10
я б этим программистам, расшаривающим через SOAP методы со сложными параметрами, ноги бы отрывал
   Остап Сулейманович
 
7 - 14.12.17 - 12:11
+ (5) Кстати так получалось передавать таблицу значений (правда с колонками простых типов), уложенную в ХранилищеЗначения.
   Fragster
 
8 - 14.12.17 - 12:12
(5) нафига тогда SOAP? Она нужен, чтобы формализовать обмен, а не ради бессмысленного воерхэда
   Fragster
 
9 - 14.12.17 - 12:12
(6) может ты просто не умеешь готовить?
   Fragster
 
10 - 14.12.17 - 12:12
(7) возьми с полки пирожок
 
  Рекламное место пустует
   Fragster
 
11 - 14.12.17 - 12:13
(8)* оверхэда
   Остап Сулейманович
 
12 - 14.12.17 - 12:14
+ (7) Кстати 1С в примере передачи ТабличногоДокумента на мобильное устройство поступало точно также. ТабличныйДокумент на стороне сервера укладывался в Хранилище. Передавался через ВЕБ-сервис. И на стороне мобильного устройства получался из Хранилища.
   Fram
 
13 - 14.12.17 - 12:15
(9) ну, знаешь.. подготовить в 1с сложный параметр под метод соап вебсервиса написанного на java, то еще удовольствие
   Fram
 
14 - 14.12.17 - 12:16
(13) способ (5) намного проще для обеих сторон
   Fragster
 
15 - 14.12.17 - 12:17
(13) не вижу ничего сложного, если в wsdl всё описано.
   Fragster
 
16 - 14.12.17 - 12:17
(14)->(8)
   Fram
 
17 - 14.12.17 - 12:19
(15) при динамическом вызове (без создания объекта в конфе) это долго и муторно
   Fragster
 
18 - 14.12.17 - 12:21
(17) ничуть, см пример в http://fragster.ru/wsfor1c/ (там, конечно, нет большой вложенности объектов, ибо пример), но воспользоваться нужной фабрикой без веб добавления ссылки в конфигурацию очень просто.
   Fram
 
19 - 14.12.17 - 12:22
(16) ну, что предоставила другая сторона, тем и пользовались. это было лет 10 назад. тогда соап в моде был
   Fragster
 
20 - 14.12.17 - 12:22
Прокси = Новый WSПрокси(Определение, ПространствоИменСервиса, ИмяСервиса, ИмяТочкиПодключения);
    Фабрика = Определение.ФабрикаXDTO;

    ОбъектСервиса = Фабрика.Создать(Фабрика.Тип(ПространствоИменСервиса, "TestClass41"));
    ОбъектСервиса.a = Параметр41;
    ОбъектСервиса.b = Параметр42;
    ОбъектСервиса.res = 0;
    ОбъектРезультат = Прокси.test4(ОбъектСервиса);

    Результат41 = ОбъектСервиса.res;
    Результат42 = ОбъектРезультат.res;
   Fragster
 
21 - 14.12.17 - 12:23
для массива
    Определение = Новый WSОпределения(АдресWSDL);

    Прокси = Новый WSПрокси(Определение, ПространствоИменСервиса, ИмяСервиса, ИмяТочкиПодключения);
    Фабрика = Определение.ФабрикаXDTO;

    ОбъектСервиса = Фабрика.Создать(Фабрика.Тип(ПространствоИменСервиса, "TestClass51"));
    Для Каждого Стр Из Параметр5 Цикл
            Элемент = Фабрика.Создать(Фабрика.Тип(ПространствоИменСервиса, "TestClass52"));
            ЗаполнитьЗначенияСвойств(Элемент, Стр);
            ОбъектСервиса.arr.Добавить(Элемент);
    КонецЦикла;
    ОбъектРезультат = Прокси.test5(ОбъектСервиса);
    Результат5.Очистить();
    Для каждого ЭлементРезультата Из ОбъектРезультат.res Цикл
            Результат5.Добавить().res = ЭлементРезультата;
    КонецЦикла;
   Fragster
 
22 - 14.12.17 - 12:23
лишних строк практически нет
   Fragster
 
23 - 14.12.17 - 12:23
(12) это сделано ради сжатия данных
   Fram
 
24 - 14.12.17 - 12:24
(21) писать столько кода на каждый уровень вложенности считаю не очень нормальным
   Fram
 
25 - 14.12.17 - 12:25
(24) + а в моем случае объект был очень сложным по структуре
   Fragster
 
26 - 14.12.17 - 12:26
(24) ну, можно написать функцию из 3 (трёх, карл!) строк, которая создаст весь объект со всеми свойствами
   Fram
 
27 - 14.12.17 - 12:31
(26) подход в (5) проще. собственно, следующая версия, используемого мной вебсервиса, уже реализовывала уже такой подход.
   Fragster
 
28 - 14.12.17 - 12:34
(27) тогда отказывайтесь от soap вообще, тем более, что оверхэд там реально большой относительно http, где-то +25%
   Fragster
 
29 - 14.12.17 - 12:36
вся сила - в формализации. Не все, к сожалению, понимают, что статическая типизация - путь к избавлению от кучи "детских" ошибок (опечаток, и т.п.). Вон, даже от жаваскрипта в тайпскрипт переходят.



Список тем форума
Рекламное место пустует  
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует