|
Проблема с параметром метода веб-сервиса | ☑ | ||
---|---|---|---|---|
0
dudell
19.12.14
✎
00:56
|
Здравствуйте, форумчане. Уперся в проблемку с присвоением значения параметру метода веб-службы.
Ситуация следующая. Делаю выгрузку заказов через веб-сервис из 1С во внешнюю систему. Известен адрес wsdl сервера. По этому адресу сформировал в 1С объект ws-ссылку. Соответственно, в него подставились данные: модель данных и все свойства, методы. Сформировал по нему ws-прокси, затем по этому прокси - xdto-фабрику. Теперь пытаюсь запустить метод createOrder, описанный в объекте ws-ссылки. Но у параметра этого метода (orders) тип - не простой, а объектный. И как ему присвоить значение ума не приложу. По отдельному описанию этот параметр состоит из нескольких узлов, описанных в типах объекта модели данных объекта ws-ссылки. Т. е. их можно собрать, формируя пакеты, но они все должны быть обернуты в xml-узел orders. Это получается головной тег и он выступает в роли единственного параметра метода, который я использую. И у этого параметра тип не простой, а объектный. Это первый опыт у меня с веб-сервисами, поэтому может не совсем адекватно излагаю мысли, прошу прощения за это. Кажется все как-то просто должно бытть, но не могу догнать, как таким объектным типам присваивать значения? |
|||
1
Записьдампа
19.12.14
✎
01:08
|
1) Получить из определения сервиса ФабрикуXDTO
2) Получить при помощи этой фабрики по пространству имен и имени типа ТипXDTO 3) Создать при помощи этой фабрики и этого типа ОбъектXDTO (или ЗначениеXDTO) 4) Напихать в реквизиты объекта значений. Если значения тоже объектного типа, то см. п2 5) Скормить полученный объект параметром в вызов сервиса |
|||
2
Записьдампа
19.12.14
✎
01:23
|
4.5) Если это список (верхнее ограничение количества = -1), то:
Список = ОбъектВладелец.ПолучитьСписок(<Имя владеющего свойства>); ЭлементСписка = <Созданный по пп 2-4 объект>; Список.Добавить(ЭлементСписка); Похоже с твоим orders как-то так будет |
|||
3
BOZKURT
19.12.14
✎
01:54
|
Функция СоздатьНовыйОбъектВебСервиса(wsUriNamespace, wsПрокси, ИмяТипа)
тип = wsПрокси.ФабрикаXDTO.Тип(wsUriNamespace, ИмяТипа); значение = wsПрокси.ФабрикаXDTO.Создать(тип, Неопределено); Возврат значение; КонецФункции Функция СоздатьПараметрВебСервиса(wsUriNamespace, wsПрокси, ИмяМетода, ИмяПараметра, ЗначениеПараметра) ТипПараметра = wsПрокси.ФабрикаXDTO.Пакеты.Получить(wsUriNamespace).Получить(ИмяМетода); Параметр = wsПрокси.ФабрикаXDTO.Создать(ТипПараметра); Параметр[ИмяПараметра] = ЗначениеПараметра; Возврат Параметр; КонецФункции wsОпределения = Новый WSОпределения(URL); wsПрокси = Новый WSПрокси(wsОпределения, UriNamespace, "MyService", "MyServiceSoap"); orders = СоздатьНовыйОбъектВебСервиса(UriNamespace, wsПрокси, "orders"); //... заполняем orders //создаем параметр Параметр = СоздатьПараметрВебСервиса(UriNamespace, wsПрокси, "createOrder", "orders", orders); //дергаем метод wsПрокси.createOrder(Параметр); |
|||
4
dudell
20.12.14
✎
19:16
|
(1) Можно поподробнее на пункте 4. У меня получается что у объектаXDTO реквизит некого объектного типа. (К слову говоря, в отладчике его тип обозначен как Неопределен). Этому реквизиту я не могу ничего присвоить - на этом месте вылетает ошибка. Как можно в данном случае вернуться на пункт 2 ?
|
|||
5
Записьдампа
21.12.14
✎
11:39
|
Надо создать еще один объект нужного типа, как написано в п2, и присвоить его нужному реквизиту. Покажи wsdl - на конкретном примере понятней будет.
|
|||
6
hhhh
21.12.14
✎
12:01
|
||||
7
dudell
22.12.14
✎
16:02
|
(5) Спасибо. Разобрался. Изначально не обратил внимание, что в модели данных WS-ссылки - подтянулись все возможные типы для работы с фабрикой. В том числе мой "непонятный" объектный тип там тоже есть. Соответственно, к нему можно создать xdto-объект. Все правильно.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |