|
Как передать 3 параметра вместо 4 в функцию ws-ссылки | ☑ | ||
---|---|---|---|---|
0
rumi
17.03.20
✎
13:12
|
Добрый день.
Существует сервис, с которым происходит обмен через ws-ссылку. В конкретном случае у их web сервиса есть метод SaveDataObjectRecord(dataObjectRecord, lang, version, runAs) В дереве ws ссылки: DataObjectRecord - Возможно пустое: Истина lang - Возможно пустое: Истина version: Возможно пустое: Ложь runAs = Возможно пустое: Истина Но при попытке отправки запроса с тремя параметрами, например без runAs SaveDataObjectRecord(dataObjectRecord, lang, version) 1С перед отправкой выдает ошибку: "Недостаточно физических параметров" Вроде как есть "какая-то галочка" которую можно убрать. Подскажите, пожалуйста. |
|||
1
rumi
17.03.20
✎
13:15
|
||||
2
Cyberhawk
17.03.20
✎
13:19
|
Так "Возможно пустое" - это не про возможность опустить его, а про возможность передавать туда Неопределено
|
|||
3
rumi
17.03.20
✎
13:21
|
(2) У них этот параметр runAs не проходит проверку на NULL. Сервер возвращает ответ "SERVER_ERROR", причем первые два параметра сделаны с этой проверкой
|
|||
4
rumi
17.03.20
✎
13:22
|
(2) Смысл в том, чтобы Вызвать функцию с тремя параметрами, но чтобы при этом 1С не ругался, что их 3, а не 4
|
|||
5
Cyberhawk
17.03.20
✎
13:22
|
(4) Откуда потребность "Вызвать функцию с тремя параметрами"?
|
|||
6
rumi
17.03.20
✎
13:26
|
(5) Ответ от разработчика web сервиса.
"Будет работать, если вызовите с тремя параметрами, причем четвертый runAs не указывайте как null. Его просто не должно быть". |
|||
7
Cyberhawk
17.03.20
✎
13:27
|
(6) Передавай туда Неопределено, не баклань
|
|||
8
rumi
17.03.20
✎
13:27
|
(7) Сервер возвращает ответ "SERVER_ERROR"
|
|||
9
Cyberhawk
17.03.20
✎
13:30
|
(8) А прокси в коде как создаешь - из файла / wsdl-описания или своего пакета? У тебя параметр в этой операции ендпоинта обязательный, поэтому не указывать не получится. Минимальное количество = 0 надо поставить в wsdl-описании, тогда заработает.
|
|||
10
Cyberhawk
17.03.20
✎
13:30
|
Но это придется динамически править wsdl-описание, коли оно кривое у поставщика сервиса
|
|||
11
rumi
17.03.20
✎
13:34
|
(9) из файла. Поставщик ленивый. Говорит, что за полгода не смогли разобраться как исправить
|
|||
12
rumi
17.03.20
✎
13:37
|
(10) Как править подскажите, пожалуйста
|
|||
13
rumi
17.03.20
✎
13:39
|
https://radikal.ru/big/lm2lry3j40w0l
Какое-то значение отсюда взять и подставить перед вызовом? |
|||
14
rumi
17.03.20
✎
13:43
|
(9)
Определение = Новый WSОпределения("http://srs.gs1ru.org/GS46_Interfaces/GS1RU_Operations?wsdl", Пользователь, Пароль); Прокси = Новый WSПрокси(Определение, ПространствоИмен, ИмяСервиса, ТочкаПодключения); Прокси.Пользователь = Пользователь; Прокси.Пароль = Пароль; |
|||
15
Cyberhawk
17.03.20
✎
14:16
|
(11) Кинь файл
|
|||
16
rumi
17.03.20
✎
14:25
|
(15)
Определение = Новый WSОпределения("http://srs.gs1ru.org/GS46_Interfaces/GS1RU_Operations?wsdl", Пользователь, Пароль); Прокси = Новый WSПрокси(Определение, ПространствоИмен, ИмяСервиса, ТочкаПодключения); Прокси.Пользователь = Пользователь; Прокси.Пароль = Пароль; типdataObjectRecord = Прокси.ФабрикаXDTO.Тип(ПространствоИмен, "dataObjectRecord"); Параметр_DataObjectRecord = ПолучитьОбъектDataObjectRecord(Прокси); Параметр_change_version = false; Параметр_lang = "RU"; Параметр_runAs = Пользователь; ПолученныеДанные = Прокси.SaveDataObjectRecord(Параметр_DataObjectRecord, Параметр_lang, Параметр_change_version); |
|||
17
rumi
17.03.20
✎
14:28
|
(15)
Файл получаю по ссылке... Правда она сейчас перестала работать. Может начали ковырять в ней <xsd:complexType name="SaveDataObjectRecord"> <xsd:sequence> <xsd:element name="DataObjectRecord" type="ns0:dataObjectRecord" form="qualified" minOccurs="0"/> <xsd:element name="lang" type="xsd:string" form="qualified" minOccurs="0"/> <xsd:element name="change_version" type="xsd:boolean" form="qualified"/> <xsd:element name="runAs" type="xsd:string" form="qualified" minOccurs="0"/> </xsd:sequence> </xsd:complexType> |
|||
18
rumi
17.03.20
✎
14:31
|
||||
19
rumi
17.03.20
✎
15:11
|
||||
20
Cyberhawk
17.03.20
✎
16:08
|
Схему-то скинь
|
|||
21
Cyberhawk
17.03.20
✎
16:10
|
А лучше логин и пароль
|
|||
22
rumi
17.03.20
✎
16:21
|
l: 4660059229997
p: 906214335 |
|||
23
Cyberhawk
17.03.20
✎
16:35
|
Нормально все в схеме, minOccurs = 0
|
|||
24
rumi
17.03.20
✎
16:51
|
(23)
Это означает, что значение параметра можно передать как Неопределено. Верно? Смысл в том, что их серверу нужно передать функцию с ТРЕМЯ параметрами . Если вызвать функция(п1, п2, п3, Неопределено), то приходит ошибка SERVER_ERROR |
|||
25
Cyberhawk
17.03.20
✎
16:53
|
Вообще есть ощущение, что 1С при импорте ВС-ссылки сама разворачивает объект-параметр на 4 входящих параметра.
Попробуй вызывать операцию прокси с одним параметром (ХДТО-объектом) с тремя свойствами. |
|||
26
Cyberhawk
17.03.20
✎
16:55
|
wrapped-стайл и все такое. Мрак.
|
|||
27
rumi
17.03.20
✎
17:06
|
"Недостаточно фактических параметров" (26)
|
|||
28
rumi
17.03.20
✎
17:12
|
Можно ли как-то убрать проверку от 1С на количество параметров?
|
|||
29
arsik
гуру
17.03.20
✎
17:24
|
(28) Попробуй вот так сделать
<xs:complexType name="SaveDataObjectRecord">
|
|||
30
arsik
гуру
17.03.20
✎
17:28
|
+ (29) Ну или вообще так оставь
<xs:complexType name="SaveDataObjectRecord">
|
|||
31
arsik
гуру
17.03.20
✎
17:28
|
+ (30) Сори. Вот так
<xs:complexType name="SaveDataObjectRecord">
|
|||
32
rumi
17.03.20
✎
17:30
|
(31) К сожалению, я не могу у них на сервере подредактировать этот файлик. Они упираются рогами, что у них всё ок.
|
|||
33
arsik
гуру
17.03.20
✎
17:31
|
(32) Зачем на их сервере? Ты можешь их схему сохранить в файл и поправить его. И при создании использовать его, а не с их сайта.
|
|||
34
arsik
гуру
17.03.20
✎
17:34
|
+(33) Ну или прямо импортировать схему в 1С и там ее поправить.
https://i.imgur.com/RgvnXpC.png |
|||
35
Cyberhawk
17.03.20
✎
17:47
|
(27) Ок. В ХДТО-пакете ВС-ссылки поставь "Возможно пустое" = Истина, это и есть nillable = true
|
|||
36
Cyberhawk
17.03.20
✎
17:48
|
Но вообще конфигурацию насиловать необязательно, в (10) и подразумевался способ, описанный в (33).
|
|||
37
rumi
17.03.20
✎
21:49
|
(34) (36)
Начал сначала: Удалил из конфы WS-ссылку Добавил из файла xsd схему. В конфе появился XDTO-пакет. Удалил параметр runAs. Заполнил параметры: Определение = Новый WSОпределения("http://srs.gs1ru.org/GS46_Interfaces/GS1RU_Operations?wsdl", Пользователь, Пароль); Прокси = Новый WSПрокси(Определение, ПространствоИмен, ИмяСервиса, ТочкаПодключения,); Прокси.Пользователь = Пользователь; Прокси.Пароль = Пароль; типSaveDataObjectRecord = ФабрикаXDTO.Тип(ПространствоИмен, "SaveDataObjectRecord"); параметрыSaveDataObjectRecord = ФабрикаXDTO.Создать(типSaveDataObjectRecord); параметрыSaveDataObjectRecord.dataObjectRecord = ПолучитьОбъектDataObjectRecord(); параметрыSaveDataObjectRecord.change_version = false; параметрыSaveDataObjectRecord.lang = "RU"; Здесь туплю. Как его теперь отправить и получить ответ? ОтветОтСервера = ??? |
|||
38
Cyberhawk
18.03.20
✎
09:23
|
(37) Зачем ты что-то в конфу добавляешь и правишь в ней, если прокси все равно создаешь по wsdl-описанию из онлайна (от поставщика сервиса)?
"Как его теперь отправить и получить ответ?" // Ну так же, как и раньше - Прокси.SaveDataObjectRecord(параметрыSaveDataObjectRecord); |
|||
39
rumi
18.03.20
✎
13:53
|
(38)
Потому у меня и пошел ступор, что все равно придется вызывать функцию у них на сервере и передавать туда параметры (а их там будет 4), хотя в XML описана эта функция с одним параметром parameters в который и добавляем нужные. На самом деле тут проблема в том, что 1С почему-то по разному импортирует XML блоки. Может быть есть какая-то обработка для редактирования импортированной схемы из ws-ссылки? Написал к ним в тех поддержку. Они создали тикет. Надеюсь удалят ненужный им параметр из XML |
|||
40
Cyberhawk
18.03.20
✎
16:31
|
"1С почему-то по разному импортирует XML блоки" // Ну, в (25) же об этом речь.
У тебя всегда есть железобетонный вариант, который сработает всегда - это формировать СОАП-конверт вручную (в виде xml-текста) и стучаться в веб-сервис не через ВС-прокси, а через ХТТП-соединение |
|||
41
rumi
13.04.20
✎
18:06
|
(40) К сожалению, так и сделал. Вручную составлял запрос через HTTPСоединение.
Вот здесь похожая тема https://partners.v8.1c.ru/forum/message/1781734 |
|||
42
DES
13.04.20
✎
18:10
|
4 ПАРАМЕТР ПОПРОБУЙ 0 ИЛИ -1
|
|||
43
rumi
13.04.20
✎
18:19
|
(42) Пробовал. Проверки на null у них нет (выполнение на сервере прекращается), а на любое другое значение стоит заглушка - возвращает ошибку, что такое значение нельзя использовать. Криворукие разрабы. Говорят, что у всех работает, проблема в 1С. В чем-то они конечно правы, но они сами костылей напихали.
|
|||
44
rumi
13.04.20
✎
18:20
|
*Сервис на java
|
|||
45
sevod
13.04.20
✎
21:09
|
(43) Есть утилита SoapUI. Если из нее работает, ковыряй дальше у себя. Если не работает, шлешь им все настройки тестовые и пусть правят. Они ее наверняка знают.
|
|||
46
pechkin
13.04.20
✎
23:04
|
А если пустую строку передать?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |