Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Как передать 3 параметра вместо 4 в функцию ws-ссылки

Как передать 3 параметра вместо 4 в функцию ws-ссылки
Я
   rumi
 
17.03.20 - 13:12
Добрый день.
Существует сервис, с которым происходит обмен через ws-ссылку.

В конкретном случае у их web сервиса есть метод SaveDataObjectRecord(dataObjectRecord, lang, version, runAs)
В дереве ws ссылки:

DataObjectRecord - Возможно пустое: Истина
lang - Возможно пустое:             Истина
version: Возможно пустое:           Ложь
runAs = Возможно пустое:            Истина

Но при попытке отправки запроса с тремя параметрами, например без runAs
SaveDataObjectRecord(dataObjectRecord, lang, version)
1С перед отправкой выдает ошибку: "Недостаточно физических параметров"
Вроде как есть "какая-то галочка" которую можно убрать. Подскажите, пожалуйста.
 
 
   rumi
 
1 - 17.03.20 - 13:15
   Cyberhawk
 
2 - 17.03.20 - 13:19
Так "Возможно пустое" - это не про возможность опустить его, а про возможность передавать туда Неопределено
   rumi
 
3 - 17.03.20 - 13:21
(2) У них этот параметр runAs не проходит проверку на NULL. Сервер возвращает ответ "SERVER_ERROR", причем первые два параметра сделаны с этой проверкой
   rumi
 
4 - 17.03.20 - 13:22
(2) Смысл в том, чтобы Вызвать функцию с тремя параметрами, но чтобы при этом 1С не ругался, что их 3, а не 4
   Cyberhawk
 
5 - 17.03.20 - 13:22
(4) Откуда потребность "Вызвать функцию с тремя параметрами"?
   rumi
 
6 - 17.03.20 - 13:26
(5) Ответ от разработчика web сервиса.
"Будет работать, если вызовите с тремя параметрами, причем четвертый runAs не указывайте как null. Его просто не должно быть".
   Cyberhawk
 
7 - 17.03.20 - 13:27
(6) Передавай туда Неопределено, не баклань
   rumi
 
8 - 17.03.20 - 13:27
(7) Сервер возвращает ответ "SERVER_ERROR"
   Cyberhawk
 
9 - 17.03.20 - 13:30
(8) А прокси в коде как создаешь - из файла / wsdl-описания или своего пакета? У тебя параметр в этой операции ендпоинта обязательный, поэтому не указывать не получится. Минимальное количество = 0 надо поставить в wsdl-описании, тогда заработает.
   Cyberhawk
 
10 - 17.03.20 - 13:30
Но это придется динамически править wsdl-описание, коли оно кривое у поставщика сервиса
   rumi
 
11 - 17.03.20 - 13:34
(9) из файла. Поставщик ленивый. Говорит, что за полгода не смогли разобраться как исправить
   rumi
 
12 - 17.03.20 - 13:37
(10) Как править подскажите, пожалуйста
   rumi
 
13 - 17.03.20 - 13:39
https://radikal.ru/big/lm2lry3j40w0l
Какое-то значение отсюда взять и подставить перед вызовом?
   rumi
 
14 - 17.03.20 - 13:43
(9)
Определение = Новый WSОпределения("http://srs.gs1ru.org/GS46_Interfaces/GS1RU_Operations?wsdl";, Пользователь, Пароль);

Прокси = Новый WSПрокси(Определение, ПространствоИмен, ИмяСервиса, ТочкаПодключения);  
Прокси.Пользователь = Пользователь;
Прокси.Пароль = Пароль;
   Cyberhawk
 
15 - 17.03.20 - 14:16
(11) Кинь файл
   rumi
 
16 - 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);
   rumi
 
17 - 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>
   rumi
 
18 - 17.03.20 - 14:31
   rumi
 
19 - 17.03.20 - 15:11
(15)
подняли web сервис. Теперь там другой файлик, но смысл тот же.

https://dropmefiles.com/pxaTF
   Cyberhawk
 
20 - 17.03.20 - 16:08
Схему-то скинь
   Cyberhawk
 
21 - 17.03.20 - 16:10
А лучше логин и пароль
   rumi
 
22 - 17.03.20 - 16:21
l: 4660059229997
p: 906214335
   Cyberhawk
 
23 - 17.03.20 - 16:35
Нормально все в схеме, minOccurs = 0
   rumi
 
24 - 17.03.20 - 16:51
(23)
Это означает, что значение параметра можно передать как Неопределено. Верно?
Смысл в том, что их серверу нужно передать функцию с ТРЕМЯ параметрами . Если вызвать функция(п1, п2, п3, Неопределено), то приходит ошибка SERVER_ERROR
   Cyberhawk
 
25 - 17.03.20 - 16:53
Вообще есть ощущение, что 1С при импорте ВС-ссылки сама разворачивает объект-параметр на 4 входящих параметра.
Попробуй вызывать операцию прокси с одним параметром (ХДТО-объектом) с тремя свойствами.
   Cyberhawk
 
26 - 17.03.20 - 16:55
wrapped-стайл и все такое. Мрак.
   rumi
 
27 - 17.03.20 - 17:06
"Недостаточно фактических параметров" (26)
   rumi
 
28 - 17.03.20 - 17:12
Можно ли как-то убрать проверку от 1С на количество параметров?
   arsik
 
29 - 17.03.20 - 17:24
(28) Попробуй вот так сделать
<xs:complexType name="SaveDataObjectRecord">
        <xs:sequence>
            <xs:element name="DataObjectRecord" type="tns:dataObjectRecord" form="qualified" minOccurs="0"/>
            <xs:element name="lang" type="xs:string" form="qualified" minOccurs="0"/>
            <xs:element name="change_version" type="xs:boolean" form="qualified"/>
            <xs:element name="runAs" type="xs:string" nillable="true" form="qualified" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

   arsik
 
30 - 17.03.20 - 17:28
+ (29) Ну или вообще так оставь
<xs:complexType name="SaveDataObjectRecord">
        <xs:sequence>
            <xs:element name="DataObjectRecord" type="tns:dataObjectRecord" form="qualified" minOccurs="0"/>
            <xs:element name="lang" type="xs:string" form="qualified" minOccurs="0"/>
            <xs:element name="change_version" type="xs:boolean" form="qualified"/>
            <xs:element name="runAs" type="xs:string" nillable="true" form="qualified" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

 
 Рекламное место пустует
   arsik
 
31 - 17.03.20 - 17:28
+ (30) Сори. Вот так
<xs:complexType name="SaveDataObjectRecord">
        <xs:sequence>
            <xs:element name="DataObjectRecord" type="tns:dataObjectRecord" form="qualified" minOccurs="0"/>
            <xs:element name="lang" type="xs:string" form="qualified" minOccurs="0"/>
            <xs:element name="change_version" type="xs:boolean" form="qualified"/>
        </xs:sequence>
    </xs:complexType>

   rumi
 
32 - 17.03.20 - 17:30
(31) К сожалению, я не могу у них на сервере подредактировать этот файлик. Они упираются рогами, что у них всё ок.
   arsik
 
33 - 17.03.20 - 17:31
(32) Зачем на их сервере? Ты можешь их схему сохранить в файл и поправить его. И при создании использовать его, а не с их сайта.
   arsik
 
34 - 17.03.20 - 17:34
+(33) Ну или прямо импортировать схему в 1С и там ее поправить.
https://i.imgur.com/RgvnXpC.png
   Cyberhawk
 
35 - 17.03.20 - 17:47
(27) Ок. В ХДТО-пакете ВС-ссылки поставь "Возможно пустое" = Истина, это и есть nillable = true
   Cyberhawk
 
36 - 17.03.20 - 17:48
Но вообще конфигурацию насиловать необязательно, в (10) и подразумевался способ, описанный в (33).
   rumi
 
37 - 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";

Здесь туплю. Как его теперь отправить и получить ответ?
ОтветОтСервера = ???
   Cyberhawk
 
38 - 18.03.20 - 09:23
(37) Зачем ты что-то в конфу добавляешь и правишь в ней, если прокси все равно создаешь по wsdl-описанию из онлайна (от поставщика сервиса)?
"Как его теперь отправить и получить ответ?"// Ну так же, как и раньше - Прокси.SaveDataObjectRecord(параметрыSaveDataObjectRecord);
   rumi
 
39 - 18.03.20 - 13:53
(38)
Потому у меня и пошел ступор, что все равно придется вызывать функцию у них на сервере и передавать туда параметры (а их там будет 4), хотя в XML описана эта функция с одним параметром parameters в который и добавляем нужные.

На самом деле тут проблема в том, что 1С почему-то по разному импортирует XML блоки.
Может быть есть какая-то обработка для редактирования импортированной схемы из ws-ссылки?

Написал к ним в тех поддержку. Они создали тикет. Надеюсь удалят ненужный им параметр из XML
   Cyberhawk
 
40 - 18.03.20 - 16:31
"1С почему-то по разному импортирует XML блоки"// Ну, в (25) же об этом речь.

У тебя всегда есть железобетонный вариант, который сработает всегда - это формировать СОАП-конверт вручную (в виде xml-текста) и стучаться в веб-сервис не через ВС-прокси, а через ХТТП-соединение


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