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


1С:Предприятие :: 1С:Предприятие 8 общая

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

Помогите разобраться с  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
вся сила - в формализации. Не все, к сожалению, понимают, что статическая типизация - путь к избавлению от кучи "детских" ошибок (опечаток, и т.п.). Вон, даже от жаваскрипта в тайпскрипт переходят.


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